多数据中心多活技术架构

建设思路:多数据中心多活架构是部署在多地的多个数据中心同时对外提供服务,当某个数据中心出现灾难性事故时,可以将整个数据中心的流量划拨到其他数据中心,实现快速故障转移。

1.数据分类

  • 独占数据:按业务分片切割,每个数据中心维护部分数据,一组数据独占到一个分片;
  • 共享数据:每个数据中心包含全量共享数据,数据之间实时同步;
    • 例如:配置信息、通用数据信息、索引信息、全局索引等;

2.数据切分

采用唯一标示进行分片(例如:用户ID);

  • 首先,分库分表,原则分表数量是2的n次方。

例如:使用512个分表,对用户ID.hashCode对512取模运算可得到用户数据落入分表编号。

  • 其次,数据分片,原则分片数量应该是2的m次方(m<=n)。

例如:使用64个切分片,可确保最多横向扩展到64个数据中心,对用户ID.hashCode对64取模运算可得到用户所在分片号。

  • 最后,分配数据中心,原则数据中心数量必须小于分片数量。

例如:使用2个数据中心,可以通过路由策略将任意分片的数据流量划拨到任何数据中心。


3.服务分类

  • 独占服务:就是在服务入口层采用流量分流策略,将用户的请求按分片路由到对应的数据中心。

例如:一个用户的所有服务请求只会固定落入一个数据中心,除非发生流量划拨,重新分配了各数据中心承载的分片服务。对于独占数据业务的服务自然需要采用独占服务。

  • 共享服务:采用的路由策略是服务提供者在相同数据中心为服务消费者提供服务。

例如:一个消费者在A数据中心调用共享型服务,那么该调用流量进入A数据中心,如果另外一个消费者在B数据中心调用该共享型服务,那么该调用流量进入B数据中心。对于共享数据的读服务应该采用共享服务,因为共享数据是所有分片共享的数据,通过共享型服务调用有效避免了跨机房调用,从而提高服务性能。

  • 竞争服务:该类型服务调用流量只会固定进入一个数据中心。

例如:对于共享数据的写服务应该采用竞争服务,因为共享型数据是所有分片共享的,那么对于数据的写入就存在各个分片的竞争性,只能从一个固定数据中心写入,然后同步到其他数据中心共享。


4.服务路由

  • 内容分发网络(CDN)

CDN回源策略:自定义CDN回源策略,将用户的分片号写入Cookie中,CDN回源时依赖分片号进行源站选择,将用户流量按着分片号分别导入到不同的数据中心,保证整个数据中心发生灾难时通过外部平台进行流量划拨。

  • 负载均衡(SLB)

负载均衡路由策略:负载均衡是作为数据中心内部的一个中间件,在极端情况CDN回源策略失效时能够通过内部路由转发流量,同时承担内网访问不经过CDN的流量路由工作。

  • 远程服务调用框架(RSF)

远程服务调用框架路由策略:我们所熟知的远程调用框架大都做到多节点冗余和负载均衡来提高系统并发性能和实现故障转移。多数据中心架构中还要求调用框架具有按着策略进行流量路由功能,包括独占策略,共享策略,竞争型策略。

  • 数据库分库分表中间件

数据库中间件路由策略:分库分表路由策略就是按着前述的数据切分策略,对数据进行分表入库。那么同时带来另外两个问题:

5.数据互备

  • 数据库备份:
    • 共享数据:是全量数据的单向备份,即通过竞争型服务,将数据写入一个数据中心,然后通过数据同步机制同步到其他各个数据中心。
    • 独占数据:需要多数据中心交叉互备,即通过独占服务,将独占数据按着分片路由策略写入各个不同的数据中心,然后通过数据同步机制同步到其他各个数据中心。
  • 分布式缓存备份:
    • 分布式缓存通过类似数据库将数据通过分片规则写入不同的Shard,然后在多数据中心之间同步Shard中的数据。
  • 分布式队列数据备份:
    • 在消息队的消息流向上需要支持消息的汇聚和分发。
      • 汇聚:不管生产者在哪个机房生产消息,消费者都在一个固定的机房消费消息。
      • 分发:不管生产者在哪个机房生产消息,消费者在各个机房都能够消费消息。那么需要对消息底层队里数据进行桥接和转发。
  • 中间件数据备份:
    • 不同的中间件会使用不同的数据存储技术,
    • 例如:WAF数据存储在MySQL中,则采用数据库数据备份方案;统一配置中心采用的是Zookeeper方案,在一个数据中心部署Leader/Follower服务器,其他的数据中心部署Observer服务器;远程服务调用框架中使用的缓存,则采用分布式缓存数据备份方案等等。


6.应用无状态

想要实现流量在多个数据中心之间任意划拨切换,必须要保证应用无状态,这就需要将应用状态数据分离出来。应用业务数据保存在数据库中、缓存中和队列中。应用的多数据中心状态数据则保存在各个中间件中,例如全负载均衡(GSLB)、应用防火墙(WAF)、统一配置中心(SCM)、远程服务调用框架(RSF)、统一任务调整系统(UTS)。这些中间件也按着多数据中心的架构将各自的数据保存各自的数据库中、缓存中和队列中。


7.数据同步


设立一个「中心机房」,任意机房写入数据后,都只同步到中心机房,再由中心机房同步至其它机房。
这样做的好处是,一个机房写入数据,只需要同步数据到中心机房即可,不需要再关心一共部署了多少个机房,实现复杂度大大「简化」。
但与此同时,这个中心机房的「稳定性」要求会比较高。不过也还好,即使中心机房发生故障,我们也可以把任意一个机房,提升为中心机房,继续按照之前的架构提供服务。

你可能感兴趣的:(架构,java,数据库,网络)