containers - ELI5 : How etcd really works and what is consensus algorithm

标签 containers cluster-computing coreos etcd

我很难掌握etcd(在CoreOS中)的实际功能,因为所有这些“分布式键值存储”对我来说似乎都是无形的。进一步阅读etcd,它深入研究了Raft共识算法,然后使它变得难以理解。

假设如果集群系统没有etcd,会发生什么情况?

感谢您的时间和精力!

最佳答案

作为没有CoreOS经验的人,使用etcd构建分布式系统,我想可以对此有所了解。

etcd的想法是给出一些非常基本的原语,这些原语可用于构建各种分布式系统。这样做的原因是分布式系统从根本上来说很难。大多数程序员并没有真正克服困难,仅仅是因为有更多的机会来学习单系统程序。自从云计算使分布式系统的构建和实验成本降低以来,这种情况在最近5年才真正开始改变。即使这样,there's a lot to learn

分布式系统中最大的问题之一是共识。换句话说,保证系统中的所有节点都同意一个特定的值。现在,如果硬件和网络是100%可靠的,那将很容易,但是当然那是不可能的。设计一种算法以围绕共识提供一些有意义的保证是一个非常困难的问题,并且很多聪明的人已经花了很多时间来解决这个问题。 Paxos是以前最先进的算法,但是很难理解。 Raft试图提供类似的保证,但对于普通程序员而言却更加容易接近。但是,即使如此,正如您所发现的,了解它的操作细节和应用程序也不是一件容易的事。

关于etcd在CoreOS中专门用于什么方面,我无法告诉您。但是我可以肯定地说,集群中所有机器需要共享和同意的任何数据都应该存储在etcd中。相反,节点(或节点子集)可以自行处理的任何内容都应着重而不是存储在etcd中(因为这会导致在所有节点上进行通信和存储的开销)。

使用etcd,可能有大量相同的机器自动协调,选举领导者并保证其键值存储区中数据的相同历史记录,从而:

  • 没有etcd节点将永远不会返回大多数节点都不同意的数据。
  • 对于群集大小x,任意数量的机器> x/2可以继续运行并接受写入,即使其他机器死亡或失去连接也是如此。
  • 对于任何失去连接的计算机(例如由于网裂),即使它们将无法写入,也可以保证它们继续返回正确的历史数据。

  • 键值存储本身非常简单,没有什么特别有趣的,但是这些属性允许人们构造能够抵抗单个组件故障并可以提供合理性保证正确性的分布式系统。

    关于containers - ELI5 : How etcd really works and what is consensus algorithm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24708325/

    相关文章:

    image - 如何从 docker hub 向官方 postgres 图像添加更多功能?

    linux - CoreOS 的 Docker 和 Rocket 有什么区别?

    cluster-computing - 将节点添加到 Kubernetes 中的现有集群

    python - 如何从容器中执行主机的 Docker 命令?

    linux - 如何让 docker run 将目录从客户端机器带到主机容器?

    c++ - 用一个迭代器迭代 vector 的 vector

    Hadoop 用于处理非常大的二进制文件

    java - 如何开发(本地)和部署Storm Topology(远程)?

    docker - 如何在 Mesos 或 CoreOS 中配置 MariaDB 和 Redis 的高可用集群

    linux - 使用 Ansible 在 Kubernetes 集群中实现证书轮换功能