多活服务指令编排
大体的请求流转路径
DNS–>防火墙–>负载均衡VIP–>应用服务器–>数据库/缓存服务器
DNS–>负载均衡VIP–>应用服务器–>数据库/缓存服务器
一、防火墙
防火墙作为外部流量的入口,当作全链路切换时,即使是共享型系统,也需要配置防火墙的部分流量切换步骤。
先暂停:暂停的机房暂停流量的引入
再切换:将用户请求切换到新的机房
指令类型和功能说明
类别 | 作用 |
---|---|
暂停 | 暂停流量引入 |
切换 | 将用户请求切换到新机房 |
二、IDNS
域名绑定负载均衡vip, 负载均衡vip设置路由到具体服务器ip的策略
-
针对内网中两个系统间通过HTTP 域名并且没有经过防火墙访问的场景。
-
注意调用方的DNS缓存时间不能超过30s,否则切换后不能及时生效。
指令类型和功能说明
类别 | 作用 |
---|---|
前置检查 | 检查待切换配置的域名、IP与系统间的对应关系是否正确。 |
切换 | 将DNS上的域名指向目标逻辑数据中心中系统的IP。 |
三、多活任务调度管理
多活任务调度管理主要负责定时任务请求的分发和调度,例如定期归档等,因为数据可能分散再不同的机房因此需要将调度请求分发到对应的机房去处理。
多活任务调度管理的任务分为主机房任务\多机房任务\Cell型任务三大类:
-
主机房任务: 任务只在主机房执行,当主机房切换时才需要切换. 对应指令为暂停和切换.
-
多机房任务: 每个机房都要执行的任务. 对应指令类型为暂停和恢复.
-
Cell型任务: 任务和用户相关,随Cell主库的变更而切换.中台的单元化任务也是属于Cell型任务。对应指令类型为暂停和恢复。
注释:cell指的是单元分区,我们通过取模的方式把所有的用户分为256份,即256个cell,每个cell设置对应的路由的机房,那么用户请求过来就会路由到这个cell对应的机房去处理。
指令类型和功能说明
类别 | 作用 |
---|---|
暂停 | 暂停任务执行 |
切换 | 将任务切换到新机房执行。 |
恢复 | 恢复本机房的多机房任务。 |
四、RPC框架/消息队列
不同系统之间都是通过远程过程调用的方式来相互通信的,为了保证系统之间高的通信效率和数据一致性,需要将同一个用户请求路由到相同的机房去处理,例如购物车是A机房处理的用户请求,如果库存是在B机房处理用户请求的话,如果A\B两个机房数据没有同步完成,B机房故障了,那么就会存在数据不一致情况发生,如果购物车和库存都是在A机房处理的话就可以避免这种不一致问题。
RPC框架和消息队列的配置相似,放在一起说明。都是远程服务调用,都需要调整对应的路由策略。
指令类型和功能说明
类别 | 作用 |
---|---|
暂停 | 暂停服务请求或消费. |
切换 | 切换到新机房请求或消费 |
几种不同的路由策略:
1、路由到主机房:竞争型的服务,所有的会员都需要操作同一个资源的场景
2、路由到同机房:共享型的服务
3、根据会员编码路由:独占型的服务,即根据cell路由,cell在哪个机房就路由到哪个机房
五、KAFKA
-
Kafka不区分celllist,以机房为单位切换。
-
Kafka消费系统在做正式切换前需要执行前置检查步骤,检查对应的topic配置是否满足多活的要求,已经在卡夫卡平台上做过汇聚或主备配置。所以任务中先配置前置检查步骤.
-
Kafka目前支持主机房消费和多机房消费两种消费方式的切换:
- 主机房消费指消费系统只在主机房消费,备机房不消费,消费的数据通过数据层同步到备机房。 使用指令:暂停和切换。
- 多机房消费指消费系统在每个机房都消费并落入本机房数据库。使用指令:暂停和恢复。调研的结果,多活一期系统目前没有使用这种模式。
指令类型和功能说明
类别 | 作用 |
---|---|
前置检查 | 检查对应的topic配置是否满足多活的要求 |
暂停 | 暂停消费topic |
切换 | 切换到新机房消费topic |
六、数据库管理/缓存管理
-
数据库管理和缓存管理的配置相似,放在一起说明。
-
DB和Cache,系统使用的方式不同,分为:独占型(8N+1),竞争共享型和混合型。
指令类型和功能说明
类别 | 作用 |
---|---|
前置检查 | 检查系统在两个逻辑数据中心的DB或Cache是否部署,复制关系是否建立。 |
前置同步检查 | 检查系统的待切库,在逻辑数据中心间的同步延迟是否在“切换Delay阈值”范围内。默认20s:即同步延迟在20s内才允许开始切换任务。 |
同步检查 | 检查系统的待切库,在逻辑数据中心间的同步延迟是否在“偏移量”范围内,默认0:即没有偏移再进行正式切换。 |
暂停 | 暂停流量写入. |
切换 | 将主库切换到新机房 |
master和slave之间复制的方式是同步复制的方式而非半同步复制和异步复制的方式
七、多活切换管理平台
- 切换管理平台提供sleep指令,表示暂停一段时间后再执行下一个切换步骤。用于前一个步骤中的组件排干任务和数据。
指令类型和功能说明
类别 | 作用 |
---|---|
Sleep | 暂停执行下发 |
八、任务中的步骤依赖顺序
全链路切换的场景:有防火墙的场景不需要配DNS切换,无防火墙的场景需要配DNS切换
单系统切换的场景:应用到哪些组件就切换哪些组件
序号 | 前置依赖步骤序号 | 切换步骤名称 |
---|---|---|
1 | 数据库前置检查 | |
2 | redis缓存前置检查 | |
3 | 卡夫卡前置检查 | |
4 | IDNS前置检查 | |
5 | 1,2,3,4 | 数据库前置同步检查 |
6 | 1,2,3,4 | redis缓存前置同步检查 |
7 | 6,7 | 防火墙暂停 |
8 | 6,7 | 任务调度暂停 |
9 | 7,8 | 切换管理平台 sleep |
10 | 9 | 卡夫卡暂停 |
11 | 9 | RPC框架暂停 |
12 | 9 | 消息队列暂停 |
13 | 10,11,12 | 切换管理平台sleep |
14 | 13 | 数据库暂停 |
15 | 13 | redis缓存暂停 |
16 | 14,15 | 多活管理平台 sleep |
17 | 16 | 数据库同步检查 |
18 | 16 | redis缓存同步检查 |
19 | 17,18 | 数据库切换 |
20 | 17,18 | redis缓存切换 |
21 | 19,20 | 消息队列切换 |
22 | 19,20 | RPC切换 |
23 | 19,20 | 卡夫卡切换/恢复 |
24 | 19,20 | IDNS切换 |
25 | 21,22,23,24 | 任务调度切换/恢复 |
26 | 21,22,23,24 | 防火墙切换 |