CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
如上图,假设这是一个分布式服务器集群,各个服务器节点之间的网络本来应该是畅通的,且每台服务器保存的数据都是自己特有、独一无二的。
假如发生某些故障,导致(如下图):某些服务器在集群中失去了联系,此时正常运转和故障机器之间就形成了分区。
此时诞生了不同分区,而由于每台服务器都保存的是自己特有的数据,所以失联服务器上的数据就无法访问了,此时分区容忍性(Partition tolearance)就是 0,是不可容忍的。
解决这种服务器一旦失联,数据仍然可以访问的重要策略就是,replication副本策略,就是数据复制多份,然后保存在不同的服务器上。(如下图)
显然,副本数绝越多,某台服务器发生故障时,其上的数据就越可能仍然访问,就越不容易出现失联分区,也就是分区容忍性越高。但是存储多个副本显而易见会带来新的问题,那就是不同服务器上的数据副本的同步问题(黑色线条表示数据同步关系),即一致性(Consistency)问题。
分区容忍度越好,一致性的压力就越大。为了提高一致性,就又带来了可用性(Availability)问题,可用性可以简单理解为好不好用,能不能及时相应服务,当服务器需要花费大量时间同步数据的时候,读写数据的响应速度自然下降,因此可用性就会降低。实现一致性(Consistency)的典型机制有:Master-Slave主从同步、Paxos算法等。
下面先说一说主从同步机制:
- Master接受写请求
- Master复制日志至slave
- Master等待,直到所有从服务器返回确认。
主从同步机制是一个强一致性机制,要求很高:如果Master故障、某些服务器因为网络延迟没有及时返回ack等,都会导致同步失败,过长的等待时间,显然降低了可用性(Availability)。当然还有一些改进措施,可以回头再交流。下一步会回来补充Paxos算法,现在工作忙,时间不够。
总的来讲各自的特征关键词如下:
C数据一致性:通信、同步、等待确认。
A可用性:相应时间、执行效率
P分区容忍度:复制、副本