异地多活的概念以及为什么要做异地多活这里就不进行概述了。概念性的很多,像什么同城双活、两地三中心、三地五中心等等概念。如果有对这些容灾架构模式感兴趣的可以阅读下这篇文章进行了解:《浅谈业务级灾备的架构模式》。
阅读本篇文章之前,我们先明确一下背景,这样大家后续在看的时候就不会产生困惑。
得物多活改造一期目前有两个机房,分别是机房A和机房B。文章中大部分图中都会有标识,这就说明是两个不同的机房。
A机房我们定义为中心机房,也就是多活上线之前正在使用的机房。如果说到中心机房那指的就是A机房。另一个B机房,在描述的时候可能会说成单元机房,那指的就是B机房。
单元化简单点我们直接就可以认为是一个机房,在这个单元内能够完成业务的闭环。比如说用户进入APP,浏览商品,选择商品确认订单,下单,支付,查看订单信息,这整个流程都在一个单元中能够完成,并且数据也是存储在这个单元里面。
做单元化无非就两个原因,容灾和提高系统并发能力。但是也得考虑机房建设的规模和技术,硬件等投入的成本。具体的就不多讲了,大家大概理解了就行。
了解改造点之前我们先来看下目前单机房的现状是什么样子,才能更好地帮助大家去理解为什么要做这些改造。
如上图所示,客户端的请求进来会先到SLB(负载均衡),然后到我们内部的网关,通过网关再分发到具体的业务服务。业务服务会依赖Redis、Mysql、 MQ、Nacos等中间件。

既然做异地多活,那么必然是在不同地区有不同的机房,比如中心机房,单元机房。所以我们要实现的效果如下图所示:

大家看上面这张图可能会感觉很简单,其实也就是一些常用的中间件,再多一个机房部署罢了,这有什么难度。如果你这样想我只能说一句:格局小了啊。
::: hljs-center
::: 用户的请求,从客户端发出,这个用户的请求该到哪个机房,这是我们要改造的第一个点。