第78篇
极客时间《从0开始学架构》课程笔记。
一、什么是异地多活?
异地多活:异地指不同地理位置,多活指不同地理位置的系统都是活跃的,都能够提供业务服务。
异地多活是为了解决极端场景下所有服务器都出现故障时业务不受影响,或者业务在几分钟内就能够快速恢复而设计的。
异地多活的优点:功能强大、提供更好的体验、可以减少业务中断带来的损失
异地多活的缺点:代价高昂、设计复杂
二、应用场景
- 无法承受异地多活带来的复杂度和成本时可以只做异地备份,不做异地多活
- 业务中断后对用户影响很大的系统需要做异地多活
- 业务规模很大,中断后影响收入的系统需要做异地多活
三、架构模式
根据地理位置上的距离分为同城异区、跨城异地、跨国异地3种架构模式
1、同城异区
- 定义:将业务部署在同一个城市不同区的多个机房
- 优缺点:设计复杂度非常低、成本相对较低、极端灾难无法应对
- 应用场景:应对机房级别故障的最优架构
2、跨城异地
- 定义:业务部署在不同城市的多个机房,而且距离最好要远一些
- 优缺点:可以有效应对范围较大的极端灾难、架构复杂度很高
- 应用场景:对数据一致性要求不那么高,或者数据不怎么改变,或者即使数据丢失影响也不大的业务
3、跨国异地
- 定义:业务部署在不同国家的多个机房
- 优缺点:不是真正意义的多活、适合特殊类型业务
- 应用场景:为不同地区的用户提供服务、只读类的业务
四、跨城异地架构的设计技巧
异地多活的本质:通过异地的数据冗余,来保证在极端异常的情况下业务也能够正常提供给用户,异地多活架构设计的核心是数据同步
设计核心思想:采用多种手段,保证绝大部分用户的核心业务异地多活
1、技巧一:保证核心业务的异地多活
- 不要陷入『保证所有业务都能“异地多活”』的思维误区
- 识别核心业务,优先实现核心业务的异地多活架构
2、技巧二:保证核心数据最终一致性
- 不要陷入『所有数据都实时同步』的思维误区
- 物理距离导致无法实现数据快速同步的问题是无解的,只能尽量减少影响
- 尽量减少机房距离、尽量减少数据同步、只保证最终一致性
3、技巧三:采用多种手段同步数据
- 不要陷入『只使用存储系统的同步功能』的思维误区
- 多种手段配合存储系统的同步来使用,或者不采用存储系统的同步方案
4、技巧四:只保证绝大部分用户的异地多活
- 不要陷入『我要保证业务 100% 可用』的思维误区
- 异地多活也无法保证 100% 的业务可用
- 可以采取一些措施进行安抚或者补偿受影响的用户
五、跨城异地多活架构的设计流程
1、第一步:业务分级
- 按照一定的标准将业务进行分级,挑选出核心的业务
- 分级标准:访问量大的、核心业务、产生大量收入的
2、第二步:数据分类
- 对核心业务相关的数据进一步分析,识别所有的数据及数据特征
- 常见数据特征分析纬度:数据量、数据唯一性、实时性、可丢失性、可恢复性
3、第三步:数据同步
- 根据不同的数据设计不同的同步方案
- 常见数据同步方案:存储系统同步、消息队列同步、重复生成
4、第四步:异常处理
- 假设在出现同步延迟、数据丢失、数据不一致等问题时,系统将采取什么措施来应对
- 目的是避免整体业务不可用、在问题恢复后修正异常数据、安抚用户弥补损失
- 常见异常处理措施:多通道同步、同步和访问结合、日志记录、用户补偿
网友评论