异构注册中心机制在中国工商银行的探索实践
文|颜高飞【工商银行】
金融科技研究院云计算实验室
本文 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 所示)。
图 1 分布式服务高可用注册模型
说明:上图中 DC1 和 DC2 为 2 个机房,分别部署有 2 个独立的注册中心集群。DC1 和 DC2 中部署的提供方和消费方均注册、订阅自两个注册中心集群。DC1 中的消费方优先使用 DC1 注册中心推送的提供方列表,DC2 中的消费方优先使用 DC2 注册中心推送的提供方列表。
在同城双机房内独立部署两个 zookeeper 集群,提供方注册服务至双注册中心,消费方也从双注册中心订阅服务。消费方优先使用与其在同一机房内的注册中心推送的数据,当同机房注册中心集群发生故障时,其他机房的注册中心可接管。注册中心集群故障接管过程中,服务正常调用。
双注册双订阅机制建成后,分布式服务平台多次完美应对了底层系统资源故障、网络隔离等问题,分布式服务注册和服务发现稳定性显著提升。
基于双 zookeeper 集群部署的双活架构,因双集群注册中心组件技术栈相同,极小概率下仍存在系统性交易风险——若两个 zookeeper 注册中心集群在同一时刻均出现同一类型故障时 ( 比如同时达到性能瓶颈) ,业务交易仍然可能会受到影响。
因此,为规避极小概率的系统性风险,工商银行进一步开展异构注册中心建设,追求极致的服务注册和发现高可用能力。
PART. 3
建设异构注册中心 规避单一技术栈风险
注册中心异构部署,进一步提升高可用能力
工商银行开展异构注册中心建设,在部署 zookeeper 集群的同时对等部署一套独立的异构注册中心集群。业务系统同时向 zookeeper 和异构注册中心两个集群注册并进行服务订阅 (如图 2 所示) 。
图 2 异构注册模型
异构注册中心与 zookeeper 协同工作,提升注册中心整体对外服务能力。当 zookeeper 集群与异构注册中心任一集群发生系统性故障时,另一注册中心集群可接管 (如图 3 所示数据表结构) 。
图 3 异构注册模型下任一注册中心集群故障
说明:上图中 zookeeper 集群故障,异构注册中心正常工作,服务仍可正常注册、订阅及调用。
提出合并订阅机制,
使注册中心故障时迁移更加平滑
工商银行原有多注册中心订阅机制,消费方优先使用某一注册中心推送的提供方列表,仅当该注册中心上无任一可用提供方,消费方才切换使用下一注册中心推送的数据。此时若优先使用的注册中心因故障推送了不完整的提供方列表,消费方集中调用这些提供方,可能导致“提供方负载不均”、“触发并发限流”等问题。
为保障建设异构注册中心后注册中心故障时迁移更加平滑,工商银行研究并提出了消费方合并订阅机制: 在消费方侧合并 zookeeper 和异构注册中心的订阅视图,各注册中心订阅数据合并后再刷新 invoker 缓存。
即使某注册中心故障推送了空或者不完整的提供方列表,合并后的数据仍是有效的,提高了消费方筛选提供方的效率,提升交易成功率。
图 4 多注册中心合并订阅机制
注册中心异构部署和消费方合并订阅机制建成后,混沌模拟注册中心 CPU 满载、内存高负荷、磁盘故障、网络抖动、网络隔离等故障场景,提供方负载均衡,交易无失败,符合预期。同时,合并订阅机制还能额外降低多注册中心模式下消费方缓存提供方列表所占用的内存。
基于以上技术储备及基础建设,工商银行于 2020 年开展异构注册中心建设,规避行内注册中心单一技术栈风险,进一步提升了注册中心核心组件在整个分布式体系中的高可用能力。
PART. 4
未来展望
为满足分布式服务平台金融级高可用的需求,工商银行探索并提出异构注册高可用方案,消除了大规模服务注册场景下单一注册中心存在的系统性风险,保障金融系统的稳健运行。
未来,工商银行将在异构注册的基础上进一步推动单元化部署运维转型,打破注册中心为全局唯一流量枢纽的现状,实现交易流量在单元内部最大限度完成闭环,辅以单元自动切换实现故障隔离,进一步控制区域性故障场景下的故障爆炸半径,全面提升分布式服务平台流量控制、高可用接管能力,为同业微服务架构规模化应用提供最佳实践和范例。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
红帽首席架构师:CentOS Stream 不是要革了 CentOS 的“命”
自从红帽宣布 CentOS 将停止更新,并以全新的 CentOS Stream 彻底取而代之;开源社区有关红帽这一举措的疑惑就层出不穷。对此,红帽首席架构师张家驹于近期进行了答疑,对 CentOS 的这一变化进行了解读。 1、 作为红帽企业 Linux(RHEL)的复刻版本,CentOS 曾凭借开源、免费、稳定的特性深受市场喜爱。但红帽方面认为,身处 RHEL 下游的 CentOS 已无法满足当今企业的需求。为了打造更好的创新环境,该公司因而重新设计推出了更好的社区版本 CentOS Stream,并将其放在了 RHEL 的上游,以打造更好的 CentOS 和 RHEL。 张家驹表示,CentOS Stream 跟 RHEL 本身的差别非常小,且 CentOS Stream 与 RHEL 的稳定性基本上是一致的。CentOS Stream 的目的在于提高 RHEL 开发过程的透明度和协作性。 广大社区开发者会发现,RHEL 的开发流程同 CentOS 的开发流程是融为一体的,由此用户将更方便地访问红帽的一些资源。张家驹还在直播现场展示了 CentOS Stream 在 2 月 24 日...
- 下一篇
你也可以很硬核「GitHub 热点速览 v.22.13」
本周特推介绍了一个非常易上手,操作难度(主要难度在于机件购买)极低的硬件项目,SmartKnob 让你有个可玩性极高的控制仪。本周特推另外一个项目则是一个安全项目,打破你对 URL 是可靠、安全的认知。此外,周榜则注重培养你的“文化底蕴”,法律和经济知识了解一下。 以及,如果你在维护某个开源项目,一定要读一读本周的开源治理的 Blog 分享。 以下内容摘录自微博@HelloGitHub 的 GitHub Trending 及 Hacker News 热帖(简称 HN 热帖),选项标准:新发布 | 实用 | 有趣,根据项目 release 时间分类,发布时间不超过 14 day 的项目会标注 New,无该标志则说明项目 release 超过半月。由于本文篇幅有限,还有部分项目未能在本文展示,望周知 🌝 本文目录 News 快读 开源治理·何时 say no 产品·GitHub Action 支持 rerun 部分模块 本周特推 1.1 DIY 控制硬件:SmartKnob 1.2 浏览器套娃攻击:BITB GitHub Trending 周榜 2.1 低代码平台:lowcode-eng...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8编译安装MySQL8.0.19
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Mario游戏-低调大师作品