跳到主要内容

单元化架构方案

演变:

同城双活:

一个为数据中心,负责日常生产运行 ; 一个为灾难备份中心,负责在灾难发生后的应用系统运行;数据中心发生重大故障时将流量切换到备份中心以保障正常运行

两地三中心:

在同城双活的基础上添加异地的灾难备份中心,当双活出现自然灾害等原因而发生故障时,将流量转移到异地备份中心

冷备中心不工作,关键时刻不敢切

通机吃间

香粤奶扫

冷备中心不工作,成本存在严重浪费

同城数据中心B

同城数据中心A

别基步油

本质上数据仍然单点写,数据库瓶颈

无法解

致索完安捷制

盗亮保步造制

资源,容灾,扩展仍然未得到解决

异地冷备数据中心C

两地三中心方案

image.png

两地三中心方案

Set化架构:

目前最主流的单元化架构方案,类似数据库的垂直分表逻辑,将核心业务部署到多个机房,流量根据路由转发到部署在不同地区的核心业务进行请求处理,核心业务可通过RPC调用非核心业务,非核心业务服务和核心业务服务之间可以做数据同步,假设某机房上的核心服务宕机则将请求转发给其他机房,以此保证多活

流量路由:按照key(通常是userid)进行路由,判断该请求路由到中心集群还是单元化服务集群

中心集群:非核心业务,未进行单元化改造的服务(通常不在核心交易链路,比如供应链系统)称为中心集群,跟当前架构保持一致

单元化集群:核心业务,每个单元化集群只负责本单元内的流量处理,以实现流量拆分以及故障隔离,每个单元化集群前期只存储本单元产生的交易数据,后续会做双向数据同步,以实现容灾切换需求

中间件:

ⅰRPC:对于SET服务,调用封闭在SET内,对于非SET服务,沿用现有路由逻辑

ⅱKV:支持分SET的数据产生和查询

ⅲMQ:支持分SET的数据产生和消费

数据同步:

全局数据(数据量小且变化不大,比如商家的菜品数据)部署在中心集群,其他数据根据服务不同放到具体的单元化集群中,后期有需要可以同步到中心集群;如果有需要,各单元化集群之间的可进行数据双向同步,以满足容灾备份需求

image.png

SET化架构图一

如下图所示,如果单个SET中部分服务无法使用,可根据优先级设置将请求再次路由到其他SET中进行请求

image.png

SET化架构图二

SET设计原则:

切分原则:

a切分规则由业务层面按需定制

b优先选择最大业务维度进行切分

部署原则:

一个SET可以跨机房、跨地区进行部署,为保证灵活性,单个SET内机器数量一般不超过1000

SET化路由策略及其能力:

异地容灾:

通过SET化架构的流量调度能力,将SET分别部署在不同地区的数据中心,实现跨地区容灾支持

高效本地化服务:

利用前端位置信息采集和域名机械策略,将流量路由到最近的SET,提供最高效的本地化服务,例如外卖服务,前台可通过定位将请求路由到距离最近的SET集群

集装箱式拓展:

SET的封装性支持更灵活的部署拓展性,通过使用Docker、K8s等容器化工具进行服务一键下线、发布