cap原理:分布式系统的三个特性(一致性、可用性、分区容错性)不能同时满足
- 一致性(consistency):分布式系统中数据在多个节点冗余存储,从任意节点读取数据,总能读取最新的数据
- 可用性(avaliable):分布式系统在任何时刻都能正常响应
- 分区容错性(partition):发生网络分区(如网络故障、丢包等)时,系统仍可以正常工作
分布式系统中,网络分区不可避免,分区容错性需要满足,要在一致性、可用性之间做出选择
- ca:同时满足一致性、可用性,单节点部署时不存在网络分区,如关系型数据库
- cp:同时满足一致性、分区容错性,故障期间不可用,如redis集群、mongoDB集群
- ap:满足可用性、分区容错性,从不同节点可能会读到不一致的数据,如dynamoDB集群
base理论:牺牲部分一致性,保证系统可用,但最终会保持一致
- 基本可用:系统出现故障时,允许牺牲部分可用性(如响应时间延长、服务降级等)
- 软状态:在可容忍的一段时间内,允许系统的不同节点数据不一致,系统正常对外服务
- 最终一致性:经过一段时间数据同步完成后,不同节点之间的数据保持一致
可用性计算公式
- # 故障时间计算
- 可用性 = 平均正常工作时间/(平均正常工作时间时间+平均故障时间)
-
- # 请求数计算:故障时间难于统计,一般用请求数计算可用性
- 可用性 = 正常请求数/(增长请求数+异常请求数)
可用性分级:关键业务、核心业务的可用性一般要达到极高可用性(99.999%及以上)
冗余部署
- # 服务冗余
- 服务器数量按照满足最小性能要求数量的1.5倍部署,
- 如果按照最小数量部署,剩余的服务器可能会超负荷运行,容易故障
- 冗余部署后,可将流量切换到备份的服务器,不使服务器超负荷运行
-
- # 数据冗余备份
- 数据库如mysql使用双主部署,避免出现单点故障,导致服务不可用
限流降级
- # 服务降级
- 远程服务调用出现故障,需要进行服务降级,避免一个服务故障导致其他服务不可用
-
- # 服务限流
- 需要对服务的最大流量限制,避免超负荷运行
-
- # 线程隔离
- 与主业务无关的逻辑(如日志等)单独处理,避免出错后对主业务造成影响