单元化架构方案
演变:
同城双活:
一个为数据中心,负责日常生产运行 ; 一个为灾难备份中心,负责在灾难发生后的应用系统运行;数据中心发生重大故障时 将流量切换到备份中心以保障正常运行
两地三中心:
在同城双活的基础上添加异地的灾难备份中心,当双活出现自然灾害等原因而发生故障时,将流量转移到异地备份中心
冷备中心不工作,关键时刻不敢切
通机吃间
香粤奶扫
冷备中心不工作,成本存在严重浪费
同城数据中心B
同城数据中心A
别基步油
本质上数据仍然单点写,数据库瓶颈
无法解
致索完安捷制
盗亮保步造制
资源,容灾,扩展仍然未得到解决
异地冷备数据中心C
两地三中心方案
两地三中心方案
Set化架构:
目前最主流的单元化架构方案,类似数据库的垂直分表逻辑,将核心业务部署到多个机房,流量根据路由转发到部署在不同地区的核心业务进行请求处理,核心业务可通过RPC调用非核心业务,非核心业务服务和核心业务服务之间可以做数据同步,假设某机房上的核心服务宕机则将请求转发给其他机房,以此保证多活
流量路由:按照key(通常是userid)进行路由,判断该请求路由到中心集群还是单元化服务集群
中心集群:非核心业务,未进行单元化改造的服务(通常不在核心交易链路,比如供应链系统)称为中心集群,跟当前架构保持一致
单元化集群:核心业务,每个单元化集群只负责本单元内的流量处理,以实现流量拆分以及故障隔离,每个单元化集群前期只存储本单元产生的交易数据,后续会做双向数据同步,以实现容灾切换需求
中间件:
ⅰRPC:对于SET服务,调用封闭在SET内 ,对于非SET服务,沿用现有路由逻辑
ⅱKV:支持分SET的数据产生和查询
ⅲMQ:支持分SET的数据产生和消费
数据同步:
全局数据(数据量小且变化不大,比如商家的菜品数据)部署在中心集群,其他数据根据服务不同放到具体的单元化集群中,后期有需要可以同步到中心集群;如果有需要,各单元化集群之间的可进行数据双向同步,以满足容灾备份需求
SET化架构图一
如下图所示,如果单个SET中部分服务无法使用,可根据优先级设置将请求再次路由到其他SET中进行请求
SET化架构图二
SET设计原则:
切分原则:
a切分规则由业务层面按需定制
b优先选择最大业务维度进行切分
部署原则:
一个SET可以跨机房、跨地区进行部署,为保证灵活性,单个SET内机器数量一般不超过1000
SET化路由策略及其能力:
异地容灾:
通过SET化架构的流量调度能力,将SET分别部署在不同地区的数据中心,实现跨地区容灾支持
高效本地化服务:
利用前端位置信息采集和域名机械策略,将流量路由到最近的SET,提供最高效的本地化服务,例如外卖服务,前台可通过定位将请求路由到距离最近的SET集群
集装箱式拓展:
SET的封装性支持更灵活的部署拓展性,通过使用Docker、K8s等容器化工具进行服务一键下线、发布