随着越来越多的公司应用服务化,针对分布式架构下多服务、微服务等的服务治理自然就成为了大家关心的话题。余额宝自2013年上线之后,目前存量已经突破万亿,用户规模达到5亿以上,为了支持这样的用户体量,余额宝不断地对现有IT架构进行优化和治理,本文我们采访到了12月北京 ArchSummit 全球架构师峰会讲师天弘基金(余额宝)移动平台技术总监 & 首席架构师李鑫,他为我们详细介绍了余额宝是如何做服务治理的。

余额宝负责服务治理的核心团队是服务治理委员会,该委员会的成员大约为8人,包含了架构师、服务开发团队的TeamLeader、运维等。据李鑫介绍,治理委员会每两周有固定会议,集中分析这段时间内相关的服务度量指标分析报表,包括线上服务集群的性能趋势、容量趋势、健康度趋势,整体调用关系质量变化趋势、服务运维质量,以及线下的研发开发效率趋势、研发协同配合度等等报表报告,并在此基础上讨论相应的管控措施、管理改进决策及落地计划。

在治理能力构建方面,余额宝没有设置专职人员,而是由开发团队统筹负责,架构师牵头进行相应的治理能力方案设计,把治理能力的开发工作作为架构优化统一排入迭代开发中,然后再安排相关开发人员来实现。

余额宝服务治理的方法论

与其它行业相比,金融行业在服务治理方面有哪些特有的挑战呢?

  • 首先,由于金融行业,尤其是互联网金融行业,属于国家强监管行业,涉及到巨额资金流动,因此安全合规是系统开发设计的首要考虑因素。

  • 其次,服务化的根本目标之一是让应用更“轻”,提高研发效率,让线上应用开发和部署更快。如何平衡安全和合规监管的“重”与服务化的“轻、快”之间的矛盾,也是金融行业服务化的一大挑战。

  • 第三,互联网金融领域普遍秉持的是“谋定而后动”的原则,上线一个功能需要经过缜密的设计和重重审核,很难像其它互联网应用领域那样进行频繁的“试错”,服务治理也不例外。

李鑫表示:“余额宝在服务度量方面,利用收集到的线上线下各个维度的指标来进行部分安全及合规的分析,例如,基于服务访问日志做用户行为异常分析,基于研发过程指标生成流程规范性分析报告,这也算是服务治理能力的一种‘扩展’。此外,支撑我们服务化的研发CI/CD流水线会比一般公司更复杂,因为额外增加了一些发布检查及审核的环节,并且有一些本来可以是全自动化的运维管控流程也增加了人工审核环节。”

余额宝的服务治理没有非常具象化的系统或者平台,而是分散在包含监控、线上运维、数仓等多个平台之中。

“但这并不意味着治理能力的分散,相反,我们有一套很完整的服务治理方法论及策略。”李鑫表示:“我们对服务的治理覆盖线上和线下两大领域,并按服务的度量、管控、管理这三个层次来划分及组织服务治理能力。”

在这三个层次中,服务度量是最核心和最基础的,它解决的是服务可观察性的问题。只有解决了“看”的问题,才能在此基础上进行服务的管控和管理。服务度量主要是采集线上的访问日志、系统日志、调用量、访问延时、异常、调用关系及线下的服务开发、测试、运维等各个维度的指标,汇总后再进行统一的度量和分析。为了度量方便,专门开发了度量大盘,为各种服务度量分析和相对应的管控举措提供统一的入口门户。

针对线上线下的指标,余额宝也有不同的获取方式。如果是在线上,可以通过服务注册中心获取到服务的注册信息及服务的管控指令信息,通过各个微服务主机节点上的主机日志、应用及服务日志、APM 监控的调用链日志,获取到相关的性能及异常指标信息;如果是线下指标,可以通过需求管理系统采集到服务相关UserStory 及各类需求的基本信息,通过项目管理系统采集到开发人员、开发团队、开发任务的基础信息,通过测试相关的管理系统采集到测试用例及测试 bug 的相关定义信息及过程指标信息,通过源码仓库及软件版本仓库采集到最终研发产出物的基本信息等等。

另外,还有一类治理度量指标——从各种协作模式的相关过程管理系统中抽取出的的过程指标事件。常用的协作模式包括针对开发和测试之间配合的持续集成(CI),针对产品、开发、测试的敏捷协作模式,针对DevOps的Pipeline等。常见的过程指标事件包括任务何时完成设计,何时进入开发,何时完成开发等等。

这些线上线下指标会被统一汇总到数据仓库进行进一步的深度度量和分析。

其中一部分的线上性能及异常指标会被转化为运维事件,一旦触发预先设置的阈值,就会更进一步被转化成“管控指令”,通过调度中心下发,进行服务的弹性伸缩、扩容缩容操作,或者进行服务的限流、降级、容错、路由调整等管控操作。

而另一部分度量指标,包括线上的性能、异常,以及线下的架构、开发、测试、运维、过程协作效率等会通过层层的维度汇总,最终生成服务的性能趋势分析、容量趋势分析、健康度分析、架构合理性分析、开发及协同效率分析等分析报告。服务治理委员会会定期对这些分析报告进行人为的深入分析,并制定出治理决策,这些治理决策会通过相关的管理措施进行落地。

通过服务的度量、管控、管理这三大举措,余额宝构建起了一个三位一体、围绕服务治理的闭环体系。

在服务治理工具的选型方面,李鑫表示服务度量以自研为主,包括线上线下指标的采集、传输、存储、分析等,服务管控能力主要是依托蚂蚁金融云的现有能力来实现。服务度量选择自研的主要原因,一是业界没有现成的一体化产品可供开箱即用,即使有,也要解决与服务框架适配性的问题;二是因为自研可以根据自身的需要,灵活开发指标的采集粒度及分析粒度。

余额宝的服务拆分与整合

服务化的本质就是一个“拆”字,原来的单体应用被拆成了大大小小的应用集群和服务集群,并被分散到网络的各个节点,由不同团队负责。这个时候,传统意义上的架构师的职责实际上是被弱化了,对应用及服务的规划、架构、设计能力更多的被下沉到一线团队,由开发人员直接承担。但是每个团队的整体能力及风格各不相同,服务切分及设计的尺度很难做到完全统一。这种情况下,如果对架构完全放任不管的话,往往会导致随意创建服务、服务滥用、服务能力冗余等一系列问题。

因此,李鑫认为在分布式环境下做服务化拆分,更要加强对服务集群整体架构的掌控,防止架构“劣化”。要做到这一点,最重要的就是对线上服务进行有效的梳理。在服务数量比较少的时候,架构师还勉强能将服务之间的调用关系梳理清楚,一旦服务数量膨胀,服务之间的调用将构成一张非常庞大和密集的“网”。这时候,依靠人工来梳理服务调用关系是不现实的,需要借助一些自动化的手段。

据了解,余额宝在服务梳理方面主要采用了两条“链”,动态调用链和静态调用链。

很早之前,余额宝就在服务框架的基础上构建了APM能力,动态调用链跟踪是它的核心功能,基本上是参考Google的Dapper论文来实现的。调用关系发现是动态调用链跟踪的一个基本能力,只要经过足够长时间的调用日志积累,它就能勾画出足够详细的线上服务和服务之间、服务和资源之间的调用关系。

不过,动态调用链成于“动态”,也受限于“动态”,它只能在运行状态下生效,而且,必须是有埋点并实际发生的调用才能被监控和采集数据,不管这个埋点是手工埋点还是自动埋点。而线上的很多服务往往存在大量的冗余分支和异常处理逻辑,这些分支及逻辑,需要在特定场景下才会被触发,甚至有的可能永远都不会被触发。因此,动态调用链勾画出的只是系统全貌的一部分。

为了弥补动态调用链在服务梳理上的不足,余额宝团队决定基于源码来梳理服务之间完整的调用关系,并开发了一套对源码仓库中所有工程源码进行统一扫描的工具。该工具的核心是 eclipse 中负责源码解析的 AST 组件(Abstract Syntax Tree,中文为抽象语法树)。通过 AST,可以获取到源码工程中任何一个 Java 源码文件中所调用的外部类、继承或者实现的接口(父类)、类变量集合、类方法集合、方法逻辑块(多层嵌套)、注释等等基本信息,有了这些基本信息之后,通过对代码的逐行扫描,并基于一系列的正则及其它匹配,就可以获取到一个方法对其它方法的调用关系,汇总之后,最终构建出一个跨工程、方法一级的庞大的调用关系矩阵。微服务之间的调用关系是这个调用矩阵的一个子集。由于这个调用关系矩阵和基于动态调用链路跟踪所获取到的调用链路非常类似,因此,李鑫把它称之为静态调用链路。

基于动态调用链和静态调用链可以做很多服务集群整体宏观架构及微观架构上的梳理及优化工作,如服务的回环调用检测、调用深度检测、集中调用检测、对外依赖度检测等等。此外,将动态调用链和静态调用链叠加,还可以梳理服务的冗余代码,为其“瘦身”。

服务拆分与整合

实现服务化必须要做的就是拆分和整合服务,在李鑫看来,服务拆分与整合本质上可以分解为两个问题,即服务的判定问题和服务的切分粒度问题。

判断一个功能是否要封装为服务的原则其实很朴素,就是看这个功能在业务或者技术上是否具有通用性,如果有,就把它从具体应用中拆出来,封装成服务,比如余额宝的申购、赎回,会在直销和代销等很多业务场景下被调用,就可以把它以独立服务的形式进行封装和部署。另外,对短信网关这类基础资源的调用,由于要做一些鉴权及流控,也可以将对资源的访问封装成服务,供各个业务系统统一调用,以降低调用的难度。

而服务的切分粒度是一个“仁者见仁,智者见智”的尺度问题,不同的开发人员来划分,结果也不尽相同。据李鑫介绍,余额宝虽然在这方面没有强制的规范,但是大家会遵循几个基本原则:

  • 首先,服务要完整体现一个单元能力,不管是业务能力还是技术能力;

  • 其次,除了聚合层服务外,服务能力要尽量自洽,也就是说,服务调用其它服务的数量尽量控制在一个合适的范围,建议不要超过10个。

  • 第三,服务粒度不是一成不变的,随着功能不断演进,服务的粒度也会膨胀,因此需要定期审核服务,如果粒度膨胀的太厉害,就要进一步拆分。我们也可以利用自动化的代码扫描手段来辅助进行服务的粒度判断。

余额宝系统的能力拆成大大小小的服务之后,根据这些服务所承载的能力及调用关系,可以划分成4个层次,从底至上依次为PaaS服务层,基础业务服务层,应用业务服务层、聚合服务层。

  • PaaS服务层主要承载针对底层资源的能力调用,包括存储、缓存、消息队列、短信网关等资源。由于余额宝整体能力构建在蚂蚁金融云上,所以除了自身开发的部分能力外,大部分能力是由蚂蚁金融云提供的。

  • 基础业务服务层包含了基金销售的一些通用基础业务能力。根据服务所属业务领域不同,余额宝又把这一层的服务分为八大类,包括账户服务、资产服务、交易服务、支付服务、智投服务、配置服务、结算服务、卡券服务。每一类服务都独立打包及部署,所以余额宝内部也称其为8大服务中心。

  • 应用业务服务层更多是按产品线来划分,包括直销业务服务和代销业务服务。这一层的服务主要面向产品业务,一方面基于基础业务服务层的8大中心服务来构建直代销的基金销售业务,另一方面,也构建适合自身业务特点的业务服务,比如活动拉新、客户营销等等。应用业务服务层的存在对后台基础业务服务起到了有效的封装和适配作用,可以让前台应用不用写太多的封装代码就能快速的构建出新的能力,从而保持前端应用的“轻”和“快”。可以说它实际上承载了业务中台的职责。

  • 聚合服务层,顾名思义,主要对服务做聚合。它并不承载太多的业务逻辑,主要是将应用业务服务层及基础业务服务层的服务根据前台需要做简单的能力聚合,并以API服务的形式暴露给前端调用,所以也可以称其为网关层。针对这一层服务的调用,余额宝会在框架层上添加很多安全校验。另外,限流及降级操作也是主要在这一层上进行。

余额宝服务治理的经验分享

目前余额宝的服务治理体系的整体框架已经搭建起来了,治理指标体系也相对完整的覆盖了线上和线下。在李鑫看来,现在余额宝的服务治理体系可以打70分,不过,服务治理是个持续迭代的过程,在不同时期总会遇到新问题,这些问题可能是服务自身的规模、容量的变化带来的,也可能是新技术的引入带来的,比如运维引入容器技术后,直接改变了服务的生命周期管理手段,服务治理的相应管控手段也要随之调整等等。

除了应对当下的治理需求之外,据李鑫介绍,余额宝也有一些长期治理能力建设的规划,例如针对线上服务的故障定位定界,做智能根因分析的探索,主要通过梳理服务调用关系和在CMDB的资源依赖关系基础上,再结合关系网络算法,构建了相应的故障传导模型;针对服务集群的性能及容量规划做更长周期的趋势预测,提升资源利用效率等等。

针对其它想要做服务治理的团队和技术人员,李鑫给了以下3条建议:

1、建议优先构建服务的度量监控能力,只有先解决了“看”的问题,才能解决“管”的问题。

2、服务治理能力有一个积累的过程,在资源有限的情况下,不要一开始就追求大而全的治理平台。余额宝在构建治理能力的早期,很多度量报表的指标采集和报表生成都是直接写个小工具和小脚本,并配合系统定时器定时调用来实现的。等到能力成熟之后,可以慢慢的优化改造成系统。

3、不要限制自己的想象力。服务治理本质上是为服务化保驾护航的,只要能达到这个效果的手段都是好的治理手段,例如基于代码扫描获取服务的静态调用链路就是余额宝团队拍脑门想出的点子,在服务治理能力构建上,敢想敢干很重要。

-END-

架构文摘

ArchDigest

架构知识丨大型网站丨大数据丨机器学习

如有收获,点个在看,诚挚感谢

用户规模5亿+的余额宝是如何做服务治理的?相关推荐

  1. 用户规模 5 亿 + 的余额宝是如何做服务治理的?

    随着越来越多的公司应用服务化,针对分布式架构下多服务.微服务等的服务治理自然就成为了大家关心的话题. 余额宝自 2013 年上线之后,目前存量已经突破万亿,用户规模达到 5 亿以上,为了支持这样的用户 ...

  2. 抖音用户规模达5.18亿,数据解读抖音支付背后逻辑?

    每当巨头一步棋,用户就开始瞻仰.1月19日,抖音支付在抖音APP内正式上线,在支付宝和微信支付外,抖音APP内又多了一个"抖音支付"的入口.追究其背后的脉络与逻辑,或许可以在最近扑 ...

  3. 上半年全国游戏市场销售收入近1400亿元 用户规模近6.6亿人

    8月2日消息,<2020 年 1 - 6 月中国游戏产业报告>显示,2020年1月份至6月份,我国网络游戏用户规模近6.6亿人,全国游戏市场实际销售收入1394.93亿元,同比增长22.3 ...

  4. 2022Q4手机银行新版本聚焦提升客群专属、财富开放平台、智能化能力,活跃用户规模6.91亿人

    易观:2022年第4季度,手机银行APP迭代升级加快,手机银行作为零售银行服务及经营的主阵地,与零售银行业务发展的联系日益紧密.迭代升级一方面可以顺应零售银行发展战略及方向,对手机银行业务布局进行针对 ...

  5. 中国电信5G NB-IoT用户规模破1亿 5G窄带物联网规模全球第一

    数智化时代,5G.AI.云计算.物联网等新型基础设施建设打开数字化转型的大门.5月17日,一年一度的世界电信日如约而至,定调为"在充满挑战的时代加速数字化转型",凸显后疫情时代加速 ...

  6. 易周金融 | Q1手机银行活跃用户规模6.5亿;理财子公司布局新兴领域

    易观分析:<数字经济全景白皮书>浓缩了易观分析对于数字经济各行业经验和数据的积累,并结合数字时代企业的实际业务和未来面临的挑战,以及数字技术的创新突破等因素,最终从数字经济发展大势以及各领 ...

  7. 中国社交视频规模达22亿元 用户1.02亿人

    BiaNews7月11日消息 近日,艾瑞发布中国社交视频行业发展研究报告.对于中国社交视频的规模人数,报告作出了详细说明. 随着中国网民规模的日益壮大,互联网用户的需求更加多元化和个性化,像六间房.9 ...

  8. 2021年中国短视频用户规模及头部企业分析:快手电商交易总额达6800.36亿元,同比增长78.41%[图]

    一.用户规模 目前短视频已成为人们记录日常生活的重要工具,近年来中国短视频市场呈爆发式增长,2021年12月中国短视频用户规模达9.34亿人,较2020年同期增加了0.61亿人,同比增长6.96%,短 ...

  9. 2020 年国内 Serverless 用户规模:阿里云占比第一,达 66%

    在中国信息通信研究院重磅发布的国内首个<云原生用户调查报告>中,阿里云 Serverless 产品凭借在双十一的技术锤炼和丰富的应用实践,在国内 Serverless 用户规模的占比达到 ...

最新文章

  1. 在ubuntu 14.04 64bit上安装酷我音乐盒Linux客户端kwplayer
  2. Windows Azure AppFabric概述
  3. MediaPlayer loading 问题解决
  4. 名品折扣,谁与争锋!
  5. 10kv电压互感器型号_电气行业需要知道的10KV电压互感器基本技术参数
  6. UserWarning: Matplotlib is currently using agg in Object Detection API
  7. PowerPoint 蜜蜂跳“8”字舞实例
  8. 软件测试人员能力模型
  9. win10系统迁移到固态(傻瓜式--分区助手)
  10. android 位移传感器 坐标,一种基于1D位移传感器的三维空间坐标测量方法与流程...
  11. NodeJs+mongoose实现搜索功能
  12. 给在读研究生的一封信
  13. 双十一快件近40亿再创历史新高;疫情挑战下中国受访者对科学的信任度位居全球第一 | 美通企业日报...
  14. 学会Python到底工作三年却被实习生抢了饭碗,有多吃香?
  15. mac android studio plantuml,Mac 配置 PlantUML
  16. c--scanf()函数详解
  17. FileReader的用法
  18. Python为什么要使用包管理、插件化开发?
  19. webpack版本和vue版本的冲突问题
  20. 树莓派android摄像头驱动开发,树莓派开发笔记(九):基于CSI口的摄像头拍照程序(同样适用USB摄像头)...

热门文章

  1. [c#]一键设置popo猫回收站工具含源码
  2. 二进制安装多master节点的k8s集群
  3. Ansible纸上谈兵02:常用模块
  4. PTA 输出全排列 算法设计与分析
  5. 输入一个字符,判断它如果是小写字母输出其对应的大写字母,如果是大写字符输出其对应的小写字母 ,如果是数字则直接输出数字,不是上述情况输出other。
  6. html中怎么制作花框,如何做立体花手工装饰相框
  7. G4Studio开源产品简介
  8. GDAL对图像文件格式的转换
  9. OpenCV线型lineType
  10. python数据结构和算法(1)