业务定制型异地多活架构设计

1个原理

大道至简-异地多活核心原理

异地多活本质上是 CAP 中的AP

大道至深-CAP

粒度

CAP 关注的粒度是数据,而不是系统,需要根据不同业务的数据特点来设计异地多活

延迟

CAP 是忽略网络延迟的 ,但工程落地不可能做到零延迟

分区容忍

C和A只能取1个是在发生分区的时候,正常运行情况下,可以同时满足 CA

补救

放弃 != 无为,需要为分区恢复后做准备,包括人工修复数据

3大原则

原则1-只保证核心业务

在这里插入图片描述

不同业务的数据特性不同,无法全部做到异地多活

原则2-只能做到最终一致性

在这里插入图片描述

复制肯定有时间窗,抛弃实时一致性的幻想,PACELC 理论

原则3-只能保证绝大部分用户

在这里插入图片描述

不要为了0.01%的用户,而影响了99.9%的用户

4个步骤

业务分级

将业务按照某个维度进行优先级排序,优先保证TOP3 业务异地多活

维度说明
访问量登录>注册>修改密码
核心场景聊天>朋友圈>摇一摇
收入来源订单>搜索>编辑

数据分类

分析 TOP3 中的每个业务的关键数据特点,将数据分类

维度说明
数据修改量数据被修改的数量和频率,包括新增、删除、修改
一致性数据的一致性要求,例如:强一致性(余额、库存),最终一致性(动态)
唯一性数据的唯一性要求,例如:全局唯一(用户ID)、可重复(昵称)
可丢失性数据是否可丢失,例如:不可丢失(账户余额)、可丢失(微博、密码)
可恢复性数据是否可恢复,例如:用户恢复(微博)、系统提供恢复(密码找回)、内部恢复(编辑和运营重发)

数据同步

针对不同的数据分类设计不同的数据同步方式

在这里插入图片描述

多管齐下,“不择手段”,不要局限于存储系统同步

数据同步技巧

数据修改量一致性唯一性可丢失可恢复同步技巧
账号强一致性全局唯一数据库同步+消息队列同步
密码最终一致性不涉及数据库同步
余额强一致性不涉及数据库同步
库存强一致性不涉及数据库同步
微博、资讯、朋友圈动态最终一致性可重复是,用户或运营重发存储系统同步
Session最终一致性全局唯一是,系统重新生成重新生成+回源读取

异常处理

针对极端异常的情况,考虑如何处理,可以是技术手段或非技术手段

业务兼容

体验不好 优于 无法体验

  1. 数据短时间不一致:业务有损,例如微博、朋友圈
  2. 数据无法获取:转账申请,支付核对中

事后补偿

少量用户损失,用钱解决

  1. 礼包、红包
  2. 礼物、物品(暴雪炉石回档补偿)
  3. 保险赔偿

人工修正

尽力而为,减少损失

  1. 人工订正数据,达到最终一致性
  2. 重要事情说三遍:日志、日志、日志

5个技巧

消息队列同步

在这里插入图片描述

适合全局唯一的数据,因为可以覆盖;不适合余额之类的数据,因为数据修改无法做到幂等性

库存拆分

在这里插入图片描述

事务合并

在这里插入图片描述

例如:游戏玩家异地充值100,消费60,即使 IDC-B 的业务服务器不知道玩家的实际余额(在 IDC-A 的数据库中),业务也是可以继续处理的,具体实现逻辑如下:

  1. 正常情况下通过数据库同步来同步余额,对应上图的 IDC-A 到 IDC-B 的“余额同步”
  2. 异常情况下,IDC-A 机房挂掉,余额同步中断,可能会导致 IDC-A 和 IDC-B 的数据不同步,例如图中两个余额表的余额,IDC-A 是 30,IDC-B 是65
  3. 玩家到 IDC-B 想消费60块,无论 IDC-B 的余额表中是大于还是小于60,都不能直接消费,因为无法判断这个余额数据是否一致
  4. 玩家到 IDC-B 先充值100块,再消费60块,无论 IDC-B 的余额表中是大于还是小于60,都是允许的,此时 IDC-B 在临时事务表中记录两个事务
  5. IDC-A 恢复后,IDC-B 将临时事务表中的事务发给 IDC-A,IDC-A 进行合并,合并后的真实余额是70元,然后再通过“余额同步”这个通道将70元余额同步给 IDC-B 的余额表

实时改异步

在这里插入图片描述

适当容忍

在这里插入图片描述

业务上稍微放开一些约束,例如:电话会议系统允许欠费也能发起会议

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值