分布式系统入门

2018-11-08 22:02 栏目:经验之谈 来源: 查看()
对于初学者来说,对区块链技术的初步接触往往让人觉得非常复杂和困惑。理解区块链技术实际上非常简单,但需要一些适当的背景。此外,大多数人可能不需要了解区块链的内部工作方式来开始使用区块链。 (初学者)真正需要的是实际情境和比较指南。在这篇博客中,我将尝试简要介绍分布式系统,讨论不同类型的共识协议,不同类型的网络模型,安全性和其他相关的想法。本指南可以帮助那些想要了解该领域中某些术语含义的人,但不会涉及每个细节。

时光倒流

分布式系统是一个非常广泛的领域,但为了简化和找到相关性,我们将只关注共识子领域。让我们从一开始就开始,时间可以追溯到20世纪80年代。一群非常聪明的计算机科学家试图回答这个问题:一组机器如何就信息达成一致?我们必须逐步分解这个问题,因为原因很奇怪。

假设您有一个存储任务关键型数据的数据库,例如财务信息(银行等)。您不能丢失任何信息(在数据库中),因此您将立即尝试将数据复制到标记为m0,m1,...,mn的其他计算机。如果任何机器关闭,它将不会完全丢失关键信息。

我们可以以最直观的方式构建此系统,即将其中一台机器设置为“领导者”(例如,m0),将其他机器设置为关注者(关注者)。每当有来自客户的新交易时(例如,“从Bob的账户减少10美元”),领导者就会命令所有粉丝执行交易。这听起来不错,但也存在一些问题。例如,m0命令m3从Bob的帐户中减去10美元,但是信息丢失了,它没有传递到m3,系统会发生什么?这种情况太糟糕了。我们无法再根据m3恢复数据,因为它现在包含不一致的数据。注意:不一致的数据意味着您的计算机现在存储的数据与其他计算机不同,并且它们不应存储不同的数据。

用你的大脑

该问题的基础解决方案是确保m3实际接收信息(即,事务执行信息)。我们现在正在接触我们的第一个原子提交协议,即两阶段提交(2PC)。它是原子的,因为它的想法是:如果你想提交一个事务,那么事务要么在所有节点提交,要么不在所有节点提交(是的,我知道你在想,看看这不能解决问题)。但是,您需要意识到m0不仅盲目地从客户端接收信息,而且还将其发送到其他机器,它还确保副本机器确实接收到信息。好的,但是如果m6有一些问题会发生什么,即使其他机器已经从Bob的帐户中扣除了10美元?别担心,只需回滚解决它!具体流程图如下:

分布式系统入门

共识简介

聪明的读者可能已经注意到我们的2PC/3PC架构中存在一些漏洞。例如,如果领导者失败,则需要更换。但是,还有其他更紧迫的缺陷。

首先,我们是否将另一位领导者(m1)引入系统?我们真的需要这样做,以免被m0的失败困住。但是,这会导致协调问题。如果Bob发出两笔交易,其中T1=“将Bob的账户减少10美元”而T2=“将Bob的账户减少20美元”,但Bob账户实际上只有20美元,这可能令人困惑。 M0可以在网络上发布T1,但是m1可以发布T2。 (最终结果)根据操作发生的顺序,从动机器将验证事务,但会产生不一致的数据。那么Bob现在剩下10美元还是0美元呢?这是分布式系统的最坏情况。

其次,让我们假设我们已经解决了领导者之间的协调问题。如果一些关注节点出现故障怎么办?毕竟,这是我们最初的假设。我们需要对这些节点做些什么?如果我们等待它们再次上线,则会严重影响系统性能,特别是如果需要人工干预来恢复某些服务器。如果我们选择忽略一些停机时间,我们应该选择忽略多少?更重要的是,如果某些机器在线但硬盘坏了怎么办?它们可能正在运行协议,但它们未成功写入硬盘。预测这些问题是一个非常复杂的问题,因此我们需要一个非常强大的机制来简单地忽略所有这些问题并确保机器在特定阈值内正确执行。在分布式系统的情况下,这是圣杯。

这些(和其他)问题将引导我们达成第一个共识协议,Paxos。这也让我们回到原来的问题:一组机器如何就信息达成一致? Leslie Lamport提出的Paxos共识协议用于计算Crash Fault模型。我们不会详细介绍Paxos一致性算法,因为这些细节非常模糊,但从高度抽象的角度来看,它实际上非常简单。协议以“轮次”运行,并且在每一轮中,机器将提出新的数字(例如,索引n)。如果车队中的大多数机器都支持该值,则提议者收集投票并在网络上发布提交。如果另一个提议者也在第n轮发布了一个号码,它将被拒绝。 Paxos一致性算法的神奇之处在于,只要大多数机器接受提议,Paxos就可以保证系统永远不会达到不一致状态。这太棒了,现在你只需要知道这一点。

另外,我在前一段中提到的“停机失败”一词。停机故障是网络中的机器只会在最坏的情况下崩溃,并且不会随意动作。这意味着当机器想要拒绝信息时,机器不会给出“好的,我接受交易”的反馈。这使我们能够理解区块链更进一步。

一个奇怪的错误

事实证明,停机故障模型基本上是当今数据中心实际使用的模型。任何部署需要共识协议的分布式应用程序的企业(参见此处,您也应该真正了解我们为什么需要共识协议),然后它们可能会在停机模型中运行,例如,Paxos。

但是等一下,如果机器变暗会发生什么?大多数公司认为这不会发生。实际上,VPN,防火墙和其他安全措施的组合不太可能导致黑客攻击。但是,如果我们仍然关注黑客攻击,我们需要一个能够容忍机器“撒谎”的共识协议。这涉及拜占庭容错(BFT)的内容。为什么叫拜占庭?因为当时这个问题(也是Lamport提出的)是以拜占庭式的一般通信问题的形式提出的,Byzantine将军和他的下属被敌军分开,但他们想在进攻计划上相互沟通。

一些(烦人但必要的)术语

您可能会问:“好吧,凯文,我没有太多时间来学习这个。我只需要知道崩溃故障和拜占庭故障这些术语是分布式系统专家。什么?”答案几乎可以肯定你真的不必费心去理解共识协议的细节,但你需要了解一些常见的术语。这里有一些:

1.失败类型:a。停机故障:正如我们所说,如果您认为网络中的机器只会在最坏的情况下崩溃,您需要应用共识协议来解决停机时间。湾拜占庭式故障:机器不仅可能出现停机故障,还可能会出现故障。事实上,他们可以做任何他们想做的事。

2.网络模型:a。同步:我们不仅要考虑机器可能遇到的故障类型,还要考虑我们可以做出的网络通信假设的类型。在同步通信模型中,假设正常节点将在已知时间的时限内发送和​​接收信息。例如,您可以假设每条消息在5秒,5分钟或5小时内传递。湾异步:异步和同步完全相反。即使对于普通节点,消息延迟也是不可确定的。这里的一个重要结论是,无法区分具有无限响应时间的正常节点和停机节点。 C。部分同步:部分同步模型介于完全同步和完全异步之间。也就是说,延迟具有上限,但上限是不可确定的。这个模型有一些奇怪的结果,增加了我们理解的复杂性。最重要的一点是,这种通信模型最接近实际的WAN通信(即Internet)。这只代表了我的观点。如果其他专家不同意,请不要钻研我的错误。

3.信息模型:这里我只讨论一种模式:认证通信。这意味着节点必须对信息进行签名,并且每个节点都可以验证来自其他节点的信息是否已经过签名(验证)。为什么这是唯一要考虑的模型?因为,在所有类型的网络模型(如上所述)中,不可能使用未经认证的信息通信来达成共识。因此,我们不考虑其他模型,而只考虑认证通信的情况。

4.安全保障模型:这个名字有点奇怪,但我认为这是最恰当的说法。一个。非概率:如果共识协议是非概率性的(即确定性的),则意味着只要正常节点的数量超过阈值,就保证(系统的)安全性(无概率分布)。这实际上非常令人困惑,但是当我介绍下一个模型时,模型很容易理解。湾概率:如果共识协议是概率性的,则自然存在概率分布。通常,该模式保证安全的概率仅为1-ε,其中ε是系统设计者指定的值。例如,即使正常节点的数量超过阈值,概率协议也只能保证99%的正确性。记住这一点!这是非常重要的!

基本上,这是您现在需要知道的所有术语。到目前为止,我们已经介绍了共识算法的用途,一致性算法的类型和基本思想。现在让我们吃蛋糕(区块链)!

区块链,或......实际上我并不关心它是啥

好的,让我们一起来看看吧。共识协议本质上是一种算法,它允许我们在许多或多或少的可疑机器之间部署数据库(也就是说,他们不相信特定的人所说的,但他们相信大多数人会说出真相)。我们引入了在选择共识协议时可以做出的不同假设,包括同步假设或不同步假设,以及确定性安全性或仅仅是概率安全性。

当我在上面介绍Paxos时,我提到了该提案的节点投票。事实证明,投票是几十年来使用的唯一机制。投票适用于大多数情况。但是,假设我想公开部署数据库,允许任何人加入和发布事务。现在会有一个很大的问题:如果我允许任何人加入我的系统,我不确定谁是谁。我不知道谁参加了。基本上,没有关于身份的共识是不可能的。或者更确切地说,直到Satoshi出现(这个问题得到解决)。

比特币确实解决了这个问题。 Satoshi的独特见解是我们可以使用不同的机制而不是投票,工作证明(PoW)。比特币是第一个对网络中的人没有假设的共识算法。由于不需要身份验证,比特币可以完美地部署在非认证环境中,其中节点可以加入网络而无需额外的节点权限。比特币非常简单:节点不投票,而是使用附加到每个提案的权重来提供报价(价值)。该权重是通过解决密码问题获得的工作量的证明。提案是相互关联的,因此最重要的(而不是最长的,经常被误解的)提案构成了“正确的”历史。这是比特币的基本原则,就是这样!

最后一件事:比特币是我们上面讨论过的模型吗?比特币在拜占庭容错模型下运行,并且网络同步(校对:原始文本,怀疑作者的错字),信息经过身份验证(由私钥持有者签名),并且以一定的概率保证安全性。这意味着如果有叉子,区块链可以随时回滚。换句话说,你可能会接受Bob现在只有10美元的事实,但请注意你可能错了。

结论

我们已经完成了基础知识。你已经知道博士学位了研究分布式系统的学生正在学习。您现在是区块链世界中自信且知识渊博的读者。
原始链接:https://sekniqi.com/blog/a-distributed-systems-primer-for-non-experts.html?utm_campaign=The%20Control&utm_medium=email&utm_source=Revue%20newsletter
作者: Kevin Sekniqi
翻译与翻译校对: stormpang& Ajian
转自:EthFans

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发