Dan*_*Dan 6 distributed-computing paxos
我是分布式系统的新手,我正在读"简单的Paxos".它创造了很多喋喋不休,我正在考虑性能影响.
假设您正在构建一个全球分布式数据库,其中有几个小型集群位于不同的位置.最小化跨站点通信量似乎很重要.
你肯定需要做出哪些决定才能达成共识?我唯一想到的就是决定是从网络添加还是删除一个节点(或一组节点?).这似乎是矢量时钟工作所必需的.另一个我不太确定是在决定写入同一位置的命令,但是这应该由一位通过Paxos选出的领导者完成吗?
避免让系统中的所有节点一起做出决定会很好.每个本地群集中的一些节点是否可以参与跨群集决策,并且所有本地节点都使用本地Paxos进行通信以确定跨站点问题的本地答案?假设网络未饱和,延迟将是相同的,但跨站点网络流量将更轻.
假设您可以沿着行拆分数据库的表,并将每个行子集分配给节点的子集.在系统中的所有机器上使用Paxos选择一组节点来包含数据的每个子集是不正常的,然后只针对处理该数据子集的所有操作在这些节点之间运行Paxos?
一个包罗万象:是否还有其他任何与设计相关或算法优化的人来解决这个问题?
好问题,好的见解!
它创造了很多喋喋不休,我正在考虑性能影响.
假设您正在构建一个全球分布式数据库,其中有几个小型集群位于不同的位置.最小化跨站点通信量似乎很重要.
你肯定需要做出哪些决定才能达成共识?我唯一想到的就是决定是从网络添加还是删除一个节点(或一组节点?).这似乎是矢量时钟工作所必需的.另一个我不太确定是在决定写入同一位置的命令,但是这应该由一位通过Paxos选出的领导者完成吗?
是的,性能是我的团队在实践中看到的问题.我们维护一致的数据库和分布式锁管理器; 和orignally使用Paxos进行所有写入,一些读取和集群成员资格更新.
以下是我们所做的一些优化:
通过这些优化,我们仍然在为性能而受到伤害,因此我们将服务器分为三层.底层是Paxos; 它做你的建议; 即 仅决定中间层的节点成员资格.中间层是一个定制的高速链共识协议,它对数据库达成共识和排序.(顺便说一句,链式共识可以被视为垂直Paxos.)顶层现在只维护数据库/锁和客户端连接.这种设计导致了几个数量级的延迟和吞吐量的提高.
避免让系统中的所有节点一起做出决定会很好.每个本地群集中的一些节点是否可以参与跨群集决策,并且所有本地节点都使用本地Paxos进行通信以确定跨站点问题的本地答案?假设网络未饱和,延迟将是相同的,但跨站点网络流量将更轻.
假设您可以沿着行拆分数据库的表,并将每个行子集分配给节点的子集.在系统中的所有机器上使用Paxos选择一组节点来包含数据的每个子集是不正常的,然后只针对处理该数据子集的所有操作在这些节点之间运行Paxos?
这两个让我想起了Google Spanner的论文.如果你跳过关于时间的部分,它基本上是全局2PC和碎片上的Paxos.(IIRC).