实现:多活的基础中间件

APIRouter : 路由分发服务
API Router 是一个 HTTP 反向代理和负载均衡器,部署在公有云中作为 HTTP API 流量的入口,它能识别
出流量的归属 shard ,并根据 shard 将流量转发到对应的 ezone 。 API Router 支持多种路由键,可以
是地理位置,也可以是商户 ID ,订单 ID 等等,最终由 API Router 映射为统一的 Sharding ID 。
Global Zone Service :全局状态协调器
GZS 维护着整个多活的路由表,其他所有的服务都从 GZS 订阅路由信息。切换机房的操作也在 GZS 控
制台中完成。路由表包括:地理围栏信息, shard 到 ezone 的归属信息,商铺 ID /订单 ID 等路由逻辑
层到 shard id 的映射关系等。 GZS 通过在 SDK 端建立 Cache ,来保证 shard 逻辑能够最快速度执行,
基本不需要和 GZS 交互,同时也有实时推送机制,确保在数据变更后能够快速通知到其他的服务。
SOA Proxy :内部网关
SOA Proxy 实现了对 SOA 调用的路由,执行和 API Router 相似的逻辑,但只用在机房之间进行通信的
场景。业务使用 SOA Proxy 需要对代码做一些修改,把路由信息加入到调用的上下文中。
Data Replication Center :数据复制
DRC 负责 Mysql 数据的实时双向复制,保证跨机房延时在 1s 以内。提供了基于时间的冲突解决方案,
确保各个机房的数据一致。 DRC 除了复制数据,还对外提供了数据变更的通知,让业务能够感知到其他
机房的数据变化,做相应的处理,例如清除 Cache 等。
除了 DRC ,我们还有 ZK 复制工具, RMQ 复制工具, Redis 复制工具,基本每个数据层次,都有对应的
复制方案。
Data Access Layer :数据访问
数据访问层支撑了 Globa Zone 的逻辑,还提供了最后一道保护,拒绝路由错误的数据写入,是多活最 底层的支撑。
Mysql 数据复制工具 DRC:
Mysql 的数据量最大,每个机房产生的数据,都通过 DRC 复制到其他 ezone ,每个 ezone 的主键取值 空间是ezoneid + 固定步长,所以产生的 id 各不相同,数据复制到一起后不会发生主键冲突。按照分区 规则,正常情况下,每个 ezone 只会写入自己的数据,但万一出现异常, 2 个 ezone 同时更新了同一笔 数据,就会产生冲突。DRC 支持基于时间戳的冲突解决方案,当一笔数据在两个机房同时被修改时,最 后修改的数据会被保留,老的数据会被覆盖。
整体结构


推荐阅读

设计:异地多活的实现思路和方法

相关推荐
Jerry952706285 天前
3.集群与分布式
分布式·架构·架构师·软考·高性能·高可用·架构设计师
分布式存储与RustFS5 天前
开源存储新变局:MinIO步入维护期后的五大替代方案深度解析
开源·对象存储·minio·高可用·企业存储·rustfs
Jerry952706286 天前
1.什么式可用性
java·分布式·后端·架构·高可用·秒杀
分布式存储与RustFS6 天前
RustFS:基于Rust的高性能分布式对象存储,重新定义数据存储新标准!
人工智能·wpf·对象存储·minio·高可用·企业存储·rustfs
分布式存储与RustFS12 天前
云原生基石:实战RustFS on Kubernetes,构建高可用存储架构
算法·云原生·kubernetes·对象存储·高可用·企业存储·rustfs
betazhou15 天前
SQL server2019 配置故障群集文件共享方式always on高可用群集
数据库·sql server·高可用·always on·文件共享见证
betazhou18 天前
SQL server2019无域安装always on高可用集群
sql server·高可用·always on·故障转移群集
Javatutouhouduan1 个月前
记一次redis主从切换导致的数据丢失与陷入只读状态故障
java·redis·设计模式·java面试·高可用·java后端·java程序员
奥尔特星云大使2 个月前
MySQL分布式架构:MyCat详解
数据库·分布式·mysql·mycat·高可用
奥尔特星云大使2 个月前
mysql高可用架构之MHA部署(三)——故障转移后邮件告警配置(保姆级)
mysql·dba·高可用·mha·邮件告警