业务高速发展下的架构演进
今日头条作为国民级资讯阅读App,2019年用户规模超6.5亿人,日活1.2亿+,视频播放量占头条整体65%+,头条号文章发布量超1.6亿,视频发布量超1.5亿。
今日头条系统,在稳定性可用性方面压力比较大,一方面须要快速把业务实现,但在其余一方面,类似这些高可用的问题会常常骚扰工程师:上线就挂、运营活动量大做事崩溃、单机性能顶不住、一个小做事上线把核心做事搞挂了……类似这些问题,技能团队须要如何更好的去应对?

架构演进,在不同阶段的公司都会面临各种压力。小公司压力可能是业务没起来,QPS 很低,要做优化也没有环境及条件。当公司大了,做事器可能已经不是问题,但你要不断考虑调优及应对访问压力,改进根本举动步伐以供应更稳定的开拓环境。以是说架构演进是持续一个过程,没有终点。
02
今日头条架组成长的三个阶段
第一阶段:传统的三层架构、单体架构
今日头条刚开始做的时候,便是一个大略 Web 运用,搭个数据库,把业务实现就行了。头条最开始的上风是推举引擎,还有其余一套数据挖掘和离线打算。在线的做事在前审察对来讲模式还是比较清晰的,三层就搞定了。业务刚开始起来的时候,没什么问题,访问增大水平扩展一下就可以办理。
第二阶段:系统拆分、打散
跟大多数的架构演进历史非常类似,系统碰着性能瓶颈后,最大略就做一些拆分。优化的过程中,便是把压力较大的子系统就从代码上进行拆分,分成多个可独立支配、无状态化的做事。
这个阶段可以把SSO、用户中央、文章中央、视频、评论等拆分出来,每个业务中央都可以集群支配,达到加机器就可以办理性能问题的效果。
随着业务的快速发展,代码和架构上的包袱是比较沉重,改造的本钱比较高。基于这些问题,就要开始演进到下一个阶段,微做事。
第三阶段,微做事,中台化架构
通过拆分成子系统,大的运用拆成小运用,抽象通用层做代码复用。重点在根本举动步伐,希望通过根本举动步伐提高快速迭代、容灾和一系列的事情,希望各个业务团队能更快做业务上的迭代以及架构上的调度。
(微做事架构)
(微做事架构)
微做事最关键的三点:
1、解耦,一个做事会依赖其余一个做事、模块或子做事的观点。
2、轻量,减轻掩护职员的本钱。
3、易管理。
03
头条的做事化架构培植思路
立规范。包括支配RPC规范、做事调用规范、做事管理原则、超时重试机制等等,否则规模大了之后就会是个灾害。
打根本。有了规范往后,开始真正落地的做事。比如说根本库,把Ngnix、Redis、MySQL这些库封装起来,统一起来做一些开拓框架,做业务系统开拓的时候,就不用关注数据层的细节,专心实现业务逻辑。
渐进。先拆离再迭代,逐步把做事优化起来。
统统都是做事。第四点是和其他公司或团队稍不一样的地方,我们的想法是统统都是做事,每个节点都是抽象归属于某一个详细的做事。存储的确是一个做事,但它不但是供应 API 或者供应功能的东西,还须要包括做事质量,须要别人用起来是比较大略的。
平台化。末了的落地是平台化的东西。我们框架是怎么设计,和做事怎么结合?
统统都是做事:
资源是有限的:按需申请,需申请和授权;
大略的利用办法:开拓者只须要关注业务;
有唯一定位的办法:用全局资源定位;
核心规范:
必须要有全局的中央,做事统一注册到 consul 中;
做事有唯一的标示、命名范:{产品线}.{子系统}.{模块} P.S.M,公司有很多部门,我们不肯望部门之间沟通起来有差异,以是须要有全局方案去追溯它;
业务做事利用 Thrift 描述接口、必须通报标准参数。如果用弱的描述数据,没有强约束,在客户真个数据可能会涌现类型缺点;
RPC 利用统一收敛的库;
Nginx、Redis、MC、MySQL、etc 都是做事
做事注册:我们做事统一利用 loader 或 wrapper 脚本启动,详细启动由业务决定。做事启动会有一个全局唯一ID,把 app 注册到做事里面。
做事中央
做事中央有做事信息,会同时带上是什么样的做事,其他人比较大略的调这个做事就 OK 了。这个做事到底供应什么样的做事质量,拥有者可以管理这个信息。Redis去做事,负载均衡,做事一个项目,把做事接上去。
做事关系与授权
做事之间有个关键的观点:做事授权。一样平常我们起一个做事,通过 IP 就可以连上它了。数据库有用户名认证,也可以对 IP 授权。不过内网很多做事限定比较少,不是所有做事都有授权认证。我们希望把做事之间的关联关系,全局拓扑关系记录下来并且可实行。
04
头条做事拓扑架构图
做事依赖和被依赖的全局关系拓扑图,做事变更影响范围评估,做事管理,监控预警根本,须要常常更新掩护。
05
头条RPC开拓框架设计思路
培植关键点:
1、快速开拓,代码天生
2、做事创造,做事的自动创造、做事注册
3、可不雅观测,logid、pprof、admin端口
4、容灾降级,业务降级开关
5、过载保护,熔断器、调用掌握
6、多开拓措辞异构系统
06
基于容器的云原生微做事
基于容器技能的云原生微做事,将敏捷开拓、devops完美领悟,做事化理念的落地与业务场景结合, 实现端到真个代价交付。
以上先容了今日头条架构高可用、微做事、容器化等实践
作者:作者,夏绪宏。今日头条架构师,专注对高性能大规模 Web 架构,云打算、性能优化、编程措辞理论等方向,PHP committer,HHVM 项目贡献者。2015 年加入今日头条卖力根本举动步伐,系统架构设计和优化,办理大流量高并发下的系统性能、可靠性和运维效率等方面的问题。