区块链分布式学习笔记

一、分布式系统优势

主要任务:
任何分布式系统总是需要完成两个任务:计算和存储。

重要特征:
计算和存储分离是分布式系统的重要特征。

  • 在集中式或单机系统中,这两者是可能结合在一起,比如通过一个SQL语句实现查询后排序,查询是从存储中获得数据,排序是属于计算,因此这个SQL语句实际是将计算和存储耦合在一起。

  • 在应对大数据或大并发的情况下,集中式捆绑带来了性能问题,而分布式计算和分布式存储虽然带来复杂性,但是也为系统的处理能力打开了上升拓展的空间。

二、FLP不可能原理(102页)

       FLP 不可能原理是指在分布式网络中,任何共识算法都无法在技术上实现既能 保证网络可靠,又允许个别节点失效。

       这个原理源自 Fischer、Lynch 和 Patterson 三位科学家于 1985 年共同发表的一篇论文《一个故障过程导致分布式共识无效》,它是分布式领域里的测不准原理,指的是在网络可靠,但允许节点失效的最小化异步模型中,不存在一个可以解决一致性问题的确定性共识算法。开发者不必追求完美的解决方案,只要能够满足问题的 实际要求即可。

       与同步相对,指的是系统中各节点可能存在较大的时钟差异,同时消息传输时间和各节点处理消息的时间可能都是任意长的,这样就无法判断某个消息迟迟未被响应到底是哪里出了问

三、CAP原理

CAP 原理是指分布式系统无法同时实现一致性(Consistency)、可用性 (Availability)和分区零容忍(Partition Tolerance)三个技术目标。
  • 一致性:所有提交到网络中的副本均获得认证,同一问题从每个节点获得的 反馈都是一致的。如果弱化该目标,那么节点之间需要花费较长时间实现数 据一致。
  • 可用性:系统中任一节点都可以在较短时间内对接受信息作出反馈。如果弱 化该目标,系统在遇到故障时必须等待一定时间进行修复,期间系统处于瘫 痪状态。
  • 分区零容忍:即使有节点出现故障,也不会影响整个系统的服务。如果弱化 该目标,系统的可扩展性将受到影响,所有数据不得不尽可能地存在于某个 节点。

CAP原则指的是这三个要素最多只能同时实现两点,不可能三者兼顾。

四、BASE原则(106页)

BASE 原则是对 CAP 原理中一致性与可用性进行权衡后提出的折衷方案,即开 发者无法在技术上做到强一致,但是可以基于具体问题采取恰当措施来实现一致性。 BASE 该词源于 Basicially Available(基本可用)、Soft State(软状态)和 Eventually Consistent(最终一致性)三个词组的简写

与 ACID 原则相比,BASE 原则更多是面向大型、可用性强、扩展性强的分布式系统,通过牺牲强一致性保障可用性,同时又允许节点之间数据在一段时间内可以 不一致,只要最终达成一致即可。

五、两阶段、三阶段提交

为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复权衡过程中总结了许多典型的协议和算法。其中比较著名的有二阶提交协议(Two Phase Commitment Protocol)、三阶提交协议(Three Phase Commitment Protocol)和Paxos算法

       在分布式系统中,各个节点之间在物理上相互独立,通过网络进行沟通和协调。
        由于存在事务机制,可以保证每个独立节点上的数据操作可以满足ACID。但是,相互独立的节点之间无法准确的知道其他节点中的事务执行情况。所以从理论上讲,两台机器理论上无法达到一致的状态。
       如果想让分布式部署的多台机器中的数据保持一致性,那么就要保证在所有节点的数据写操作,要么全部都执行,要么全部的都不执行。但是,一台机器在执行本地事务的时候无法知道其他机器中的本地事务的执行结果。所以他也就不知道本次事务到底应该commit还是roolback。所以,常规的解决办法就是引入一个“协调者”的组件来统一调度所有分布式节点的执行。

两阶段提交:包括两个阶段,即预提交阶段与正式提交阶段。在正常的执行下,这两个阶段的执行过程如下所述:

  1. 预提交:由协调者发起预提交申请,执行者尝试进行提交,并且向协调 者反馈是否能够完成。
  2. 正式提交:协调者向反馈能够完成的执行者发出正式提交的申请,执行 者成功完成后,算法执行成功。

三阶段提交:对两阶段提交算法中的预提交时部分执行者被阻塞的情况给予优化

  1. 尝试预提交:由协调者发起预提交申请,执行者只反馈答复,不实际执行提交操作。这样就可以避免部分执行者被阻塞。
  2. 预提交:协调者汇总答复,如果答复全部有效,则再次发起提交申请。这次,执行者尝试进行提交,并且向协调者反馈是否能够完成。
  3. 正式提交:协调者向反馈能够完成的执行者发出正式提交的申请,执行者成功完成后,算法执行成功

具体描述请参考:https://zhuanlan.zhihu.com/p/35616810

六、拜占庭将军问题

拜占庭将军问题由计算机科学家莱斯利·兰伯特提出,主要是指多个参与者之间 传递信息会出现信息丢失、不可靠的情况,导致参与者之间难以达成一致。

       在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,拜占庭问题就此形成。