数据访问路由策略
由于单机房的容量限制以及容灾能力不足,多机房的应用与数据库部署一般有两种模式:扩展模式与镜像模式。扩展模式按照业务把应用进行分类,把相互依赖的应用部署在同一个机房中,实现业务之间的隔离。但必然存在一些业务需要多机房同时提供服务,这种模式本质上是把一个机房拆分并部署为多个机房。镜像模式下每个机房都部署相同的应用与数据库,每个机房都具备全量的业务提供能力,按照比例进行流量的调拨。运行时机房只承担一部分业务,但必然存在一些基础应用和数据无法按照流量进行比例划分,需要机房间的数据共享与同步。
网商银行在进行单元化架构改造时,根据业务情况,结合两种模式,把数据划分为三类。(1)可进行流量调拨的数据,可以按照一定的规则进行等比例划分,实现每个机房只需要一部分数据。对应用进行镜像化部署,应用对于数据的访问在同一个机房内可以完成。应用与数据的访问情况如图3-1-9所示,其中每个数据库在其他机房也都有副本,以实现容灾能力。
(2)不可进行流量调拨的全局数据,数据库的主节点在某个机房,其他机房和城市进行数据访问会出现跨机房与跨城市情况,耗时增加较多。应用与数据的访问情况如图3-1-10所示,在流量调拨时,同机房调用优先进行。
(3)全局数据的耗时涉及跨城情况时,存在业务不可接受的情况。可进行流量调拨的数据分布在其他城市时,应用的访问也会出现跨城情况。这部分数据会同步到一个独立库中,该库在每个城市都有部署。全局城市级数据模式下应用与数据的访问如图3-1-11所示,在进行流量调拨时同机房调用优先进行。
综合考虑分布式数据库主节点与副本的读写分离、应用与库的部署情况、数据库自身的负载等,应用对于数据的访问优先级如下:同机房正常状态→同城正常状态→同城高负载状态→跨城正常状态→跨城高负载状态。其中三类数据在正常和容灾场景中都按照以上策略,通过该策略可降低数据访问的耗时,实现数据库的负载均衡。
多集群部署
网商银行的数据库集群部署经历了两个阶段,从建行之初的单库、分库少量集群,通过按业务的垂直拆分、分库的水平拆分,发展到现在的用户、产品、业务、账务、交换、公共等多套集群,保障了业务快速增长过程中的高可用。
建行之初,业务分库集群有5套,用于支撑业务的分库,分库方式包括10分库、20分库、100分库,分配到各分集群的策略也有两种:所有分库集中于单个集群或均分到5套集群。这种方式可以节约运维成本,但随着业务的快速增长,单集群故障影响全行业务的情况越来越不可接受。
网商银行应用采用微服务架构,L1层的架构如图3-1-12所示。