了解分布式理论之CAP理论笔记

914efc5c66474a5e.svg

CAP理论:

  • 一致性(Consistency): 每次读取收到的都是最近写的或者是一个错误
  • 可用性(Availability):每次请求收到一次(非错误的)响应——不用保证是包含最近写的。
  • 分区容错(Partition tolerance):系统持续提供操作,尽管犹豫结点之间的网络晕因,丢失(或延迟)任意数量的消息。

特定情况下,CAP理论意味着存在网络分区的情况,那么得在一致性和可用性之间选择一个。这里的一致性与数据库事务中定义的一致性是很不一样的。

分布式系统不能完全免于发生网络问题的,因此,通常来说得承受住网络分区。存在分区的情况下,那么就得从一致性或可用性中选择一个,当选择一致性而不是可用性的时候,系统由于网络问题不能保证特定的信息是最新的则返回错误或超时。当选择可用性而不是一致性的时候,系统总是执行查询并且尝试返回最近版本的信息,即使由于网络分区问题,信息不能保证的最新的的情况下。

在不发生网络问题的情况下,也就是说,当分布式系统正常运行的时候,可用性和一致性都能够被满足。

CAP经常得误解,仿佛总是得选择放弃三项保证之一,既保证可用性,一致性和网络分区。事实上,只有当网络分区或失败发生时,才会真正地在一致性和可用性二者之间进行选择。其他时候,根本不用去权衡。

根据传统的原子性(Atomic)、一致性(Consistency)、独立性(Isolated)以及持续性(Durability)而设计的数据库系统,比如RDBMS选择了一致性而不是可用性,然而系统设计中是围绕基本可用性(Basically Available)、软状态(Soft state)和最终一致性(Eventual consistency)来设计的,例如NoSQL设计中,选择了可用性而不是一致性。

由此总结,CAP理论论述的是在分布式系统中,存在网络分区的情况,需要在一致性和可用性之间进行二选一。

参考

CAP 理论