分布式系统基础
#为什么需要分布式系统
单点故障,分布式增加冗余提高系统的可用性
#分布式系统存在的问题
#CAP 定理
对于一个分布式计算系统来说,不可能同时满足以下三点:
- 一致性 (Consistency): 所有节点都能够访问到同一份最新的数据副本或者错误。
- 可用性 (Availability): 每次请求都能获取到非错误响应,但不保证获取的数据为最新数据。
- 分区容错性 (Partition tolerance): 在节点之间的网络通信出现故障的情况下,系统仍能继续运行。
分析:
- 网络故障必定存在,如果一发生网络分区整个系统就不可用,是没有意义的。因此分布式系统必须首先要保证 P 性质,接下来有两个选择: C 或者 A。
- 如果选择 C 一致性,则当网络分区无法保证数据是最新的时候,系统就会返回错误或者超时,即不可用。
- 如果选择 A 可用性,则系统始终尝试返回信息的最新版本,但是无法保证是最新的。
#BASE (碱) 语义
分布式系统的一种用于实现高可用性的一致性模型,弱化一致性的承诺,保证可用性,因此属于 AP 的一种拓展。
- 基本可用 (Basically Available): 读写操作尽可能是可用的,但是不保证一致性 (在冲突的情况下,写值可能不会成功; 读值可能不是最新的)
- 软状态 (Soft-state): 没有强一致性保证。
- 最终一致性 (Eventually consistent): 系统运行足够长的时间后,多个节点最终会达到一致。
#C 与 A 如何取舍
- 选择一致性 (CP): 对一致性要求较高的系统,例如:
传统 ACID 数据库,服务注册中心 (Etcd, Zookeeper, Nacos),HBase,金融系统,银行系统,与钱相关的
- 选择可用性 (AP):
Eureka,Redis 集群,Nacos 配置中心