赞
踩
本文由阿里技术专家吉远撰写于2022年2月。
长久以来,IOE技术架构成为银行业核心的标准配置和唯一选择,它们组成的系统一度被视为大型金融企业后台的“黄金架构”,某银行客户A类一级核心业务系统采用的就是成熟的“商业系统+集中式架构”的构建方式:IBM大型机、Db2数据库、EMC存储。
然而,今天在云计算/云原生等新兴技术普及趋势下,传统集中式架构正在面临前所未有的挑战,业务痛点具体如下:
因此,原有系统已经到了支撑能力的天花板,新系统的构建迫在眉睫。
作为国有大行核心去IOE并且是上阿里云的首个大机下移试点项目,在没有可借鉴对象的大背景下,如何将核心系统从传统大机架构平滑切换到分布式架构本身就是一个巨大挑战,尤其是在已经拥有亿级用户基数的情况下,如何既能充分发挥分布式架构的高可扩展性,又能满足金融业务严苛的安全、稳定、可靠要求,是新核心系统建设首要面临的问题。
经过和客户对焦,最终明确新一代分布式架构 6 大设计目标,在金融业务场景下满足高可用、高标准、低风险的要求。同时,在互联网场景下需满足高性能、高弹性、低成本的诉求。具体如下图:
图1 分布式架构设计目标
客户核心系统分布式设计,整体部署采用“同城双活+异地灾备”的两地三中心架构,实现同城 RPO=0,RTO 分钟级,异地 RPO 分钟级的容灾目标。其中底层数据库采用 OceanBase 数据库设计的单元化架构,具体如下图:
图2 同城三机房单元化架构
单元(即单元化应用服务产品层的部署单元),是指一个能完成所有业务操作的自包含集合,在这个集合中包含了所有业务所需的所有服务,以及分配给这个单元的数据。单元化架构就是将单元作为部署的基本单位,在全站所有机房中部署多个单元,每个机房内单元数目不固定,任一单元均部署系统所需的全部应用,数据则是全量数据按照某种维度划分后的一部分。
单元化的本质,就是把数据流量,按照一定纬度进行拆分。使得一个单元能够闭环提供完整的服务能力。但这个服务能力面向的是拆分后的部分数据流量,且只服务于这部分流量。
单元化解决的问题
单元化设计原则
应用App部署在第一机房和第二机房,2个机房,互为主备。
1个Gzone单元,双机房应用无状态对等部署,数据仅有一份,需要跨机房访问。
10个Rzone单元,双机房单元互备共20个Rzone,应用/数据访问自闭环,应用故障爆炸半径控制在10%以内。
你可能会疑惑,OceanBase集群标准部署是同城三机房三副本,而这个项目为什么要使用同城三机房五副本呢?原因是这样的:虽然业务上规划了第一机房和第二机房两个机房,但是客户要求以稳为主,核心系统对时延要求很高。同城机房基本也不允许跨机房访问。因此,为了避免OceanBase集群第一机房宕机,而导致leader切主到第二机房,我们在第一和第二两个机房各部署了2个副本。另外,三机房五副本等部署方式,可以在同一时间容忍2台observer 机器出现异常,为业务提供了更高的安全性和可靠性。
图3 OceanBase数据库单元化架构
客户核心系统通过 SOFA ODP 分库分表中间件/OBProxy 代理提供的统一入口来访问 OceanBase 数据库单元化集群,它屏蔽了分库分表、多集群及OBServer分布式的复杂性,将 SQL 语句路由到该应用单元对应的 Leader 副本上, 对用户使用完全透明;不过需要特别注意的点是,通过「用户编号」分片后,所有 SQL 必须通过带“分片键”进行数据操作,否则全表扫描 SLB 和 ODP 会被打爆。每个单元会拆分一个SLB(负载均衡服务)实例挂载ODP,ODP后对应后面的所有的OBserver。
图4 ODP单元化架构设计
这边重点讲下部署架构,客户核心系统对性能有非常高的要求,在上云过程中经历了几次演进。一次从 ODP 和 OBProxy 分开部署演进到 2 个进程合并一起部署到容器,主要解决网络多一跳耗时和快速弹性扩容问题,并且后续会往 OBSharding 单个C程序演进,解决性能问题。另一次,从一个 SLB 实例挂载后端所有 ODP 实例拆分成每个单元对应一个 ODP SLB ,解决的问题是:1) 在大流量情况下,单个 SLB 流量容易被打满;2)由于应用长连接原因,会导致负载不均,这样对某个 ODP 造成非常大压力,甚至出现 JAVA FullGC;3)某个 ODP SLB出现故障时,不会影响其它单元,符合单元化设计思想。
按照整体设计,我们在主城市规划了三个机房,但是每个机房采购及部署到位时间是不一致的。为了不影响应用上线计划,在第一机房主机房机器ready后,我们就开始部署OceanBase集群。首先部署好第一机房单机房三副本集群,提供给客户进行测试验证,同时等待第二和第三机房机器到位,待机器ready后,我们通过OceanBase特有的增减副本以及副本类型在线转换的功能,实现数据的平滑搬迁,最终实现同城单机房三副本到同城三机房五副本的架构转化,整个过程对应用透明,应用无感知,充分体现了OceanBase 强大的弹性伸缩能力。
图5 OceanBase三机房调整-1
图6 OceanBase三机房调整-2
图7 OceanBase三机房调整-3
OceanBase主备集群方案
传统IT系统高可用的实现主要是以主备的方式。这种方案目前有非常广泛的应用,由于经历了时间的验证,行业的认可度比较高。主备双机也可以作为容灾的一种选择。目前运行的很多系统,其容灾方案是以主备的方式构建的。虽然OceanBase通过其多副本特性完美解决了容灾的方案,对于重要度极高的系统,仍需要规避整个集群出现不可预知的故障时,导致服务不可用的情况。因此,OceanBase也提供了与传统构架类似的复制功能,利用REDO日志,使主集群和备集群实现数据同步。在极端情况下,如当主集群出现计划内或计划外(多数派副本故障)的不可用情况时,备集群可以接管服务。备库提供最大可用、最大性能、最大保护三种保护模式,可以根据实际情况选择,最大限度降低服务停机时间。
Oceanbase 主备集群三种保护模式
金融行业对业务连续性及对IT风险的应急要求非常高,容灾体系建设至关重要。对A类核心系统,既要能够满足同城双活,又要具备异地灾备的能力。为了满足客户异地容灾需求,我们在异地灾备机房搭建了一套异地备集群,采用OceanBase 主备集群架构,并借助首次发布的OCP管控主备集群版本进行快速跨城部署,实现了异地容灾切换时间跨越式提升(从小时级提升至分钟级),切换方式由原来的黑屏切换转换成白屏切换,极大地提高了应急切换的响应时间、安全性和便捷性。
图8 OceanBase 异地容灾部署
因为客户是第一次在核心系统上使用OceanBase分布式数据库,对稳定性和安全性提出了非常严格的要求,要求我们对全场景进行容灾演练,通过业务容灾演练满足核心A类业务投产要求。为此我们不仅在架构上设计了主城市同城三机房五副本的高可用架构,我们也和应用一起编写了详细的测试案例,来检测我们的高可用方案。通过验证我们在主城市2个副本同时宕机的情况下,完全可以做到RPO=0,RTO<30s,赢得客户信任,提升了客户面对灾难时能切敢切的信心。
![image.png](https://img-blog.csdnimg.cn/img_convert/ff77bce998bfa569712bf7be294404c5.png#clientId=u5a56c37f-73fb-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=585&id=uea9900a5&margin=[object Object]&name=image.png&originHeight=1170&originWidth=2132&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1062979&status=done&style=none&taskId=ud2d268ad-681e-4a19-8339-b04fada3749&title=&width=1066)
图9 OceanBase容灾测试案例
客户核心系统整体上采用停写迁移的方式进行数据移植,整个迁移过程中,数据从大机导出,要先导入临时库表,通过联表查询导入目标库,涉及多次数据导入导出。经过前期精心的设计准备,以及多轮生产环境移植演练,迁移时间控制在小时级别。同时为了稳定期间,客户分三个阶段进行白名单切流迁移验证,每个阶段,都会进行数据对账和业务逻辑验证,以保证数据和业务的正确性。
图10 核心系统割接整体迁移方案
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。