Distributed computing 避免在分布式系统中过度使用协商一致协议
我是分布式系统的新手,我正在阅读“简单Paxos”。它会引起很多闲聊,我正在考虑性能影响 假设您正在构建一个全球分布的数据库,其中有几个位于不同位置的小型ish集群。将跨站点通信量降至最低似乎很重要Distributed computing 避免在分布式系统中过度使用协商一致协议,distributed-computing,paxos,Distributed Computing,Paxos,我是分布式系统的新手,我正在阅读“简单Paxos”。它会引起很多闲聊,我正在考虑性能影响 假设您正在构建一个全球分布的数据库,其中有几个位于不同位置的小型ish集群。将跨站点通信量降至最低似乎很重要 什么是你绝对需要使用共识的决定?我唯一能确定的是决定是否从网络中添加或删除一个节点(或一组节点?)。这似乎是矢量时钟工作所必需的。另一个我不太确定的问题是决定向同一位置写入的顺序,但这应该由通过Paxos选出的领导人来完成吗 最好避免让系统中的所有节点一起做出决策。每个本地集群上的几个节点是否可以参
还有一个要点:人们还有没有其他与设计相关的或算法优化来解决这个问题?好问题,好见解 它会引起很多闲聊,我正在考虑性能影响 假设您正在构建一个全球分布的数据库,其中有几个位于不同位置的小型ish集群。将跨站点通信量降至最低似乎很重要 什么是你绝对需要使用共识的决定?我唯一能确定的是决定是否从网络中添加或删除一个节点(或一组节点?)。这似乎是矢量时钟工作所必需的。另一个我不太确定的问题是决定向同一位置写入的顺序,但这应该由通过Paxos选出的领导人来完成吗 是的,我的团队在实践中也发现了性能问题。我们维护一个一致的数据库&分布式锁管理器;最初使用Paxos进行所有写入、一些读取和集群成员身份更新 以下是我们所做的一些优化:
- 节点尽可能将转换发送给杰出的提议者/学习者(通过Paxos选出),该提议者/学习者
- 决定写入顺序,以及
- 在等待前一个实例的响应时进行批处理转换。(但配料过多也会造成问题。)
- 我们曾考虑过使用multi-paxos,但最终我们做了一些更酷的事情(见下文)
最好避免让系统中的所有节点一起做出决策。每个本地集群上的几个节点是否可以参与跨集群决策,并且所有本地节点都可以使用本地Paxos进行通信,以确定跨站点问题的本地答案?假设网络未饱和,延迟将是相同的,但跨站点网络流量将轻得多 假设您可以沿行分割数据库的表,并将行的每个子集分配给节点的子集。在系统中的所有机器上使用Paxos选择一组节点来包含数据的每个子集,然后针对处理该数据子集的所有操作仅在这些节点之间运行Paxos,这正常吗
这两个人在一起让我想起了过去。如果你跳过关于时间的部分,它基本上是在全局范围内进行的,而Paxos是在碎片上进行的。(IIRC.太好了,这正是我想学的!扳手纸也很好读。顺便说一下,我很难找到关于“链共识协议”的信息-你有链接吗?(我读过关于垂直Paxos的文章,但我不想偶然错过一些东西。)可以使用zookeeper作为服务(就像Google使用chubby作为服务)来处理核心配置和最小共享元数据的一致性。正如您所建议的,它可以是集群成员身份,也可以是在松散的服务器联盟(而不是紧密的集群)中的哪个服务器上处理哪些业务密钥。有关标准模式的信息,请参阅,从中可以围绕强一致的核心锁定/一致性服务构建更松散的处理联盟。