Consistency [kənˈsɪstənsi] 一致性
Availability [əˌveɪlə'bɪləti] 可用性
Partition Tolerance [pɑːˈtɪʃn ˈtɒlərəns] 分区容错性
场景:
现有2个银行分别是中国区银行和美国区银行,总资产100RMB的用户在中国区银行取款20RMB那么中国区银行余额80RMB,美国区银行必须接收到用户在中国区银行取款信息才能同步用户在美国区银行的余额也是80RMB。
分区容错性:
当美国区银行因为通讯原因没有收到用户在中国区银行的取款信息那么用户在美国区银行查询余额显示100RMB。
一致性:
为了保证用户在美国区银行查询到的余额是80RMB,那么就必须当用户在中国区银行取款20RMB的时候锁住用户在美国区银行的账号,当美国区银行同步到用户在中国区银行的取款信息后释放锁。这样用户在美国区银行查询到的余额也是80RMB。
可用性:
不考虑美国区银行是否同步了用户在中国区银行的取款信息,当用户在美国区银行查询余额的时候如果同步了取款信息查询到的就是80RMB,如果没有同步取款信息查询到的就是100RMB。
说明一致性和可用性是不可能同时存在的,分布式系统要么采用CP亦或是AP,但是如上的银行资金交易肯定是一致性高于可用性。
举一个采用AP场景的例子,发布一张网页到 CDN,多个服务器有这张网页的副本。后来发现一个错误,需要更新网页,这时只能每个服务器都更新一遍。一般来说,网页的更新不是特别强调一致性。短时期内,一些用户拿到老版本,另一些用户拿到新版本,问题不会特别大。当然,所有人最终都会看到新版本。所以,这个场合就是可用性高于一致性。