在面向权限的区块链中使用了不同的共识算法,例如
哪些共识算法是同步和异步的,为什么?请详细说明。 谢谢
答案 0 :(得分:2)
*我不是分布式系统专家,我仍然会尽力回答您的问题。
在分布式系统中,人们使用一个基础模型,该模型假设一些有关时间的属性(“此消息到达需要多长时间?”)和有关故障类型的某些属性(“协议中的节点如何做”错了吗?”)。
通常在分布式系统中使用三种主要的时序模型:同步模型,异步模型和部分同步模型。这些模型中的每一个都对在协议执行的给定回合中节点之间的消息交换之间可能发生的时间长度(“等待时间”)做出一些保证。该分类很重要,因为在分布式设置中,单个节点无法区分发生故障的对等节点和仅花费较长时间进行响应的对等节点。
在同步模型中,从节点发送消息到可以确定接收节点听到消息之间的时间上存在一些最大值(“上限”)T。您还对节点之间速度的相对差异有一个上限P(因此您可以考虑处理器速度较慢的机器)。
在异步模型中,我们同时消除了上限T和P。消息可能需要很长时间才能到达对等节点,并且每个节点都可能需要任意时间来响应。当我们说任意时,我们包括“无限”,这意味着某些事件永远需要花费。
部分同步的模型结合了以下两种情况:T和P存在上限,但是协议设计者不知道它们,并且任务是根据这一事实设计仍可以达成共识的机制。实际上,考虑到现代网络/机器的现实特征(消息通常会到达它们要去的地方)以及使用诸如超时之类的策略来指示节点何时应重试发送消息,协议实现者可以实现类似于此模型的系统。
记住以上事实,Paxos和Raft都属于部分同步模型。
拜占庭将军的问题是任何分布式计算机系统网络都面临的经典问题。目的是在存在恶意节点的情况下在所有参与者节点上保持相同状态。
在分布式系统中,您经常需要处理一系列棘手的问题。
Things fail. You can never count on anything being reliable. Even if you have
perfectly bug-free software, and hardware that never breaks, you’ve still got
to deal with the fact that network connections can break, or messages within a
network can get lost, or that some bozo might sever your network connection
with a bulldozer. (That really happened while I was at Google!)
Given (1), you can never rely on one copy of anything, because that copy might
become unavailable due to a failure. So you need to keep multiple copies, and
those copies need to be consistent – meaning that at any time, all of the
copies agree about their contents.
There’s no way to maintain a single completely consistent view of time between
multiple computers. Due to inconsistencies in individual machine performance,
and variable network delays, variable storage latency, and several other
factors, there’s no canonical way of saying that for two events X and Y, “X
happened before Y”. What that means is that when you try to maintain a consistent set of data, you can’t just say “Run all of the events in order”, because while one server maintaining one copy might “know” that X happened before Y, another server maintaining another copy might be just as certain that Y happened before X.
简而言之,一切都可能随时失败;失败后,参与者可以恢复并重新加入系统;系统的任何部分都不会采取主动对抗的方式(拜占庭式故障可能是由于恶意软件引起的)。
为了解决这个问题,我们有共识算法,目的是使所有参与者都同意相同的状态。 共识涉及多个服务器就价值达成一致。一旦他们对价值做出决定,该决定就是最终决定。当大多数服务器可用时,典型的共识算法会取得进展。 Paxos和Raft是共识算法,可以解决公用或专用分布式网络中的拜占庭式通用问题。