根据定理,分布式系统只能满足三项中的两项而不可能满足全部三项。
所有单机版的系统都属于这个范畴,例如MySQL、memcached、redis。
由于数据库之间没有互相通信,并不依赖彼此的存在,所以分区可容忍性依旧没有破坏。
这种情况下CAP各项指标虽然没有提升,但好处是:
这种分布式的方式常用于:
由于上述方案是强一致性( C )的,这种应用场景常见于金融系统,这种这方面典型的代表有:
由于大多数互联网公司的需求不是要求强一致性( C ), 所以通过放弃一致性,达到更高的可用性( A )和分区可容忍性 ( P )成了目前市面上大多数NoSQL数据库的核心思想。
这方面典型的代表还有:
有没有可能将CAP同时提升呢?答案是:Sure, ofcourse.
我们可以通过用更高可靠性的服务器、更可靠的网络设备达到CAP同时提升。
但注意,只是提升,不是完全解决。
数据库的事务有ACID的保证。
后来,随着NoSQL的兴起,技术界又提出了BASE的概念:
Basically Availble --基本可用
支持分区失败(Sharding碎片划分数据库),出了问题服务仅降级(部分不可用)。
Soft-state --软状态/柔性
事务"Soft state" 可以理解为"无连接"的, 而 "Hard state" 是"面向连接"的。 软状态就是可以有一段时间不同步,异步。
Eventual Consistency --最终一致性
最终数据是一致的就可以了,而不是时时一致。
合起来就是BASE。
比较有意思的是:在英语里ACID是酸的意思;BASE也有碱的意思。
网络编程中的CAP & 有趣的存储框架(关系型、NoSQL)全图
原文:http://www.cnblogs.com/charlesblc/p/6341505.html