架构会涉及到所用的所有存储,例如项目中用到了 MySQL、Redis、MongoDB 等等,操作这些数据库,都需要区分读写请求,所以这块需要一定的业务「改造」成本。因为 A 机房的存储都是主库,所以我们把 A 机房叫做「主机房」,B 机房叫「从机房」。
两个机房部署在「同城」,物理距离比较近,而且两个机房用「专线」网络连接,虽然跨机房访问的延迟,比单个机房内要大一些,但整体的延迟还是可以接受的。
业务改造完成后,B 机房可以慢慢接入流量,从 10%、30%、50% 逐渐覆盖到 100%,你可以持续观察 B 机房的业务是否存在问题,有问题及时修复,逐渐让 B 机房的工作能力,达到和 A 机房相同水平。
现在,因为 B 机房实时接入了流量,此时如果 A 机房挂了,那我们就可以「大胆」地把 A 的流量,全部切换到 B 机房,完成快速切换!
到这里你可以看到,我们部署的 B 机房,在物理上虽然与 A 有一定距离,但整个系统从「逻辑」上来看,我们是把这两个机房看做一个「整体」来规划的,也就是说,相当于把 2 个机房当作 1 个机房来用。
因为两个机房都能处理业务请求,这对我们系统的内部维护、改造、升级提供了更多的可实施空间(流量随时切换),现在,整个系统的弹性也变大了。
收起1.原则: 主线多活,数据分类,应用不同的CAP模型
2.异地N活
3.结合API网关,保证流量调度的及时性、生效一致性
4.平台型业务SDK化,避免平台型业务在所有机房提供读写服务
5.最终一致性
不要双写两个数据源,使用订阅等方式保证两个数据源的最终一致。
-MySQL双向同步,各机房分别订阅数据库重建cache、es 、ma。
以上来自罗代均老师在〖deeplus直播第261期〗线上分享演讲,具体可以搜索一下,相关PPT
参考链接:
https://cloud.tencent.com/developer/article/1816381
双活数据中心是指在两个地理位置不同的数据中心之间建立起高可用性的数据同步和故障切换机制,以确保业务的连续性和可用性。为了确保双活数据中心的负载均衡和故障切换,可以采取以下措施: