CAP 定律
衡量分布式系统的性能有三个指标,即:
- Consistency(一致性)
分布式系统的所有节点上,同一时刻,对用户来说一次写操作之后的多次读操作是否会得到一致的响应。该指标是衡量数据在多节点上的一致性。 - Availability(可用性)
对用户请求的实时成功响应的要求,该指标是衡量系统响应能力。 - parition tolerance(分区容错性)
以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
CAP 定律是说你不能设计一个分布式系统同时完美的满足上面三个指标。而分布式系统的分区容错性总是存在的,所以系统设计需要在C和A中权衡。根据对一致性和可用性的不同要求,有三种场景:
1)Weak 弱一致性:当你写入一个新值后,读操作在数据副本上可能读出来,也可能读不出来。比如:某些cache系统,网络游戏其它玩家的数据和你没什么关系,VOIP这样的系统,或是百度搜索引擎(呵呵)。
2)Eventually 最终一致性:当你写入一个新值后,有可能读不出来,但在某个时间窗口之后保证最终能读出来。比如:DNS,电子邮件、Amazon S3,Google搜索引擎这样的系统。
3)Strong 强一致性:新的数据一旦写入,在任意副本任意时刻都能读到新值。比如:文件系统,RDBMS,Azure Table都是强一致性的。