【发布时间】:2011-04-20 12:40:48
【问题描述】:
对于CAP theorem,distributed Erlang system 不可能同时提供以下所有三个保证:
- 一致性(所有 Erlang 运行时或节点,同时看到相同的数据)
- 可用性(节点故障不会阻止幸存者继续运行)
- 分区容限(系统在任意消息丢失的情况下继续运行)
分布式Erlang系统可以支持零、一个或两个的保证。
使用 Erlang 和 OTP,如何实现每个保证?大多数分布式 Erlang 应用程序为更高级别的 A 和 P 做出了实际的选择,并满足于“最终一致性”。似乎 Erlang 本身旨在支持分布式 (P)、容错 (A)、软实时、不间断的应用程序。
编程语言 (Erlang)、运行时系统 (ERTS) 和库集 (OTP) 旨在构建分布式容错应用程序;我该如何做定义分布式容错应用程序的三件事?
【问题讨论】:
-
您更新后的问题就像是在说:“我有一把锤子。我如何建造房屋、学校或寄宿学校?”您将获得的最佳答案将解释 CAP 理论,但实施细节远过于复杂,无法给出一组简单的说明。
-
我明白你的意思,但我认为这更像是在说:“我有一种编程语言、运行时系统和许多用于构建分布式容错应用程序的库 (Erlang/OTP)。我该如何完成定义分布式容错应用程序的三件事?”
-
我在 Erlang 中没有看到这个 Consistency 项目符号。仅提及 mnesia 及其由于网络延迟引起的问题。很多时候,我看到一个集群构建在处于随机状态的 FSM 之上。分区 T. - 相同。尝试合并状态或 mnesia(拆分表),通常是通过选择一个主节点并在加入节点后转储另一半来完成。矢量时钟很容易实现。我最近这样做了,但在使用真实数据的测试中,它们在合并之前就爆炸了。