异构注册中心机制在中国工商银行的探索实践

蚂蚁金服异地多活的微服务体系 蚂蚁金服异地多活的微服务体系--从挖光缆到剪网线。 蚂蚁金服(当时还是支付宝)从 2013 年起就运行在单元化架构上,除了具备异地容灾能力外,还能做到异地多活,可随时在多城市、多数据中心调配流量。基于单元流量调配机制,可实现大规模集群的蓝绿发布、灰度仿真环境,为充分验证业务正确性、降低故障提供了基础条件。相应地,微服务体系也必须具备单元内收敛、单元间可控路由等能力,来支撑单元化技术架构的落地。本文根据玄霄 2018 年上海 QCon 演讲内容整理。 立即下载

文|颜高飞

【工商银行】

金融科技研究院云计算实验室

本文 2651 字 阅读 5 分钟

前言

中国工商银行于 2014 年率先启动银行核心业务系统的分布式架构转型探索,自主研发了同业领先的分布式服务平台。

注册中心为服务平台提供了核心的服务发现功能,其健壮性对服务调用的成功率起着至关重要的作用。近年来,随着服务架构落地范围迅速扩大,注册中心性能容量支撑能力面临更高挑战。

工商银行结合金融业实际运行场景,对注册中心架构进行了深度定制及优化,不断探索性能容量和高可用能力极限。

PART. 1

问题及挑战

工商银行分布式服务平台选用 zookeeper 作为分布式服务注册中心。


zookeeper 在业界分布式系统中使用广泛,具有大规模应用场景,为用户提供高效、稳定的分布式协调服务。zookeeper 支持集群化部署、性能可扩展,可用性也较高,主要表现有:

1、半数存活即可用特性,使其容灾性能较强

只要选举节点中有过半节点正常工作,集群即可正常对外提供服务。若集群内个别服务器宕机,客户端会自动切换连接至其他可用服务器。

2、会话机制,使客户端注册信息保持稳定

客户端与 zookeeper 服务端之间通过心跳保持会话,默认会话超时 40s。若集群正常对外服务,在会话超时后,zookeeper 服务端将剔除客户端注册信息。而若集群整体不可用,会话不会过期,在注册中心集群恢复后,能自动从快照中重新恢复故障前的会话和注册信息,无需外部干预。

3、集群提供 observer 机制

      实现读写分离、流量隔离

observer 节点不参与集群选举,只承担客户端连接和请求,提升整体吞吐量;分担选举节点压力,提升集群稳定性。在实施 observer 分组的情况下,还可实现客户端流量隔离。

在金融业务实际运行场景中,工商银行搭建了以选举节点为核心、扩展部署 observer 节点的 zookeeper 注册中心集群,并在工商银行稳定运行多年。

理论上,当 zookeeper 注册中心集群出现故障时,服务调用不会受到影响。

但在实际混沌工程故障演练过程中,我们发现:偶发场景下,分布式服务平台存在因 zookeeper 系统资源故障或其他问题导致影响业务交易的现象。

具体问题列举如下:

- 问题一:

单服务扩容后提供方节点数过多

触及 zookeeper 推送报文 4M 的上限,从而导致 zookeeper 服务器性能压力过大,未能及时处理其他服务注册请求,影响交易。

- 问题二:

zookeeper 集群 leader 服务器内存故障

进程僵死后集群重新选举产生新 leader,但集群内部分服务器未及时感知新 leader,导致部分服务提供方掉线,影响交易。

- 问题三:

zookeeper 注册数据大幅增大后

集群故障重新选举后 leader 向其他节点同步的数据量过大,服务器网络到达瓶颈,导致部分服务器未及时加入新集群,影响交易。

基于以上问题,工商银行一方面对 zookeeper 源码进行了深度定制,另一方面开始着手研究提升服务注册和服务发现高可用能力的机制。

PART. 2

建设多注册多订阅机制

提升服务调用稳定性

为规避单注册中心集群故障而影响服务调用的问题,工商银行构建了多点接入的高可用注册模型(如图 1 所示)。

4289f48b88ac21cf85501cfbf491aea0.png

图 1 分布式服务高可用注册模型

说明:上图中 DC1 和 DC2 为 2 个机房,分别部署有 2 个独立的注册中心集群。DC1 和 DC2 中部署的提供方和消费方均注册、订阅自两个注册中心集群。DC1 中的消费方优先使用 DC1 注册中心推送的提供方列表,DC2 中的消费方优先使用 DC2 注册中心推送的提供方列表。

在同城双机房内独立部署两个 zookeeper 集群,提供方注册服务至双注册中心,消费方也从双注册中心订阅服务。消费方优先使用与其在同一机房内的注册中心推送的数据,当同机房注册中心集群发生故障时,其他机房的注册中心可接管。注册中心集群故障接管过程中,服务正常调用。

双注册双订阅机制建成后,分布式服务平台多次完美应对了底层系统资源故障、网络隔离等问题,分布式服务注册和服务发现稳定性显著提升。

基于双 zookeeper 集群部署的双活架构,因双集群注册中心组件技术栈相同,极小概率下仍存在系统性交易风险——若两个 zookeeper 注册中心集群在同一时刻均出现同一类型故障时(比如同时达到性能瓶颈),业务交易仍然可能会受到影响。

因此,为规避极小概率的系统性风险,工商银行进一步开展异构注册中心建设,追求极致的服务注册和发现高可用能力。

PART. 3

建设异构注册中心

规避单一技术栈风险

注册中心异构部署,

进一步提升高可用能力 

工商银行开展异构注册中心建设,在部署 zookeeper 集群的同时对等部署一套独立的异构注册中心集群。业务系统同时向 zookeeper 和异构注册中心两个集群注册并进行服务订阅(如图 2 所示)。

bde24773c1c67447685bb596f8cf30c7.png

图 2 异构注册模型

异构注册中心与 zookeeper 协同工作,提升注册中心整体对外服务能力。当 zookeeper 集群与异构注册中心任一集群发生系统性故障时,另一注册中心集群可接管(如图 3 所示数据表结构)。

381501eab5f71e0ac69152abf4dc4446.png

图 3 异构注册模型下任一注册中心集群故障

说明:上图中 zookeeper 集群故障,异构注册中心正常工作,服务仍可正常注册、订阅及调用。

提出合并订阅机制,

使注册中心故障时迁移更加平滑 

工商银行原有多注册中心订阅机制,消费方优先使用某一注册中心推送的提供方列表,仅当该注册中心上无任一可用提供方,消费方才切换使用下一注册中心推送的数据。此时若优先使用的注册中心因故障推送了不完整的提供方列表,消费方集中调用这些提供方,可能导致“提供方负载不均”、“触发并发限流”等问题。

为保障建设异构注册中心后注册中心故障时迁移更加平滑,工商银行研究并提出了消费方合并订阅机制:在消费方侧合并 zookeeper 和异构注册中心的订阅视图,各注册中心订阅数据合并后再刷新 invoker 缓存。

即使某注册中心故障推送了空或者不完整的提供方列表,合并后的数据仍是有效的,提高了消费方筛选提供方的效率,提升交易成功率。

9d4eacbdfdd90c8c73d1c20fdbcaf305.png

2c10c75d835af294b5808c125806d686.png

图 4 多注册中心合并订阅机制

注册中心异构部署和消费方合并订阅机制建成后,混沌模拟注册中心 CPU 满载、内存高负荷、磁盘故障、网络抖动、网络隔离等故障场景,提供方负载均衡,交易无失败,符合预期。同时,合并订阅机制还能额外降低多注册中心模式下消费方缓存提供方列表所占用的内存。

基于以上技术储备及基础建设,工商银行于 2020 年开展异构注册中心建设,规避行内注册中心单一技术栈风险,进一步提升了注册中心核心组件在整个分布式体系中的高可用能力。

PART. 4

未来展望

为满足分布式服务平台金融级高可用的需求,工商银行探索并提出异构注册高可用方案,消除了大规模服务注册场景下单一注册中心存在的系统性风险,保障金融系统的稳健运行。

未来,工商银行将在异构注册的基础上进一步推动单元化部署运维转型,打破注册中心为全局唯一流量枢纽的现状,实现交易流量在单元内部最大限度完成闭环,辅以单元自动切换实现故障隔离,进一步控制区域性故障场景下的故障爆炸半径,全面提升分布式服务平台流量控制、高可用接管能力,为同业微服务架构规模化应用提供最佳实践和范例。

   本周推荐阅读  

0152dee864ec3bd38fe9700786ad43e0.png

“SOFA星球”闯关计划——Layotto 飞船 

253d272a7e25b792f16dd83a697d1be4.png

BabaSSL 发布 8.3.0|实现相应隐私计算的需求

Nydus 镜像加速插件迁入Containerd 旗下

41d224ba06546781846aeb28f5c2fac5.png

恭喜 李志强 成为 Layotto committer!


a165e1d38b65c7f4a940f1ce2ed7d263.png

SOFAArk Committer 专访|看它不爽,就直接动手改!

53a8bbfdf3f30b6dd5f5635f1fa378ba.png

Zookeeper双机房容灾方案.pdf Zookeeper双机房容灾方案,以5个zk实例为例 本文在最前面给出操作该集群用的的知识 然后针对可能出现的问题,需要确认的事项进行测试 在最后给出本文的Zookeeper容灾方案 立即下载

相关推荐

LaTeX小白必看:TeX Live+TeXstudio保姆级安装教程(附清华镜像加速)

本文为LaTeX新手提供了一份详尽的TeX Live和TeXstudio安装指南。通过清华大学镜像站实现高速下载,并详细讲解了从下载、定制化安装到配置优化的每一步,帮助用户快速搭建稳定高效的本地LaTeX写作环境,轻松处理学术文档排版。

weixin_29214559的博客 413

Istio服务发现:多注册中心集成与服务同步

在现代云原生架构中,服务网格(Service Mesh)已成为微服务治理的核心基础设施。Istio作为业界领先的服务网格解决方案,其强大的服务发现能力是支撑整个网格稳定运行的关键。随着企业业务规模的不断扩大,单一Kubernetes集群往往无法满足需求,多集群、混合云架构成为常态。在这种复杂环境下,如何实现跨多个服务注册中心的服务发现与同步,成为了Istio面临的重要挑战。 本文将深入探讨Ist...

gitblog_00081的博客 419

优快云积分获取与管理全攻略

技术社区积分系统是知识共享生态的核心激励机制,通过量化用户贡献实现资源交换。其底层逻辑遵循Web2.0时代的UGC经济模型,用户通过内容创作、社区互动等行为积累虚拟资产。在开发者社区场景中,积分体系能有效促进技术文档、工具源码等资源的流通,优快云作为国内头部平台,其积分规则具有典型参考价值。掌握签到策略、内容互动技巧和资源上传规范等实操方法,可系统性提升积分获取效率。2023年新规强化了连续签到奖励和互动质量检测机制,结合GitHub等开源平台资源互补,能构建更高效的技术资源获取路径。

weixin_34233974的博客 218

工商银行顾欣:分布式全链路灰度发布的探索与实践

作者|顾欣互联网金融时代下,金融产品和服务模式不断创新,金融系统容量需求急剧增长,为进一步满足运维标准提升工作的需求,提升服务连续性水平。中国工商银行(后简称工行)从 2014 年开始分...

中生代技术 1204

海康工业相机SDK开发实战:从环境搭建到实时图像采集(附避坑指南)

本文详细介绍了海康工业相机SDK在Windows平台上的开发实战流程,涵盖从环境搭建、运行时库路径配置到实时图像采集的全过程。重点解析了MVS SDK部署、设备连接、参数设置及图像处理等核心环节,并提供了实用的避坑指南和错误排查方法,帮助开发者构建稳定的机器视觉系统。

weixin_29248611的博客 846

ESP32与DS18B20温度传感器的数据采集与告警系统

并且,通过自定义的微信告警功能,我们可以及时收到温度超过阈值的告警消息。随着物联网的快速发展,传感器在各种应用场景中发挥着重要的作用。本文将介绍如何使用ESP32微控制器与DS18B20温度传感器结合,通过串口输出和Web服务器实现温度数据的采集和监控,并使用自定义微信告警功能。上传完成后,打开串口监视器,您将看到ESP32连接到Wi-Fi网络,并开始监测温度。在您的计算机或移动设备上,打开一个Web浏览器,并输入ESP32的IP地址。在浏览器中输入ESP32的IP地址后,您将看到显示当前温度的页面。

loop_class349的博客 2245

zookeeper 都有哪些使用场景?

zookeeper 都有哪些使用场景? 面试官心理分析 现在聊的 topic 是分布式系统,面试官跟你聊完了 dubbo 相关的一些问题之后,已经确认你对分布式服务框架/RPC 框架基本都有一些认知了。那么他可能开始要跟你聊分布式相关的其它问题了。 分布式锁这个东西,很常用的,你做 Java 系统开发,分布式系统,可能会有一些场景会用到。最常用的分布式锁就是基于 zookeeper 来实现的。 其实说实话,问这个问题,一般就是看看你是否了解 zookeeper,因为 zookeeper 是分布式系统中很常见

勇往直前,向死而生 430

rv1126如何切换720p和1080p

切换720p和1080p可以使用modetest,但是需要将这两种模式都添加到connector中去 添加一个新的mode到connector中去,其实内核中已经有相关接口了,需要做一些小改动。 1.不采用设备树的方式去配置,将720p和1080p的timing参数配置放在数组中。 2.这里的printer和设备树中的.compatible = "printer"一致。 3.将其添加到connector中去 static int panel_simple_get_fixed_modes(struct

weixin_42097108的博客 864

学习笔记--Zookeeper

zookeeper

qq_54481534的博客 9711

【明道云】如何让用户可以新增但不能修改记录

在设计表单时直接将字段设置只读是不行的。字段设置只读将会直接让界面上此字段的前端组件不可编辑。

每日出拳老爷子的博客 701

《网络安全自学教程》- Nmap使用及扫描原理分析

使用Nmap进行端口扫描、主机发现、服务识别、操作系统识别、指定脚本、结果导出文件,使用wireshark抓包分析扫描原理。

wangyuxiang946的博客 1万+

通俗易懂浅谈一下服务器异地容灾备份

服务端灾备不仅是运维人员的工作,前后端开发人员也有必要了解一些基本知识,在灾难发生的时候,才能较好的配合工作,快速恢复服务。 灾备方案都是有成本和风险的,灾备也没有银弹,不可能打死所有的怪兽。还是随着业务发展,不断的演化才是王道。

一群专业码农的笔记本 3919

TPAMI 2025 | 从缺失碎片到杰作:基于上下文自适应扩散的图像修复

图像修复是一项具有挑战性的任务,尤其是要确保生成的内容与图像的现有部分无缝融合。尽管最近的扩散模型展现出了潜力,但它们在保持已知区域和未知(缺失)区域之间的连贯性方面常常遇到困难。这个问题源于扩散过程中缺乏明确的空间和语义对齐,导致生成的内容无法与原始图像平滑融合。此外,扩散模型通常依赖全局学习分布,而非局部特征,这使得生成的图像部分与现有图像部分之间存在不一致。在这项工作中,作者提出了ConFill,这是一个新颖的框架,引入了上下文自适应差异(CAD)模型,以确保在整个扩散过程中,已知区域和未知区域的中间

小白学视觉 240

阿里技术专家详解Dubbo实践,演进及未来规划

Dubbo整体介绍Dubbo是一款高性能,轻量级的Java RPC框架。虽然它是以Java语言来出名的,但是现在我们生态里面已经有Go、Python、PHP、Node.JS等等语言。在GitHub上,https://github.com/dubbo 下面已经有很多生态相关的东西。Dubbo是一个RPC框架,它和所有的RPC一样,有一个最小运行子集,它需要Provider、Consumer,以及一...

weixin_33728268的博客 123

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

社区会议|一起来聊聊 SOFARegistry

SOFA 社区大热的项目—— SOFARegistry今晚 9 点将开启社区会议!本次社区会议想邀请大家一起来聊聊 SOFARegistry,大家一起探讨交流,大开脑洞,畅所欲言。无论你有没有参与过 SOFARegistry 项目,只要你有兴趣,就进来聊聊吧!会议主题SOFA 社区会议|一起聊聊 SOFARegistry会议时间2022 年 4 月 12 日(今晚)21:...

金融级分布式架构 222

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

「活动报名」SOFAMeetup 成都站-云原生专场

活动简介SOFAStack 社区 2022 年第二场 Meetup 来啦!本次SOFAMeetup 将于成都开启,由 SOFAStack 社区和KubeSphere 社区联合 KubeSphere 社区成都用户委员会发起,主题为「云原生技术交流」。此次 Meetup 将汇聚开源与云原生领域的最终用户、贡献者和技术专家,进行沟通、学习交流及经验的分享。活动组织方本次活动由...

金融级分布式架构 201

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

社区会议回顾|大家一起聊聊 SOFARegistry

SOFA 社区在 2022 年 4 月 12 日组织了本次社区会议,和大家一起聊聊 SOFARegistry。本次社区会议共计 38 人参加,那么大家都聊了些什么呢?看下方回顾吧...SOFARegistry近一年的规划SOFARegistry 在 2022 年预计会发布 6.1 和 6.2 版本。源码解析心得分享- corey 分享《源码解析|延迟推送 trace》的...

金融级分布式架构 268

Layotto v0.4.0-rc 发布

Layotto v0.4.0-rc 发布 v0.4.0-rc 版本包含以下功能提升和问题修复: 1.文件能力增加了七牛云 oss、hdfs、腾讯云 oss 的实现;同时增加了 Java SDK 的实现 2.支持 API 插件和自定义组件能力 3.支持 skywalking 4.支持基于内存的和 mongo 的分布式锁 5.支持基于内存的和 mongo 的分布式自增 ID 6.支持 secret 接口 7.提高可扩展性,用户可以通过 import layotto 做扩展 8.支持 Dapr 的 state、I

金融级分布式架构 401

Layotto 发布 v0.4.0-rc 版本

Layotto v0.4.0-rc 发布v0.4.0-rc 版本包含以下功能提升和问题修复:文件能力增加了七牛云 oss、hdfs、腾讯云 oss 的实现;同时增加了 Java SDK 的实现支持 API 插件和自定义组件能力支持 skywalking支持基于内存的和 mongo 的分布式锁支持基于内存的和 mongo 的分布式自增 ID支持 secret 接口提高可扩展...

金融级分布式架构 221

SOFA Weekly | 开源新闻联播、本周 QA、Layotto Java-sdk 本周发布

HAVE FUN | 源码解析活动最新进展SOFA WEEKLY | 每周精选筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务...

金融级分布式架构 361

【万字长文】技术选型必读:Nacos 的核心优势与适用场景深度解析

在微服务架构中,服务治理工具的选型直接影响系统的稳定性与可扩展性。本文结合 Nacos 官方文档、Spring Cloud Alibaba 技术白皮书及 优快云 百万阅读量实战案例,从技术特性、场景适配、性能对比等维度,系统解析 Nacos 的核心价值,助力架构师做出科学决策。Nacos 正从微服务治理工具向云原生服务平台Service Mesh 集成:计划通过 Sidecar 模式支持 Istio/Linkerd,实现无侵入式流量治理。AI 运维:结合机器学习预测服务负载,自动调整路由策略与配置参数。

专注于 Java 后端架构、微服务、分布式、前端及 AI 领域的技术分享,是开发者获取硬核知识、交流实战经验的专业博客。 819

Zookeeper(二)集群工作原理入门

假如我们目前有三台服务器Server.1、Server.2、Server.3,这三台服务器都用来部署Zookeeper。这里先记住,稍后使用。 集群中的角色 peerType: observer/participant, Leader:可以处理来自客户端的读写请求。 Follower:可以处理来自客户端的读请求。 Observer:可以处理来自客户端的读请求。 再假如,服务器A为Leader,B为Follower,C为Observer。 Zookeeper工作过程中有三种状态 1、looking:当前s

qq_19067809的博客 468

异地双活实践笔记

最近恰好在搞异地双活,以下是一个梳理: 基本概念 1、异地容灾。这仅仅是一个冷备的概念。也就是在平时正常的时候,另外一个机房只是当做备份。 2、异地双(多)活。而异地双(多)活,却是指有两个或者多个可以同时对外服务的节点,任意一个点挂了,也可以迅速切换到其他节点对外服务,节点之间的数据做到准实时同步。 分类 根据是否需要数据同步大体分为三类: 1、必须同步型。(比如数据库) 2、无须...

mark's technic world 1万+

永洪Bi架构部署与集群部署

一站式可视化分析平台—永洪Bi的产品架构部署与集群部署。

liuzhiqiang66的博客 4308

ZooKeeper - 分布式服务管理

ZooKeeper

weixin_45453240的博客 764
上一篇: SOFA Weekly | 开源新知、Holmes 本周发布、新手任务
下一篇: HAVE FUN | Layotto 源码解析
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值