【问题标题】:Hazelcast (Java) and ETCD (golang) differences/similarities?Hazelcast (Java) 和 ETCD (golang) 的区别/相似之处?
【发布时间】:2015-09-09 17:50:43
【问题描述】:

现在我们构建了一个实时分析系统,它应该是高度分布式的。我们计划使用分布式锁和计数器来确保数据的一致性,并且我们需要某种分布式映射来知道哪个客户端连接到哪个服务器。 我之前没有分布式系统方面的经验,但我认为我们有两个选择:

  1. Java+Hazelcast

  2. Golang+ETCD

但是在主题上下文中,彼此的优缺点是什么?

【问题讨论】:

  • 虽然这里离题了,但我要指出,etdc 和 hazelcast 是非常不同的东西,比较它们可能没有用。
  • 嗨,吉姆B!我是这类事情的新手,所以我询问了这项技术的差异/相似之处,所以如果您知道答案,请与我分享您的知识。谢谢!
  • 我不知道为什么人们不赞成这个。不应该在 QA 论坛上对缺乏分布式系统知识的人投反对票。

标签: java go distributed hazelcast etcd


【解决方案1】:

Hazelcast 和 etcd 是两个非常不同的系统。原因是CAP theorem

CAP 定理指出,任何分布式系统都不可能具有一致性、可用性和分区容错性。分布式系统通常更接近 CA 或 CP。 Hazelcast 是一个 AP 系统,而 etcd(作为 Raft 实现)是 CP。因此,您的选择是在一致性和可用性/性能之间。

总的来说,Hazelcast 的性能要好得多,并且能够比 Raft 和 etcd 处理更多的故障,但代价是潜在的数据丢失或一致性问题。 Hazelcast 的工作方式是将数据分区并将数据片段存储在不同的节点上。因此,在一个 5 节点集群中,键“foo”可能存储在节点 1 和 2 上,而 bar 可能存储在节点 3 和 4 上。您可以通过 Hazelcast 和 map 控制 Hazelcast 复制数据的节点数配置。但是,在网络或其他故障期间,您可能会在 Hazelcast 中看到旧数据甚至丢失数据。

另外,Raft 和 etcd 是一个单领导者高度一致的系统,将数据存储在所有节点上。这意味着它不适合存储大量状态。但即使在网络故障期间,etcd 也可以保证您的数据保持一致。换句话说,您永远不会看到旧的/陈旧的数据。但这是有代价的。 CP 系统要求集群的大部分都处于活动状态才能正常运行。

一致性问题可能与基本键值存储相关,也可能不相关,但它可能与锁极为相关。如果您希望您的锁在整个集群中保持一致 - 这意味着即使在网络或其他故障期间也只有一个节点可以持有锁 - 请不要使用 Hazelcast。因为 Hazelcast 牺牲了一致性以支持可用性(再次参见 CAP 定理),网络故障完全有可能导致两个节点相信可以免费获取锁。

或者,Raft 保证在网络故障期间只有一个节点将保持 etcd 集群的领导者,因此所有决策都通过该节点做出。这意味着 etcd 可以保证它始终拥有一致的集群状态视图,并且可以确保像锁这样的东西只能由单个进程获得。

确实,您需要考虑您在数据库中寻找的内容,然后去寻找它。 CP 和 AP 数据存储的用例大不相同。如果您想要存储少量状态、一致锁、领导选举和其他协调工具的一致性,请使用 ZooKeeper 或 Consul 等 CP 系统。如果您希望以潜在的一致性成本获得高可用性和性能,请使用 Hazelcast、Cassandra 或 Riak。

来源:我是a Raft implementation的作者

【讨论】:

  • 非常感谢,您的回答是我进一步深入的一个很好的起点。
  • 我相信非移动链接(en.wikipedia.org vs. en.m.wikipedia.org)在这里(和大多数地方?)是首选。前者总是将人们带到移动版本,而后者(我认为)会根据需要(取决于客户端设置等)重定向到移动版本,但将其他人发送到完整页面。
  • 非常清晰的解释。非常感谢!
  • 根据最近的发展做一点澄清:从 Hazelcast IMDG 3.12 版开始,Hazelcast 现在提供 Java 并发 API 的可线性化和分布式实现,如 Lock、Semaphore 等。它们构建在Raft 共识算法和关于 CAP 原则的 CP。
【解决方案2】:

虽然这个问题现在已经超过 3 年了,但我想通知后续读者,Hazelcast 从 3.12 开始具有用于其原子和并发 API 的基于 CP 的子系统(基于 Raft)。有计划在不久的将来将 CP 推广到更多 Hazelcast 数据结构。让 Hazelcast 用户在 AP 和 CP 问题之间做出真正的选择,并允许用户将 Hazelcast 应用于以前由 etcd 和 Zookeeper 等系统处理的新用例。

你可以在这里阅读更多...

https://hazelcast.com/blog/hazelcast-imdg-3-12-beta-is-released/

【讨论】:

    猜你喜欢
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多