蚂蚁集团巧用“注册中心”降本增效(2)

简介: 蚂蚁集团巧用“注册中心”降本增效

PART. 3

SOFARegistry 6.0:面向效能


SOFARegistry 6.0 不只是一个注册中心引擎,需要和周边的设施配合,提升开发、运维、应急的效能,解决以下的问题。(红色模块是比较有挑战性的领域)



SOFARegistry 6.0 相关的工作包括:




架构优化


架构的改造思路:在保留 V5 的存储分片架构的同时,重点的目标是优化元信息 meta 一致性和确保推送正确的数据。



元信息 meta 一致性


V5 在 meta 角色中引入 Raft 的强一致性进行选举 leader 和存放元信息,其中元信息包括节点列表和配置信息。数据的分片通过获取 meta 的节点列表做一致性 hash,这里面存在两个问题:


- Raft/operator 运维复杂  (1)定制运维流程:需要支持 change peer 等编排。在蚂蚁集团,特化的运维流程成本较高,同时也不利于输出。  (2)实现一个生产健壮的 operator 成本非常高,包括接入变更管控 operator 自身的变更三板斧等。  (3)对于网络/磁盘的可用性比较敏感。在输出的场景,会面临比较恶劣的硬件情况,排查成本较高。

- 脆弱的强一致性meta 信息的使用建立在满足强一致性的情况下,如果出现网络问题,例如有 session 网络分区连不上 meta,错误的路由表会导致数据分裂。需要机制确保:即使 meta 信息不一致也能在短时间内维持数据的正确性,留有应急的缓冲时间。


推送正确的数据


当 data 节点大规模运维时,节点列表剧烈变化导致数据不断迁移,推送出去的数据存在完整性/正确性的风险。V5 通过引 3 副本来避免这种情况,只要有一个副本可用,数据就是正确的,但是该限制对运维流程负担很大,我们要确保每次操作少于两个副本或者挑选出满足约束的运维序列。


对于 V5 及之前的版本,运维操作是比较粗糙的,一刀切做停机发布,通过锁 PaaS 禁止业务变更,等 data 节点稳定后,再打开推送能力来确保避免推送错误数据的风险。


此外,预期的运维工作可以这样做,但是对于突发的多 data 节点宕机,这个风险仍然是存在的。


我们需要有机制确保:data 节点列表变化导致数据迁移时,容忍接受额外的轻微推送时延,确保推送数据正确。


「成果」


- meta 存储/选举 组件插件化,站内去 Raft,使用 db 做 leader 选举和存储配置信息,降低运维成本。

- 数据使用固定 slot 分片,meta 提供调度能力,slot 的调度信息通过 slotTable 保存,session/data 节点可容忍该信息的弱一致性,提升鲁棒性。

- 多副本调度减少 data 节点变动时数据迁移的开销,当前线上的数据量 follower 升级 leader 大概 200ms (follower 持有绝大部分的数据),直接分配 leader 数据同步耗时 2s-5s。

- 优化数据通信/复制链路,提升性能和扩展能力。

- 大规模运维不需要深夜锁 PaaS,减少对业务打扰和保住运维人员头发,提升幸福感。


数据链路和 slot 调度:


- slot 分片参考 Redis Cluster 的做法,采用虚拟哈希槽分区,所有的 dataId 根据哈希函数映射到 0 ~ N 整数槽内。

- meta 的 leader 节点,通过心跳感知存活的 data 节点列表,尽可能均匀的把 slot 的多副本分配给 data 节点,相关的映射关系保存在 slotTable,有变更后主动通知给 session/data。

- session/data 同时通过心跳获取最新的 slotTable,避免 meta 通知失效的风险。

- slot 在 data 节点上有状态机 Migrating -> Accept -> Moved。迁移时确保 slot 的数据是最新的才进入 Accept 状态,才可以用于推送,确保推送数据的完整性。


data 节点变动的数据迁移:



对一个接入 10w+ client 的集群进行推送能力压测,分钟级 12M 的推送量,推送延迟 p999 可以保持在 8s 以下。session cpu20%,data cpu10%,物理资源水位较低,还有较大的推送 buffer。



image.png



同时我们也在线上验证横向扩展能力,集群尝试最大扩容到 session*370,data*60,meta*3 ;meta 因为要处理所有的节点心跳,CPU 达到 50%,需要 8C 垂直扩容或者进一步优化心跳开销。按照一个 data 节点的安全水位支撑 200w pub,一个 pub 大概 1.5K 开销,考虑容忍 data 节点宕机 1/3 仍然有服务能力,需要保留 pub 上涨的 buffer,该集群可支撑 1.2 亿的 pub,如果配置双副本则可支撑 6kw 的 pub。



应用级服务发现


注册中心对 pub 的格式保留很强的灵活性,部分 RPC 框架实现 RPC 服务发现时,采用一个接口一个 pub 的映射方式,SOFA/HSF/Dubbo2 都是采用这种模式,这种模型比较自然,但是会导致 pub/sub 和推送量膨胀非常厉害。


Dubbo3 提出了应用级服务发现和相关原理【1】。在实现上,SOFARegistry 6.0 参考了 Dubbo3,采用在 session 端集成服务的元数据中心模块的方案,同时在兼容性上做了一些适配。


「应用级服务 pub 数据拆分」



「兼容性」


应用级服务发现的一个难点是如何低成本的兼容接口级/应用级,虽然最后大部分的应用都能升级到应用级,升级过程中会面临以下问题:


- 应用数多,同时各个应用升级到应用级的时间点差距比较大- 部分应用无法升级,例如一些远古应用


我们采用以应用级服务为主,同时兼容接口级的解决方案:



在升级时同时存在新旧版本的两个 SOFARegistry,不同版本的 SOFARegistry 对应到不同的域名。升级后的应用端(图中的 MOSN)采用双订阅双发布的方式逐步灰度切换,确保切换过程中,没有升级接入 MOSN 或者没有打开开关的应用不受影响。


在完成绝大多数应用的应用级迁移后,升级后的应用都已经到了 SOFARegistry 6.0 版本的注册中心上,但仍然存在少量应用因为没有接入 MOSN,这些余留的 old app 也通过域名切换到 SOFARegistry 6.0,继续以接口级订阅发布和注册中心交互。为了确保已升级的和没升级的应用能够互相订阅,做了一些支持:


- 提供应用级 Publisher 转接到口级 Publisher 的能力:接口级订阅端是无法直接订阅应用级发布数据的,针对接口级订阅按需从 AppPublisher 转换出 InterfacePublisher,没有接入 MOSN 的应用可以顺利的订阅到这部分数据,因为只有少量应用没有接入 MOSN,需要转化的应用级 Publisher 很少。

- 应用级订阅端在订阅的时候额外发起一个接口级的订阅,用于订阅没有接入升级的应用发布数据。由于这部分应用非常少,实际绝大多数的服务级订阅都不会有推送任务,因此对推送不会造成压力。


「效果」



上图是一个集群切换应用级后的效果,其中切换后剩余部分接口级 pub 是为了兼容转换出来的数据,接口级 sub 没减少也是为了兼容接口级发布。如果不考虑兼容性,pub 数据减少高达 97%。极大的减轻了数据规模的对集群的压力。



SOFARegistryChaos:自动化测试


注册中心的最终一致性的模型一直是个测试难题:


- 最终是多久?- 达到最终前有没有推送错误的数据- 达到最终前有没有推送少数据- 集群发生故障/数据迁移时对数据的正确性和时延的影响- client 端频繁按照各种顺序调用 API 的影响- client 端频繁连接断连的影响


针对该系列问题,我们开发了 SOFARegistryChaos,特别针对最终一致性提供完备的测试能力,除此还提供功能/性能/大规模压测/混沌测试等能力。同时,通过插件化的机制,也支持接入测试其他服务发现产品的能力,基于 K8s 的部署能力,能让我们快速的部署测试组件。

具备以上的能力后,不单可以测试自身的产品能力,例如还可以快速的测试 zookeeper 在服务发现方面的相关性能来做产品比较。



测试观测性


提供的关键数据的观测能力,通过 metrics 透出,对接 Prometheus 即可提供可视化能力:


- 推送时延- 设定时间内的最终一致性检测- 发生故障注入的时间点- 最终一致期间推送数据的完整性

该能力的测试是一个比较有意思的创新点,通过固化一部分的 client 和对应的 pub,校验每次其他各种变更导致的推送数据,这部分数据都必须是要完整和正确的。- 推送次数

- 推送数据体积



失败 case 的排查


测试场景中,client 操作时序和故障注入都是随机编排的,我们在 SOFARegistryChaos master 端记录和收集了所有的操作命令时序。当 case 失败时,可通过失败的数据明细和各个 client 的 API 调用情况来快速定位问题。


例如下图的失败 case 显示在某个 Node 上的订阅者对某个 dataId 的订阅数据没通过校验,预期是应该要推空, 但是推送了一条数据下来。同时显示了该 dataId 所有相关的 publisher 在测试期间的相关操作轨迹。



image.png



黑盒探测


大家是否经历过类似的 case:


- 突然被业务告知系统出现问题,一脸懵的我:系统没异常啊- 发现系统出现故障时,实际已经对业务造成了严重影响


注册中心因为本身的特性,对业务的影响往往是滞后的,例如 2K 个 IP 只推送了 1K 个,这种错误不会导致业务马上感知到异常。但是实际本身已经出问题了。对于注册中心,更需要有提前发现治末病的能力。


这里我们引入黑盒探测的方式:模拟广义上的用户行为,探测链路是否正常。


SOFARegistryChaos 实际上就可以作为一个注册中心的用户,并且是加强版的,提供端到端的告警能力。


我们把 SOFARegistryChaos 部署到线上,开启小流量作为一个监控项。当注册中心异常但还没对业务造成可感知的影响时,我们有机会及时介入,减少风险事件升级成大故障的风险。


磨刀不误砍柴工


通过 SOFARegistryChaos,核心能力的验证效率极大提升,质量得到保障的同时,开发同学写代码也轻松了许多。从 7 月份到 10 月中的 3 个半月时间里,我们迭代并发布了 5 个版本,接近 3 周 1 个版本。这个开发效率在以前是不敢想象的,同时也获得完善的端到端告警能力。



运维自动化


nightly build


虽然我们集群数目非常多,但是因为是区分了多环境,部分环境对于稳定性的要求相对生产流量要求稍微低一些,例如灰度以下的环境。这些环境的集群是否可以在新版本保证质量的情况下,快速低成本的 apply 。结合 SOFARegistryChaos,我们和质量/SRE 的同学正在建设 nightly build 设施。


SOFARegistryChaos 作为变更门禁,新版本自动化的部署,接受 SOFARegistryChaos 的测试通过后,自动化部署到灰度以下的集群,仅在生产发布时候人工介入。



通过 nightly build,极大的减轻非生产环境的发布成本,同时新版本能尽早接受业务流量的检验。


故障演练


虽然我们做了大量的质量相关的工作,但是在线上面对各种故障时究竟表现如何?是骡子还是马,还是要拉出来溜一溜。


我们和 SRE 的同学在线上会定期做故障容灾演练,包括但不限于网络故障;大规模机器宕机等。另外演练不能是一锤子买卖的事情,没有保鲜的容灾能力其实等于 0。在仿真/灰度集群,进行容灾常态化,演练-迭代循环。



定位诊断


故障容灾演练常态化后,如何快速的定位到故障源成了摆在桌子上的一个问题,否则每次演练都鸡飞狗跳的,效率太低了。


SOFARegistry 各个节点做了大量的可观测性的改进,提供丰富的可观测能力,SRE 的诊断系统通过相关数据做实时诊断,例如这个 case 里就是一个 session 节点故障导致 SLO 破线。有了定位能力后,自愈系统也可以发挥作用,例如某个 session 节点被诊断出网络故障,自愈系统可以触发故障节点的自动化替换。



目前,我们的容灾演练应急绝大部分 case 已经不需要人肉介入,也只有这样低成本的演练才能常态化。


「收益」


通过不断的演练暴露问题和快速迭代修复,SOFARegistry 的稳定性逐步提升。


「总结」


SOFARegistry 6.0 除了自身的优化,在测试/运维/应急方面做了大量的工作,目标是提升研发/质量/运维人员的效能,让相关同学摆脱低效的人肉工作,提升幸福感。



相关文章
|
9月前
|
存储 运维 监控
十年磨一剑:蚂蚁集团可观测性平台 AntMonitor 揭秘
蚂蚁集团的业务种类繁多,兼具金融级的“稳” 和互联网的 “快”,支撑又快又稳的业务发展需要完善的稳定性保障体系, 这个体系的基石就是可观测性平台-AntMonitor 。 早在2011年前,监控平台就已经完成初代建设,在2012到2017年这五年间,蚂蚁监控技术团队抽象出了业务视角监控牵引的模式,大大提升了核心业务的故障发现能力,同期研发了可视化引擎与易用的配置系统。为了支撑双11等大规模海量计算场景,在底层数据技术上做到了实时稳定的大规模日志和指标处理能力。随着这些能力的完成,可观测平台的产品也逐渐成熟。
|
12月前
|
弹性计算 开发框架 运维
《阿里云云原生 Serverless 案例集》——典型案例——零售-贵州酒店集团
《阿里云云原生 Serverless 案例集》——典型案例——零售-贵州酒店集团
124 0
|
12月前
|
弹性计算 开发框架 运维
《2023云原生实战案例集》——02 零售/电商/本地生活——贵州酒店集团 基于SAE实现几乎零改造的微服务升级
《2023云原生实战案例集》——02 零售/电商/本地生活——贵州酒店集团 基于SAE实现几乎零改造的微服务升级
|
Cloud Native 双11
蚂蚁集团巧用“注册中心”降本增效(3)
蚂蚁集团巧用“注册中心”降本增效
|
存储 运维 Kubernetes
蚂蚁集团巧用“注册中心”降本增效(1)
蚂蚁集团巧用“注册中心”降本增效
107 1
|
机器学习/深度学习 人工智能 算法
张勇:阿里巴巴所有产品未来将接入大模型全面改造
4月11日,阿里巴巴集团董事会主席兼CEO、阿里云智能集团CEO张勇在云峰会上表示,阿里巴巴所有产品未来将接入“通义千问”大模型,进行全面改造。他认为,面向AI时代,所有产品都值得用大模型重新升级。
46465 4
张勇:阿里巴巴所有产品未来将接入大模型全面改造
阿里云OXM伙伴合作全链路解析
面向阿里云产品生态伙伴的系列知识课程
925 0
阿里云OXM伙伴合作全链路解析
|
存储 数据采集 缓存
阿里巴巴共享服务中心:淘宝四大服务中心
阿里巴巴共享服务中心:淘宝四大服务中心
531 0
|
存储 运维 Kubernetes
降本提效!注册中心在蚂蚁集团的蜕变之路
2020 年 11 月,SOFARegistry 总结和吸收内部/商业化打磨的经验,同时为了应对未来的挑战,启动了 6.0 版本大规模重构计划。 历时 10 个月,完成新版本的开发和升级工作,同时铺开了应用级服务发现。
降本提效!注册中心在蚂蚁集团的蜕变之路
|
监控 安全 数据可视化
阿里云云治理中心正式上线,助力企业快速云落地
2021年11月1日,阿里云"云治理中心"(Cloud Governance Center)产品正式上线,云治理中心是基于企业IT治理的最佳实践,帮助客户快速搭建业务上云的标准Landing Zone(上云登陆区),实现各组织和团队在云上的良好协同、降低风险和提升效率,最大化地发挥云计算所带来的价值。
425 0
阿里云云治理中心正式上线,助力企业快速云落地