计算高可用
- 主备模式
主机执行所有计算任务 - 主从复制
主执行部分任务,从执行部分任务
业务高可用
1、异地多活
- 同城异区
近似一个本地机房的效果 - 跨城异地
对于数据一致性要求不高,或者数据改变少,或数据丢失影响不大可以使用 - 跨国异地
为不透明地区用户提供服务
如:亚马逊中国,亚马逊美国
2、设计技巧
- 保证核心业务的异地多活
- 核心数据最终一致性
- 异地多活理论上就不可能很快,因为这是物理定率决定的
- 采用多重手段同步数据,如消息队列方式、二次读取方式、存储系统同步方式、回源读取方式,重新生成数据方式
- 只保证绝大部分用户的异地多活
核心思想
采用多种手段,保证绝大部分用户的核心业务异地多活
3、设计步骤
- 业务分级
访问量大的业务
核心业务
产生大量收入的业务 - 数据分类
数据量
唯一性
实时性
可丢失性
可恢复性 - 数据同步
存储系统同步
消息队列同步
重复生成 - 异常处理
多通道同步
同步和访问结合
日志记录
用户补偿
4、接口级的故障应对方案
原因:内部原因(bug),外部原因(黑客攻击、秒杀、抢购等)
解决方案:和异地多活类似,优先保证核心业务,优先保证绝大部分用户
- 降级,系统后门降级(降级url),独立降级系统
丢车保帅,优先保证核心业务
如论坛90%看帖子,那么优先保证看帖功能,发帖可以停掉,还有日志上传类的辅助功能 - 熔断
就是调用一个接口服务,此时接口服务响应慢或者宕机,导致系统被拖累很慢,此时调用此接口直接返回错误信息,就叫熔断
前提:统一的API调用接口,设定一个熔断的阈值,如1分钟内30%的请求响应超过3s就熔断,需要采样统计 - 限流
只允许系统能够承受的访问量进来,超出系统访问能力的请求江北丢弃- 限流方式
- 基于请求限流
常见的有限制总量、限制时间量
如直播间,1000个用户外无法进入
阈值如何定义:可以采用性能压力测试 - 给予资源限流
如连接数、文件句柄、线程、请求队列
- 基于请求限流
- 限流方式
- 排队
排队模块
调度模块
服务模块