如下是一个简化的“三地五中心”的部署架构示意图: 如上图,简要说明如下: 1)城市1和城市2距离较近,满足IDC-1和IDC-2时延10ms以内(时延越小越好); 2)城市3距离城市1和城市2都比较远, 主要用于灾备,只需要部署一个节点Node-5; 3)IDC-1和IDC-2各自部署2个节点,在分布式一致性算法投票的时候,只要有3个Node投票一致就投票成功。 由于IDC-1和IDC-2的4个节点之间时延很小,基本不影响分布式一致性算法的性能。 5)IDC-1和IDC-2的微服务应用可以同时写入数据,存储系统会自动根据分布式算法决定具体写入到Node-1到Node-4中的主节点;单个节点故障后,系统会自动选举出新的主节点。
好了,到此为止,用户的请求来到了 IDC-1 的 Spanner 集群服务器上,Spanner 从内存中读取到了路由配置,知道了这个请求的主体用户 C 所属的 RZ3* 不再本 IDC,于是直接转到了 IDC ③进入 IDC-2 之后,根据流量配比规则,该请求被分配到了 RZ3B 进行处理。 ④RZ3B 得到请求后对数据分区 c 进行访问。 ⑤处理完毕后原路返回。 比如,每个 IDC 机房都会有自己的域名(真实情况可能不是这样命名的): IDC-1 对应 cashieridc-1.alipay.com IDC-2 对应 cashieridc-2.alipay.com 假设我们的方案是由 IDC-2 机房的 RZ2 和 RZ3 分别接管 IDC-1 中的 RZ0 和 RZ1。 RZ3A(50%),RZ3B(50%) [50-74] --> RZ2A(50%),RZ2B(50%) [75-99] --> RZ3A(50%),RZ3B(50%) 这样之后,所有流量将会被打到 IDC
好了,到此为止,用户的请求来到了 IDC-1 的 Spanner 集群服务器上,Spanner 从内存中读取到了路由配置,知道了这个请求的主体用户 C 所属的 RZ3* 不再本 IDC,于是直接转到了 IDC ③ 进入 IDC-2 之后,根据流量配比规则,该请求被分配到了 RZ3B 进行处理。④ RZ3B 得到请求后对数据分区 c 进行访问。⑤ 处理完毕后原路返回。 比如,每个 IDC 机房都会有自己的域名(真实情况可能不是这样命名的): IDC-1 对应 cashieridc-1.alipay.com IDC-2 对应 cashieridc-2.alipay.com 假设我们的方案是由 IDC-2 机房的 RZ2 和 RZ3 分别接管 IDC-1 中的 RZ0 和 RZ1。 RZ3A(50%),RZ3B(50%) [50-74] --> RZ2A(50%),RZ2B(50%) [75-99] --> RZ3A(50%),RZ3B(50%) 这样之后,所有流量将会被打到 IDC
之后请求达到IDC-1的spanner集群服务器上,spanner从内存读取到了路由配置,知道了请求主体用户所属的RZ3*不在本IDC,于是直接转发到IDC-2处理。 为了解决跨地域路由问题,可以将决策迁移到客户端,比如每个IDC机房有自己的域名,如IDC-1对应域名1,IDC-2对应域名2,APP中可以直接通过rest访问不同的域名,后面对于用户行为的解析都在域名之上发生
好了,到此为止,用户的请求来到了 IDC-1 的 Spanner 集群服务器上,Spanner 从内存中读取到了路由配置,知道了这个请求的主体用户 C 所属的 RZ3* 不再本 IDC,于是直接转到了 IDC ③进入 IDC-2 之后,根据流量配比规则,该请求被分配到了 RZ3B 进行处理。 ④RZ3B 得到请求后对数据分区 c 进行访问。 ⑤处理完毕后原路返回。 比如,每个 IDC 机房都会有自己的域名(真实情况可能不是这样命名的): IDC-1 对应 cashieridc-1.alipay.com IDC-2 对应 cashieridc-2.alipay.com 假设我们的方案是由 IDC-2 机房的 RZ2 和 RZ3 分别接管 IDC-1 中的 RZ0 和 RZ1。 RZ3A(50%),RZ3B(50%) [50-74] --> RZ2A(50%),RZ2B(50%) [75-99] --> RZ3A(50%),RZ3B(50%) 这样之后,所有流量将会被打到 IDC
如下图中,IDC-1 和 IDC-2。两个机房之间通过高速光纤进行连接。它的一些关键特征是: (1)相同城市,距离在 50km 以上。为什么需要在 50km 以上呢? 此外还有些特别情况,如下图,可以发现,如果 IDC-2 挂了,IDC-1 能正常服务。但如果 IDC-1 整个挂了,DIC-2 的 Redis 集群是不可用的。
就是实现逻辑上的单领导复制模型,其实就是将这个改造为逻辑分区架构,每个数据中心都有一份全量的数据,比如南方以及东南地区走IDC-1,北方以及西部区域都走IDC-2; 又或者按照范围分区,或者是hash分区等等
可是,这样的方案也不能说是百分百的完美,因为就算是同运营商之间的通讯,也会存在城市和城市之间某个交换机出现故障的情况,对于这样的情况,B 站采取的方法是同时在 IDC-1 与 IDC-2(图 5)之间部署两条电信线路