本书涵盖了亿级用户应用后台通用的技术和系统架构设计思路,在内容结构上分为三大篇:架构知识篇(第1~3章),作为全书的基础知识篇,首先介绍后台的关键组件构成以及机房的搭建思路,然后介绍后台在应对高并发的读/写请求时通用的处理手段,最后介绍如何通过通用的服务治理手段来保障后台的高质量运行;基础服务设计篇(第4~6章),主要讲解基础服务的架构设计,这里选取的基础服务几乎是所有互联网后台都需要的专门系统,包括唯一ID生成器、用户登录服务和海量推送系统;核心服务设计篇(第7~13章),主要讲解在常见的社交互动场景中所需核心服务的架构设计,包括内容发布系统、通用计数系统、排行榜服务、用户关系服务、Timeline Feed服务、评论服务和IM服务。
本书的适用人群包括计算机相关专业的学生、希望寻求大厂软件开发工程师岗位的求职者,以及各信息技术类公司的后台研发工程师、架构师和技术管理人员。
精讲热门应用高频业务场景,剖析大型互联网后台设计思路、方法和案例,详解架构面试难点
李琛轩
资深后台研发工程师,拥有8年互联网后台研发经验,现任某全球社交产品后台子方向负责人。从事互联网社交产品领域的研发与架构设计工作多年,从业以来负责过多个知名产品的后台开发工作,相继深耕于消息队列、服务发现系统、服务治理、分布式事务、高并发架构设计、全球多活等技术领域。
亿级用户应用
如今市面上的互联网应用几乎都在追求用户规模,这不仅仅是因为只有用户规模庞大才能让产品扬名立万,更重要的是对于应用出品方来说,亿级用户会为公司带来巨大收益。
◎ 广告收入:亿级用户应用拥有巨大的“人口红利”,在应用内投放产品广告非常容易带来极大的产品曝光量和极高的产品转化率,所以会有非常可观的广告收入。
◎ 商业价值:亿级用户意味着应用的品牌拥有巨大的影响力,会天然吸引其他企业,促成联名合作。
◎ 产品带动:一旦公司拥有用户量级巨大的产品,就可以非常方便地借助它为新产品做引流和推广,以进一步扩大公司的产品规模。
鉴于亿级用户为公司带来了极高的实用价值和商业价值,针对亿级用户进行应用架构设计的工程师备受市场青睐。亿级用户意味着高并发,很多公司会在工程师招聘要求中注明“有高并发系统设计经验”,或者在面试过程中频繁考查候选人的高并发系统设计能力。所以,对于研发工程师来说,拥有高并发系统设计的知识体系是十分必要的技术素养。
本书主题
如果你是大厂的研发工程师,那么你可能每天都要面对系统怎样才能服务好亿级用户的问题;如果你所在的公司目前尚未拥有亿级用户,那么你可能会想象,若公司产品有更多用户使用的话,需要应用什么技术,或者你希望拿到大厂 Offer,却焦虑于自己没有高并发系统设计经验;如果你是计划成为研发工程师的学生,那么你可能虽然认真做了很多课程设计,但仍会好奇自己的作品对应的工业级设计应该是怎样的。
如此种种,笔者决定编写一本涵盖亿级用户应用后台常见系统设计的书,希望将自己的经验与你分享。那么,亿级用户应用后台的通用技术是什么?无非就是如何构建机房、使用哪些技术栈、如何高效处理高并发请求和如何保证后台服务的高可用等。
亿级用户应用后台有哪些通用系统(或称服务)?我们只需看那些拥有数亿名用户的应用都有哪些相似功能就能轻易得出结论,比如国民级应用或知名应用:微信、淘宝、微博、抖音、快手、小红书、百度贴吧、bilibili、爱奇艺、网易云音乐、知乎、钉钉等。这些应用的用户活跃度极高,它们几乎都支持这些功能:用户注册与登录、通知消息、用户发帖、对内容点赞、关注与粉丝、评论、私信与群聊、排行榜等,每个功能都与专门的后台服务相对应,所以这些服务都是非常通用的。
本书会详细讲解以上罗列的种种内容。
内容概要
本书在内容结构上可以分为三大篇。
架构知识篇(第1~3章):作为全书的基础知识篇,首先介绍后台的关键组件构成以及机房的搭建思路,然后介绍后台在应对高并发的读/写请求时通用的处理手段,最后介绍如何通过通用的服务治理手段来保障后台的高质量运行。
基础服务设计篇(第4~6章):主要讲解基础服务的架构设计,这里选取的基础服务几乎是所有互联网后台都需要的专门系统,包括唯一ID生成器、用户登录服务和海量推送系统。
核心服务设计篇(第7~13章):主要讲解在常见的社交互动场景中所需核心服务的架构设计,包括内容发布系统、通用计数系统、排行榜服务、用户关系服务、Timeline Feed服务、评论服务和IM服务。
特别要说明的是,本书不会专门对具体的存储系统如MySQL、Redis等的原理进行深入剖析,而是会在行文中用到它们的地方再做介绍,以便在采用相应的技术解决问题时实现理论与实践的良好结合,使读者加深对理论知识的理解。
适用人群
本书的适用人群包括计算机相关专业的学生、希望寻求大厂软件开发工程师岗位的求职者,以及各信息技术类公司的后台研发工程师、架构师和技术管理人员。希望读者通过对本书内容的学习,逐渐掌握亿级用户应用后台的设计思路和方法,提高架构设计能力和高并发意识,最终设计出性能更高、更稳定的高可用系统。
必要声明
必须承认,本书介绍的内容与笔者所在公司深耕的技术方向是比较匹配的。对于本书介绍的每一个服务,笔者所在公司都具备优秀的服务设计,并积累了服务于数亿名用户的架构经验。不过,基于保护公司知识产权与机密的原则,笔者在每章的服务设计要素中都回避了公司的独创性设计,只提供了业界公开或公认的设计思路。你在仔细推敲细节的过程中可能会发现个中内容并不能展示全貌,这是因为不同的公司对这些内容有不同的技术处理方式,笔者只能在大方向上做一些思路指引,还望各位读者主动思考,并请见谅。
另外,笔者不希望为了凑篇幅而贴上大段累赘的代码和无意义的系统配置过程,所以在内容编写上会屏蔽系统配置,只在适当的环境下贴上代码,致力于使每段文字都只聚焦于读者真正在意的干货。
职业生涯感受
从业多年,笔者对软件开发工程师这一工作最大的感受就是:作为一名技术人,不应该把自己视为“X公司的打工人”,如机器人一样循规蹈矩地完成自己应该做的工作,而是应该时刻思考自己在未来要达成什么目标——无论你是有成为某领域顶级专家或者CTO的理想,还是有去更好的公司工作的想法,在达成目标的过程中最值得做的事情都是保证自己在时刻进步,而进步的核心是持续学习,学习也是我们在工作上更上一层楼的必要条件。作为开发工程师,如果你是大厂中负责一个很小系统的所谓的“螺丝钉”,那么你可以不局限于自己的工作职责,积极获取公司内公开的资源,学习如何“造火箭”;如果你是小厂的工程师或者是未步入社会的学生,那么你可以在发达的互联网或品类繁多的图书中获取自己目前接触不到的经验与知识。总之,让你的视野上升到更高层面,去学习、去吸纳能让你进步的知识与技巧。
现在,请你假设自己是某互联网产品的技术负责人,随着本书开始一场面向亿级用户的应用架构设计之旅吧!