从传统银行到互联网,异地多活难不难?(2)

简介: 从传统银行到互联网,异地多活难不难?(2)

三、建立多活保证高可用


3.1 目标


  • 满足监管要求
  • 满足全行业务连续性要求
  • 实现一键切换
  • 缩短计划内停机时间

我们可以看一下业界比较主流的灾备是怎么做的?最主流的灾备技术是两地三中心,数据中心A和数据中心B在同城作为生产级的机房,当用户访问的时候随机访问到数据中心A或B。


之所以随便访问,因为A和B会同步做数据复制,所以两边的数据是完全一样的。但是因为是同步复制的,所以只能在同城去做两个数据中心,否则太远的话同步复制的延时会太长。


image.png


在两地三中心的概念里,一定会要求这两个生产级的数据中心是必须在同一个城市,或者在距离很近的另外一个城市也可以,但是距离是有要求的,一般要求在60公里之内,比如雄安和北京城区。异地备份数据中心通过异步数据复制来实现,银行两地三中心的特点是异地备份数据中心一般不作为关键应用宿主地,某些情况下是完全冷备,有些机构的做法是将统计分析和非关键的内部管理系统放到灾备机房。对于关键业务应用异地灾备中心不对外服务,所以用户不会访问到异地的点。原因是因为数据从生产级数据中心到异地的节点是异步去复制,所以整个有延时。这个模式在灾难到来的情况下可能会出现冷切换的问题,不能很顺畅的切换,虽然在平时的演练中,已经模拟了生产切换,但往往是众多情况中比较乐观的设定。

另外一种模式为异地多活模式,也是目前正在兴起的一种模式,对于某些大型银行的核心关键应用已经在此模式下进行了成功验证。异地多活首先是要做到同城双活或者同城多活,就是数据在同城网络环境下进行高速备份,也可以在做楼宇级同步,一般在10ms类的数据差异。异地多活需要多个跨地域的数据中心。异地多活是跨地域的,而且距离一定要做到1000公里以上的范围,其实在中国范围内全国城市都可以去部署了。降低数据同步量,同步服务根据一定业务键通过Zookeeper路由到对应的主数据中心,备数据中心可以通过旁路报文或者异步数据同步方式补全。

 

2.3.2 互联网行业多活架构

最近十年,互联网发生了翻天覆地的变化,现在的互联网服务相比于银行系统有以下几个特点,访问量大,并发量大,非强一直要求,RTO和RCO要求都非常高,低成本。在这些要求的前提下,产生了一套适用于互联网行业的多活架构。


      互联网的多活架构通常是通常双活双中心+混合云的方式,基于各种自研组件,开源组件和MySQL数据库来实现多活。

 

下图是多活双中心示意图。


image.png


下图是多活双中心与公有云示意图。



image.png


 

双中心主要实现业务架构的双活,任意一个机房挂掉,可以快速的切换到另外一个机房。混合云的架构主要为机房提供快速扩容的弹性能力。

      在实践这个架构的时候,有几个关键点。

1、单元化

2、前端路由

3、数据路由

4、数据同步


单元化

单元化是多活架构的基石。单元化通常有几个维度,用户维护,功能维度,用户与功能的混合模式,作为电商,核心业务只有一个,就是购物流程。我们一定要确保购物流程的高可用。因此购物流程功能肯定不能拆分成更细的单元,如果拆分后,那么购物流程的一个单元不能用,整个购物流程就不通了。咱的双活也就失败了。所以我们会选择用户维度的单元化。


前端路由

前端路由的主要目的是解决如何快速的将用户切换到正常服务的机房,传统是通过DNS来切换,但是这个切换受限于DNS缓存的生效周期,并且最多只能做到地区,很难做到细粒度的路由控制。现在常用的有两种方案。一、通过中间件的方式,所有用户进入同一的用户端路由中间件,有中间件去决定用户走什么路由。优点是控制力非常好,缺点是如果用户量和请求量太大,中间件存在性能瓶颈。二、通过APP端路由的方式,下发路由策略到APP端,由APP端完成用户路由,选择正确的机房。


数据路由

虽然我们有一层前端路由,但是由于现在入口非常多,H5,APP,PC,小程序等等。 我们很难将所有的入口都能做到100%走路由,甚至还有一部分路程是在后台或者service层自己发起的。那么问题来了,这部分没有经过前端路由的用户数据是否会出现异常?答案肯定会的。


相关文章
|
机器人 开发工具 Web App开发
干货满满!解密阿里云RPA (机器人流程自动化)的产品架构和商业化发展
阿里云RPA,作为阿里云自研8年的技术,在资本的热捧下,逐渐从幕后来到台前,成为企业服务市场的黑马。本文将从产品上全面剖析,阿里云RPA这款产品的现阶段情况,同时简单谈谈阿里云RPA的商业化进展。
8397 0
干货满满!解密阿里云RPA (机器人流程自动化)的产品架构和商业化发展
|
算法 编译器 Swift
【Swift开发专栏】Swift与Objective-C的对比
【4月更文挑战第30天】Swift与Objective-C对比:Swift语法简洁,支持元组、泛型和闭包,提高可读性;性能优化,使用LLVM编译器,与Objective-C兼容,便于迁移项目;生态系统活跃,苹果官方支持,丰富资源库。Objective-C虽历史悠久,但逐渐边缘化。对于新项目和开发者,Swift是更佳选择,驱动iOS开发创新。
1143 0
|
Java Maven C++
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
306 0
|
JSON Rust 编译器
Rust 笔记:开发环境搭建与 rust 工具介绍
Rust 笔记:开发环境搭建与 rust 工具介绍
1023 0
|
Rust 监控 Kubernetes
一文读懂基于 eBPF 自动化可观测平台 - DeepFlow
Hello folks,我是 Luga,今天我们来聊一下云原生生态核心技术——基于 eBPF 全链路自动化可观测性。当我们真正融入到云原生生态场景中时,我们将会深切地体会到:“全链路可观测性”的价值所在~
3289 1
一文读懂基于 eBPF 自动化可观测平台 - DeepFlow
|
存储 缓存 NoSQL
Redis系列八--Redis数据过期策略详解
Redis系列八--Redis数据过期策略详解
911 0
Redis系列八--Redis数据过期策略详解
|
索引
POI(excel)中Cell应用实践总结
POI(excel)中Cell应用实践总结
486 0
|
Rust 算法 安全
Rust常用加密算法
Rust常用加密算法
466 0
|
Java
SpringBoot访问jar包静态文件
项目开发过程中我们我们会遇到访问静态文件的情况,例如word书签模板,excel导入模板,条文法规文件等,在war包的情况下访问是没有问题的,如果使用jar包部署,使用相对路径访问会出现问题,本文就此问题给出解决方案。
351 0
SpringBoot访问jar包静态文件