分布式系统指南

2018-10-23 22:13 栏目:经验之谈 来源: 查看()

对于那些刚进入区块链领域的人来说,他们常常对区块链技术感到困惑。理解该技术实际上非常简单,但您需要了解一些适当的背景信息。此外,大多数人并不真正需要了解区块链的具体内部工作原理,只需要了解一些背景知识和指导。在本文中,我将简要介绍分布式系统,讨论各种共识协议,网络模型类型以及其他相关概念。对于那些想要了解该领域的行业术语的人,本文也可以作为指南,但我不会谈论过于模糊的细节。

01 时间返回

分布式系统是一个非常广泛的领域,为了理解,我将重点关注该领域的共识方面。让我们追溯到20世纪80年代的时间。那时,一群非常聪明的计算机科学家积极地回答了这个问题:一组机器如何能够就消息达成一致?让我先解释一下这个问题,因为这个问题似乎有点奇怪。假设您有一个可用于存储一些非常重要的数据的数据库(例如银行需要存储的财务信息)。由于这些数据永远不会丢失,您将立即尝试将此数据复制并存储在许多其他机器上,这些机器是m0,m1 ...... mn。这样,如果其中任何一台机器出现故障,您就不会担心没有收回数据。为了构建这个系统,我们可以采用最直观的方式,即将其中一台机器指定为“领导者”(假设m0是领导者的角色),其他机器是“追随者”。 。

因此,每当需要处理新的客户交易时(例如从Bob账户中扣除10美元),领导者机器将向所有追随者机器发出指令以执行交易。听起来不错,但我们将面临一个新问题。

首先,如果领导者机器m0发出指令要求m3机器从Bob的帐户中扣除10美元,但消息(消息)未能发送并且未传递给m3,我们该怎么办?这真的很糟糕!我们不能再依赖m3机器来存储数据,因为现在m3机器在其他机器上存储不一致的数据。请注意,不一致的数据意味着系统中存储的某些数据与存储在其他计算机中的数据不同,它们应该是相同的!

02 确认消息

上述问题的基本解决方案是确保m3机器已收到消息。这涉及原子提交协议,两阶段提交(2PC,两阶段提交)。它被称为原子提交协议,因为它的想法是,如果你需要提交一个事务,你可以将它提交给系统中的所有机器或不提交给任何机器(...是的,我知道,这不是一个好主意。)想象一下:机器m0不会盲目地从客户端接收消息并将消息传递给其他机器。 m0还将确保其他复制器在收到消息后向m0确认已收到消息。这是有道理的,但是如果其中一台机器(假设m6)发生故障而另一台机器从Bob的账户中扣除了10美元呢?别担心,回滚很好!在两阶段提交协议中,系统通常包含两种类型的机器(或节点):一种是协调器,通常在系统中只有一种;另一个是同类群,通常包含多个,可以理解为数据存储系统中的多个数据副本。

顾名思义,两阶段提交协议由两个阶段组成。在正常执行下,这两个阶段的执行如下:

阶段1:请求阶段(提交请求阶段,或投票阶段,投票阶段)

在请求阶段,协调员将通知交易参与者准备提交或取消交易,然后进入投票过程。在投票过程中,参与者将通知协调员他或她自己的决定:同意(交易参与者本地作业执行成功)或取消(交易参与者本地作业执行失败)。

阶段2:提交阶段

在此阶段,协调员将根据第一阶段投票的结果做出决定:提交或取消。当且仅当所有参与者同意提交交易时,协调员通知所有参与者提交交易,否则协调者将通知所有参与者取消交易。参与者将在收到协调员的消息后执行响应。

如下图所示:

分布式系统指南

03 引入共识

精明的读者可能已经注意到我们构建的2PC/3PC中存在一些漏洞。例如,如果领导机器出现故障,则需要更换领导者。但除此之外,还有一些更紧迫的缺陷。 (注意:3PC是一个三阶段提交,旨在解决两阶段提交协议的缺点。详情请参考:http://www.hollischuang.com/archives/681首先,如果我们在系统引入另一个领导机器(假设m1),会发生什么?我们需要这样做来处理m0可能的故障。但是,这会导致协调问题,因为有两个领导机器。假设Bob发送两个事务,一个用于T1是“从Bob账户扣除10美元”,另一个T2是“从Bob账户扣除20美元”,而Bob账户恰好总共只有20美元,这很麻烦!机器m0可能会将T1发布到网络,而机器m1可能会释放T2。系统中的其他关注者将根据这些操作的顺序验证这两个事务,并且会出现不一致的状态。经过验证,Bob是否还有10美元或0美元的账户?对于分布式系统,这真的很糟糕!

其次,假设我们可以解决上述领导机器之间的协调问题。但如果一些粉丝机器(节点)出现故障,我该怎么办?请注意,这正是我们想要摆脱的。当节点出现问题时,我们该怎么办?

如果我们静静地等待这些节点再次运行,那么我们可能会面临一些效率问题,尤其是当需要手动恢复某些服务器时。如果我们选择忽略一些失败的机器(节点),那么我们应该忽略几台机器?更重要的是,如果某些机器已恢复,但其硬盘损坏(数据已损坏),这有什么用?虽然这些机器仍然运行协议,但它们无法成功将数据写入硬盘。

预测所有这些问题是非常麻烦的,所以我们需要一些强大的东西,可以忽略所有这些问题,只要一定数量的机器可以正常运行!这对于分布式系统来说非常有用。

这些和其他问题(和其他问题)使我们达成了第一个共识协议,Paxos。这也让我们回到最初的问题:一组机器如何就消息达成一致? Paxos由Leslie Lamport发明,是一种解决碰撞故障计算问题的共识协议。我不会深入了解Paxos的工作原理,因为细节令人生畏。

但是在更高层次上,Paxos很清楚:只要大多数机器(节点)接受提议,这将确保系统中的所有机器不会出现不一致。这太棒了,你只需要知道这一点。

04 拜占庭容错

事实上,这种处理机器故障的模型是许多当前数据中心使用的模型。如果任何企业正在基于共识协议部署分布式应用程序,则该公司可能正在使用诸如Paxos之类的共识协议作为对机器故障的响应。等等,如果机器被黑了,我该怎么办?大多数公司认为这不会发生,并且公平地说,通过组合VPN(虚拟专用网络),防火墙和其他安全机制,可能不太可能发生黑客攻击。但是,如果我们真的想要保护自己免受黑客攻击,那么我们需要达成共识协议来处理可能出现在系统中的机器(一个或多个)的“谎言”。这引入了拜占庭容错(BFT)。为什么拜占庭呢?因为Lamport在思考实验中提出了这个问题,拜占庭将军所面临的一些问题,他们被敌人的前线分开,但仍需要相互沟通以制定攻击/撤离计划。

05 一些行业术语

阅读本文,您可能会问,“嗯,知道分布式系统只需要了解系统可能发生的崩溃(frash-fault)和拜占庭容错(BFT)是否足够?”几乎就是这种情况。的。您真的不必费心去理解各种共识协议,但您应该了解一些基本类别:1。 故障模型 

机器故障:当机器(节点)发生故障时,共识协议用于解决机器上可能发生的状态不一致。

拜占庭容错:机器不仅可能失败,而且还可能“撒谎”。 

2. 网络模型网络型号: 

同步:我们不仅需要考虑机器所具有的各种故障问题,还需要考虑网络通信的类型。在通信同步模型中,我们假设所有正常运行的节点(机器)将在特定时间内发送和接收消息。例如,您可以假设每条消息需要在5秒/分钟/小时内发送出去。

异步:这与同步相反。即使对于正确的节点,仍可能存在消息通信延迟问题。这种情况的结果是您无法判断节点是否有故障,或者节点是否有故障,只需要很长时间才能响应。

部分同步:此模型介于同步和异步之间。这意味着存在上限,但所有节点都不知道此上限。我认为这种通信模型与实际的WAN通信(即Internet)非常相似。这只是我个人的意见。如果您有不同意见,欢迎提出反馈!

3.消息模型 消息模型:

我将只考虑一种类型的消息模型:经过身份验证的通信,其中每个节点将对消息进行签名,并且任何人都可以验证来自其他节点的消息是否可信。

4.保证型号保证型号:

这个命名有点奇怪,但我认为这可以更好地描述这种情况。

非概率:如果共识协议是非概率性的,则意味着只要一定数量的节点正常运行,协议就可以保证安全性(无概率分布)。

概率:如果共识协议是概率性的,我们将自动引入概率分布。通常,该模型只能保证1-ε概率之间的安全性,其中ε是系统设计者选择的值。例如,即使一定数量的节点正常运行,概率协议也可能只保证99%的安全性。考虑到这一点,这非常重要!

Blockchain 06 ...或者,我真的不在乎你是谁,让我们先审视它。共识协议本质上是允许我们在许多可能不受信任的机器上部署数据库的算法(也就是说,这些机器不相信任何机器会说实话,但相信大多数机器会说实话))。当我们选择共识协议时,我们需要考虑我们可能做出的各种假设,协议是否同步或协议是否保证绝对安全性或仅仅是概率安全性。当我在上面介绍Paxos时,我提到节点投票支持事务提交。事实上,投票机制是几十年来一直使用的唯一机制。这种机制适用于大多数情况。

但是,如果我想公开部署数据库,任何人都可以加入并向系统进行交易。此时存在一个大问题:如果我允许任何人进入我的系统,我将无法区分谁是谁。我不知道谁参加。从根本上说,在过去,对身份信息的共识是不可能的,但是在Nakamoto诞生之后,情况就不同了。

比特币网络解决了这个问题。 Nakamoto的精彩观点是我们可以使用另一种机制而不是投票机制,即工作量证明机制(PoW)。比特币是第一个实现谁不需要设想参与网络的共识协议。这消除了确认身份的需要,这使得可以在没有许可的情况下很好地部署比特币网络。

在比特币网络中,任何人都可以在没有其他节点许可的情况下加入网络。在比特币网络中,节点不需要投票,而是提交带有权重的证明,这是用于解决加密难题的工作证明(PoW)。所有提案都捆绑在一起,这些提案中最重的链(而不是最长的链)构成了“正确的”历史。这是比特币。

最后一点:哪种比特币适合上述模型?比特币使用拜占庭容错模型。网络的通信是同步的,消息由密钥持有者验证,并且模型保证是概率性的,即链条可以随时通过分支恢复。换句话说,你可以接受“鲍勃的账户中只剩下10美元”,而你犯错的可能性很小。

这是分布式系统的基本内容。在此基础上,您可以进入区块链的世界。

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

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

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

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