CAP定理是红鲱鱼吗?

Aar*_*ers 2 distributed-computing

我被告知我必须放弃大型分布式系统中的事务保证,因为CAP定理说我不能拥有它.

我认为这是错误的,原因如下:

  • 互联网路由非常可靠.
  • CAP定理仅适用于两组活机无法通信的网络分区.
  • 几乎所有真正的网络分区都包含灾难性故障或其中一个分区非常小而另一个非常大并且小分区可以关闭的情况.
  • 机器故障本身不构成网络分区.

因此,我可以假设,出于实际目的,我可以有事务行为,但我试图保证小分区检测到它们已断开连接并关闭或以某种降级模式运行,直到修复连接为止.

更正?评论?火焰?


参考文献:

Dar*_*der 7

CAP定理已由Nancy Lynch等人证明.在麻省理工学院实验室.

你的假设不好.是的,您可以在分布式系统上进行交易,但是您必须等待所有交易.当你受到可用性的影响时.因此,您可以具有一致性和部分容差,但不具备可用性.

在另一种情况下,您可以具有可用性和部分容差,但没有一致性,例如MongoDB或Cassandra(配置了最终一致性).在这种情况下,您可以拥有多个数据库服务器,但您的数据将无法立即在所有服务器上使用.您会受到一致性的影响,但您可以获得可用性和部分容忍度.

最后一种情况是最简单的:您具有一致性和可用性,但没有部分容忍度.想想单个数据库服务器.

关于你的观点:

  • 互联网路由非常可靠.

无缝可靠.

  • CAP定理仅适用于两组活机无法通信的网络分区.

CAP定理适用于任何分布式系统.

其他两点真的没有多大意义.

还有一些其他教授声称CAP是不完整的,而且还有更多,例如延迟.但CAP定理非常有意义.

还有"BASE"定理(基本可用,软状态和最终一致性).许多NoSQL数据库都赞成这个定理.

查看关于CAP定理NoSQL的博客.

  • 你不能忽视任何失败,即使它是非常小的或灾难性的. (3认同)
  • 仅仅因为存在无法证明的关于失败的真理并不意味着我们应该忽略那些可以并且已经被证明的事实. (2认同)
  • 我不认为CAP定理是一个定理.Brewer的猜想并没有足够明确的证明.请参阅:[CAP定理不是定理](http://blog.franslundberg.com/2013/12/the-cap-theorem-is-not-theorem.html). (2认同)