分布式系统基础

#为什么需要分布式系统

单点故障,分布式增加冗余提高系统的可用性

#分布式系统存在的问题

#CAP 定理

对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性 (Consistency): 所有节点都能够访问到同一份最新的数据副本或者错误。
  • 可用性 (Availability): 每次请求都能获取到非错误响应,但不保证获取的数据为最新数据。
  • 分区容错性 (Partition tolerance): 在节点之间的网络通信出现故障的情况下,系统仍能继续运行。

分析:

  • 网络故障必定存在,如果一发生网络分区整个系统就不可用,是没有意义的。因此分布式系统必须首先要保证 P 性质,接下来有两个选择: C 或者 A。
  • 如果选择 C 一致性,则当网络分区无法保证数据是最新的时候,系统就会返回错误或者超时,即不可用。
  • 如果选择 A 可用性,则系统始终尝试返回信息的最新版本,但是无法保证是最新的。

#BASE (碱) 语义

分布式系统的一种用于实现高可用性的一致性模型,弱化一致性的承诺,保证可用性,因此属于 AP 的一种拓展。

  • 基本可用 (Basically Available): 读写操作尽可能是可用的,但是不保证一致性 (在冲突的情况下,写值可能不会成功; 读值可能不是最新的)
  • 软状态 (Soft-state): 没有强一致性保证。
  • 最终一致性 (Eventually consistent): 系统运行足够长的时间后,多个节点最终会达到一致。

#C 与 A 如何取舍

  1. 选择一致性 (CP): 对一致性要求较高的系统,例如:

传统 ACID 数据库,服务注册中心 (Etcd, Zookeeper, Nacos),HBase,金融系统,银行系统,与钱相关的

  1. 选择可用性 (AP):

Eureka,Redis 集群,Nacos 配置中心