CAP theorem distributed Erlang system不可能同时提供以下三种保证:
分布式Erlang系统可以支持零,一个或两个保证。
使用Erlang和OTP,如何实现每项保证?大多数分布式Erlang应用程序为更高级别的A和P做出实际选择,并满足“最终一致性”。似乎Erlang本身旨在支持分布式(P),容错(A),软实时,不间断的应用程序。
编程语言(Erlang),运行时系统(ERTS)和库集(OTP)是为构建分布式容错应用程序而设计的;我如何做定义分布式容错应用程序的三件事?
答案 0 :(得分:5)
为清晰起见而已编辑
这取决于您的应用程序的设计,而不是您实现它的平台。您可以使用几乎任何语言或平台组合来实现任何2个保证。
答案 1 :(得分:3)
我发现的一个非常好的例子是Riak,一个基于亚马逊Dynamo并使用Erlang和OTP构建的分布式键值存储。 tunable CAP controls允许您动态“选择”您的一致性和可用性级别;它选择关注CAP的A和P,这使它最终保持一致。 Riak是开源的,在线上有很多关于其实现的好文章。
另一个很好的例子是Dynomite,PowerSet的Dynamo-clone-in-Erlang。尽管该项目已经停止了一段时间,但它仍然是如何构建Dynamo克隆的有用功能设计文档。
这两个项目本身基于亚马逊的Dynamo,这是一个可递增扩展,高可用性的键值存储系统。该技术旨在为用户提供折衷成本,一致性,耐用性和性能的能力,同时保持高可用性。这篇论文很好读。
答案 2 :(得分:0)
Erlangs的力量应该是选择A& P,但与任何系统一样,可以选择任意两个或更少。这部分是由于erlang编程模型与通过消息传递的所有通信。如果您使用良好的Erlang样式,则不要使用共享内存在进程之间进行通信。
答案 3 :(得分:-1)
我认为这个定理应该仅考虑一层。什么是图层?它类似于OSI-ISO层,但适用于数据库:应用程序/数据库,操作系统,磁盘/硬件。在一层中不能满足所有CAP条件。 Erlang / OTP在应用层运行,所以用Erlang覆盖其中2个(你可以选择,因为Erlang的灵活性),最后一个覆盖OS(即文件系统)或硬件层(raid)。