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

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




|引 言|


服务发现是构建分布式系统的最重要的依赖之一, 在蚂蚁集团承担该职责的是注册中心和 Antvip,其中注册中心提供机房内的服务发现能力,Antvip 提供跨机房的服务发现能力。


本文讨论的重点是注册中心和多集群部署形态(IDC 维度)集群和集群之间不涉及到数据同步


PART. 1

背 景


回顾注册中心在蚂蚁集团的演进,大概起始于 2007/2008 年,至今演进超过 13 年。时至今日,无论是业务形态还是自身的能力都发生了巨大的变化。


简单回顾一下注册中心的历代发展:


V1:引进淘宝的 configserver



V2:横向扩展



从这个版本开始,蚂蚁和阿里开始独立的演进,最主要的差异点是在数据存储的方向选择上。蚂蚁选择了横向扩展,数据分片存储。阿里选择了纵向扩展,加大 data 节点的内存规格。


这个选择影响到若干年后的 SOFARegistry 和 Nacos 的存储架构。


V3 / V4:LDC 支持和容灾



V3 支持 LDC 单元化。


V4 增加了决策机制和运行时列表,解决了单机宕机时需要人工介入处理的问题,一定程度上提升高可用和减少运维成本。


V5:SOFARegistry


image.png


前四个版本是 confreg,17 年启动 V5 项目 SOFARegistry,目标是:


1.代码可维护性:confreg 代码历史包袱较重

- 少量模块使用 guice 做依赖管理,但大部分模块是静态类交互,不容易分离核心模块和扩展模块,不利于产品开源。

- 客户端与服务端的交互模型嵌套复杂,理解成本极高且对多语言不友好。


2.运维痛点:引入 Raft 解决 serverlist 的维护问题,整个集群的运维包括 Raft,通过 operator 来简化。


3.鲁棒性:在一致性 hash 环增加多节点备份机制(默认 3 副本),2 副本宕机业务无感。


4.跨集群服务发现:站内跨集群服务发现额外需要 antvip 支撑,希望可以统一 2 套设施的能力,同时商业化场景也有跨机房数据同步的需求。


这些目标部分实现了,部分实现的还不够好,例如运维痛点还残留一部分,跨集群服务发现在面对主站的大规模数据下稳定性挑战很大。


V6:SOFARegistry 6.0


2020 年 11 月,SOFARegistry 总结和吸收内部/商业化打磨的经验,同时为了应对未来的挑战,启动了 6.0 版本大规模重构计划。


历时 10 个月,完成新版本的开发和升级工作,同时铺开了应用级服务发现。


PART. 2

挑 战


当下面临的问题


集群规模的挑战


- 数据增长:随着业务的发展,业务的实例数在不断增长,pub/sub 的数量也相应增长。以其中一个集群为例,2019 年的数据为基准数据,在 2020 年 pub 接近千万级。

下图是该集群历年双十一时的数据对比和切换应用级的优化效果。相比 2019 年双十一,2021 年双十一接口级的 pub 增长 200%,sub 增长 80%。

- 故障爆炸半径增长:集群接入的实例越多,故障影响的业务和实例数也就越多,保障业务的稳定是最基础也是优先级最高的要求。

- 考验横向扩展能力:集群达到一定的规模后,是否还具备继续横向扩展的能力,需要集群具备良好的横向扩展能力,从 10 扩到 100 和从 100 扩到 500 是不一样的难度。

- HA 能力:集群实例数多了后,面临的节点总体的硬件故障率也相应增高,各种机器故障集群是否能快速恢复?有运维经验的同学都知道,运维一个小集群和运维一个大集群面临的困难简直是指数级增长。

- 推送性能:大多数服务发现的产品都选择了数据的最终一致性,但是这个最终在不同集群的规模下到底是多久?相关的产品其实都没有给出明确的数据。

但是实际上,我们认为这个指标是服务发现产品的核心指标。这个时长对调用有影响:新加的地址没有流量;删除的地址没有及时摘除等。蚂蚁集团的 PaaS 对注册中心的推送时延是有 SLO 约束的:如果变更推送列表延时超过约定值,业务端的地址列表就是错误的。我们历史上也曾发生过因推送不及时导致的故障。

业务实例规模增加的同时也带来推送的性能压力:发布端 pub 下面的实例数增加;订阅端业务实例数增加;一个简单的估算,pub/sub 增长 2 倍,推送的数据量是 2*2,增长 4 倍,是一个乘积的关系。同时推送的性能也决定了同一时间可以支持的最大运维业务实例数,例如应急场景下,业务大规模重启。如果这个是瓶颈,就会影响故障的恢复时间。


集群规模可以认为是最有挑战性的,核心的架构决定了它的上限,确定后改造成本非常高。而且往往等到发现瓶颈的时候已经是兵临城下了,我们要选择能拉高产品技术天花板的架构。


运维的挑战


SOFARegistry 立项时的一个主要目标是具备比 confreg 更好的运维能力:引入 meta 角色,通过 Raft 选举和存储元信息,提供集群的控制面能力。但是事实证明,我们还是低估了可运维的重要性,正如鲁迅先生说:【程序员的工作只有两件事情,一件是运维,另一件还是运维】


三年前的目标放到今天已经严重滞后了。


- 集群数增长:蚂蚁集团内部的业务是分站点部署的(简单理解为每个站点是一块相对比较独立的业务,需要不同级别的隔离),同时一个站点需要部署多套集群:容灾需要分机房部署;开发需要分多环境。部署站点的数目增长超出我们的想像。现在已经达到数百个集群了,还在迅速增长中,增长速度参考最近几年美联储的货币供应量增长速度。以前认为有些运维工作可以苟且,人肉顶一下,集群数增长后,苟且次数太多了,挤占了开发/运维同学的精力,完全没资源去规划诗和远方。

- 业务打扰:业务的运维是全天候 7*24 的,容量自适应/自愈/MOSN 每月一版本把全站应用犁一遍等等。下图是每分钟运维的机器批数,可以看到,就算是周末和深夜,运维任务也是不断的。



蚂蚁集团的同学对注册中心的运维公告应该是比较熟悉和痛恨的。因为业务的敏感性,注册中心之前一直是停机发布和运维,这个时候需要锁定全站的发布/重启动作。为了尽量少影响业务,注册中心相关的同学只能献祭一头黑发,在深夜低峰期做相关的操作。即使这样,仍然没办法做到对业务零打扰。



云原生时代 naming 的挑战



云原生的技术时代下,可以观察到一些趋势:


- 微服务/FaaS 的推广导致轻型应用增多:实例数增多,需要能支撑更大的业务规模

- 应用实例的生命周期更短:FaaS 按需使用,autoscale 容量自适应等手段导致实例的涨潮退潮更频繁,注册中心的性能主要体现在实例变更的响应速度上

- 多语言支持:在过去,蚂蚁集团主要的开发体系是 Java,非 Java 语言对接基础设施都是二等公民,随着 AI 和创新性业务的需求,非 Java 体系的场景越来越多。如果按照每种语言一个 SDK,维护成本会是个噩梦,当然 sidecar(MOSN)是个解法,但是自身是否能支持低侵入性的接入方式,甚至 sdk-free 的能力?

- 服务路由:在过去绝大部分的场景都可以认为 endpoint 是平等的,注册中心只提供通信的地址列表是可以满足需求的。在 Mesh 的精确路由场景里面,pilot 除了提供 eds(地址列表)也同时提供 rds(routing),注册中心需丰富自身的能力。

- K8s:K8s 当前已经成为事实上的分布式操作系统,K8s-service 如何和注册中心打通?更进一步,是否能解决 K8s-service 跨 multi-cluster 的问题?


「总结」


综上,除了脚踏实地,解决当下的问题,还需要仰望星空。具备解决云原生趋势下的 naming 挑战的可能性,也是 V6 重构的主要目标。












相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
监控 测试技术 开发者
开发者如何使用微服务引擎MSE
【10月更文挑战第16天】开发者如何使用微服务引擎MSE
792 4
|
9月前
|
人工智能 数据安全/隐私保护
什么样的“软技能”可以跨越周期、终身成长?
在快速变化的数字化时代,软技能成为职场人士实现终身成长的关键。本文探讨了学习能力、适应能力、沟通能力、领导力和创新思维等跨越周期的软技能,并介绍了生成式人工智能(GAI)认证作为提升软技能的新途径。GAI认证不仅涵盖技术知识,还强调软技能培养,助力职场人士增强竞争力、促进职业发展,同时强化道德与合规意识。通过系统学习与实践,个人可在未来职业生涯中脱颖而出,实现持续成长。
|
Oracle 关系型数据库 数据库
Oracle 19c OCP 认证考试 083 题库(第37题)- 2024年修正版
本文介绍Oracle 19c OCP认证题库中的1Z0-083科目,包含85道试题,需在150分钟内完成,通过分数为57%。重点解析了关于阈值、指标和警报的问题,并指出需通过Oracle指定的WDP机构培训后才能参加考试,考试科目包括082和083,通过后可获得OCP证书。CUUG作为金牌合作机构,提供详细咨询与帮助。
434 2
|
移动开发 前端开发 JavaScript
快速上手web前端开发(超详细教程)
快速上手web前端开发(超详细教程)
|
Prometheus Cloud Native 调度
Sentinel 新版本发布,提升配置灵活性以及可观测配套
Sentinel 新版本发布,提升配置灵活性以及可观测配套
1582 100
|
人工智能 Linux Docker
一文详解几种常见本地大模型个人知识库工具部署、微调及对比选型(1)
近年来,大模型在AI领域崭露头角,成为技术创新的重要驱动力。从AlphaGo的胜利到GPT系列的推出,大模型展现出了强大的语言生成、理解和多任务处理能力,预示着智能化转型的新阶段。然而,要将大模型的潜力转化为实际生产力,需要克服理论到实践的鸿沟,实现从实验室到现实世界的落地应用。阿里云去年在云栖大会上发布了一系列基于通义大模型的创新应用,标志着大模型技术开始走向大规模商业化和产业化。这些应用展示了大模型在交通、电力、金融、政务、教育等多个行业的广阔应用前景,并揭示了构建具有行业特色的“行业大模型”这一趋势,大模型知识库概念随之诞生。
156950 30
|
流计算 资源调度 Java
Flink on YARN(下):常见问题与排查思路
上篇分享了基于 FLIP-6 重构后的资源调度模型介绍 Flink on YARN 应用启动全流程,本文将根据社区大群反馈,解答客户端和 Flink Cluster 的常见问题,分享相关问题的排查思路。
Flink on YARN(下):常见问题与排查思路
|
Kubernetes Java 数据库
GitHub置顶神作开源!世界名著《Spring实战(第6版)》全彩文档
今天给大家带来的是:[美] 克雷格·沃斯(Craig Walls) 著,张卫滨,吴国浩 译的 《Spring实战(第6版)》,也是最新的一版,本书是关于Spring核心特性的指南,延续了前几个版本一贯的清晰风格,带领你亲自动手,逐步构建出一个以数据库作为支撑的Web应用。
|
安全 数据库
登录访问时获取IP并校验(Springsecurity )
因公司要求,针对项目进行ip限制,以往只是记录登录ip。所以此功能相对简单。
1092 0
|
弹性计算 网络安全
阿里云服务器开放端口教程(通过配置安全组规则)
阿里云服务器开放端口是通过配置安全组规则来实现的,安全组是一种虚拟防火墙
89886 6
阿里云服务器开放端口教程(通过配置安全组规则)