分布式共识的工作机制(十二)

from币乎 区块链研究员 6天前

0read

0评论

导读:分布式系统并非最新课题。科学家和工程师花了几十年的时间进行研究,而分布式系统又是重要的,如果分布式系统不先存在,区块链所做的所有贡献都不可能存在,本文详细介绍了分布式系统和共识的基础知识,通过对本文的学习,你会对分布式系统的基本概念、分布式系统的属性、在分布式系统中达成共识的意义、基本共识算法以及中本共识的重要性等有更好的理解。

接上文:分布式共识的工作机制(十一)

以下是 DLS 算法的工作原理:

一系列的回合分为"尝试" 和 "锁释放" 阶段。

  1. 每一轮都有一个提议者,从传达他们认为是正确的价值的过程开始。

  2. 如果至少 n−x 进程传达了该值,则建议者 "建议" 一个值。

  3. 当进程从提议者收到建议值时,它必须锁定该值,然后广播该信息。

  4. 如果建议方收到来自 x + 1 进程的消息,而这些消息被锁定在某个值上,则将其作为最终值提交。

DLS 是一个重大突破,因为它创造了一个新的网络假设类别,即部分同步,并证明了这一假设的共识是可能的。DLS另一个贡献是将在拜占庭和异步环境中达成共识的担忧分为两类: 安全性和活性。


安全

这是我们前面讨论过的"协议" 属性的另一个术语,其中所有无缺陷的进程都同意相同的输出。如果我们能保证安全,就能保证整个系统保持同步。我们希望所有节点都能就事务日志的总顺序达成一致,尽管可能出现故障和恶意行为者。违反安全意味着我们最终会得到两个或更多有效的交易日志。



活性

这是我们前面讨论的"终止" 属性的另一个术语,其中每个无故障节点最终决定一些输出值。在区块链设置中,"活性" 是指通过添加有效的新区块来使链不断增长。活性很重要,因为它是网络继续有用的唯一方式,否则,它将停止。

正如我们从 FLP不可能中知道的那样,在一个完全异步的系统中无法达成共识。DLS 论文认为,对实现活性条件进行部分同步假设就足以克服FLP不可能。

因此证明了算法不需要使用任何同步假设来达到安全条件。

很简单,对吧?让我们深挖一点。

请记住,如果节点没有决定某些输出值,系统就会停止。因此,如果我们做出一些同步假设 (即超时) 来保证终止,其中一个节点失败也会使系统停止,这是有道理的。

但是,如果我们设计了一个假设超时的算法 (以保证正确性),则在同步假设失败时,将导致两个有效的事务日志。

这将比以前的选择危险得多。如果服务腐败了 (即没有了安全),那么拥有一个有用的服务 (即活性) 是没有意义的。基本上,拥有两个不同的区块链比让整个区块链停止更糟糕。

(待续)  

我是您身边的区块链研究员,如果您有志于区块链或者交易技术的学习,欢迎和我交流。微信:chanhai13。更多文章请添加微信公众号:链学园

原文名称:How Does Distributed Consensus Work?

作者:Preethi Kasiredd (TruStory 创始人&CEO)

原创翻译:区块链研究员(区块链Robin)

英文源自Medium,译文有编辑及删减,如有侵权,请联系译者删除。

中文版权所有,转载需完整注明以上内容。

评论

  • B

    {{item.nickName!==null?item.nickName:""}} {{item.mobile!==null?item.mobile:""}} {{item.email!==null?item.email:""}}

    {{item.content}}

    {{$forceUpdate(item.createDate)}} 回复

    • B

      {{reply.nickName!==null?reply.nickName:""}} @{{reply.replyNickName!==null?reply.replyNickName:""}} @{{reply.replyMobile!==null?reply.replyMobile:""}} @{{reply.replyEmail!==null?reply.replyEmail:""}}

      {{reply.mobile!==null?reply.mobile:""}} @{{reply.replyNickName!==null?reply.replyNickName:""}} @{{reply.replyMobile!==null?reply.replyMobile:""}} @{{reply.replyEmail!==null?reply.replyEmail:""}}

      {{reply.email!==null?reply.email:""}} @{{reply.replyNickName!==null?reply.replyNickName:""}} @{{reply.replyMobile!==null?reply.replyMobile:""}} @{{reply.replyEmail!==null?reply.replyEmail:""}}

      {{reply.content}}

      {{$forceUpdate(reply.createDate)}} 回复