本文是参考了维基百科。https://en.wikipedia.org/wiki/CAP_theorem
consistency(一致性) | availability(可用性) | partition tolerance(分区容错性) |
---|---|---|
每次请求都能获取到最新数据或返回错误 | 在不保证读取的数据都是最新的情况下,保证每一个请求都能获得一个非错误的响应 | 系统节点之间因为网络问题导致任意数量的信息丢失或延迟,系统仍然可操作 |
换句话说,CAP原理表达的是在出现了网络分区(网络不通,延迟)的分布式系统,必须要在consistency与availability之间选择一个。
需要注意的是CAP原理中的consistency(一致性)与数据库事务中ACID中的consistency(一致性)不是一回事,它们相差很大。
解释:
没有分布式系统能避免网络出现问题,因此网络分区是必须要容忍的。当系统出现网络分区的,那么需要在consistency和availability中选则一个。当consistency需求大于availability时,由于网络分区导致部分信息不能保证是最新的,系统将返回一个错误或网络超时;当availability的需求大于consistency的需求时,尽管不能获取最新的数据,系统将返回最近版本的信息。
在网络正常的情况下——也就是分布式系统能正常的运行的情况下——availability 和 consistency 都要得到满足。
CAP 经常被误解为在任何时候都必须要抛弃其中的一个,事实上,只有出现了网络分区的情况下才需要在consistency和availability之间选择。在其他时间没有所谓的选择、平衡,必须保证同时保证CA。
网络分区:网络出现问题,导致延迟或信息丢失。
(翻译不好,请砸砖头)