Go第八天上课

202 阅读5分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天.

老师今天讲解关于分布式的理论知识。分布式为程序的独立集合,程序跨多个独立节点的计算资源实现共同目标。 image.png

下图是分布式系统的常见六种类型,可以划分为四大类。对于拜占庭问题,指节点存在欺诈行为并且能够影响到其他的节点。对于ADB问题,为拜占庭的特例,可以改变自身数据,但是无法影响其他节点数据。对于Performance问题,节点未在指定的时间内收到数据,可能会因此影响到最终的结果。Omission问题指在网络延迟出现问题时,可能长时间的无法收到数据。崩溃问题,当节点长时间收不到数据时,可能存在节点宕机的情况,如持续性的无法收到数据,但是崩溃故障问题无法确定故障的错误类型。所以最后加入Fail-stop问题,可以检测到错误问题。 image.png

所以老师总结了一些关于常见在实际情况下出现的各种问题,并给该问题找出对应问题类型的可能。主要是以是否会影响其他服务器为条件是否为拜占庭,再继续判断是否会篡改自身数据判断是否ADB,最后判断是宕机还是网络延迟问题。以上为常见的故障问题。 image.png

随后讲解关于拜占庭将军问题,证明在多个节点通信的情况下,在有3M+1个节点的情况下,拜占庭最多允许M的恶意节点进行篡改数据,否则很难保证最后结果的正确性。拜占庭问题主要是对结果正确性的一致,但是实际情况非常难保证绝对正确,比特币就是一种拜占庭式的问题,当超过51%的算力攻击,就有可能对最终的结果进行篡改。由此引入共识算法,如下图,一致性分为线性一致性(强一致性)和最终一致性。 最终一致性在不同时刻读取的值不同,如客户端C在在写入期间客户端B读到的值就可能为0或1,但是当C写完后客户端就能读到最终的值,所以最终一致在写操作后的一段时间就能得到该次写入的最新值。但是线性一致性则表示当有客户端读到最新的值后就会线性传递至其他客户端以保证强一致,每个客户端读到的值都是一样的。 image.png

老师继续讲到时间和事件顺序,这一个点没听太懂。。。大致的理解是事件和时间的顺序结合可以梳理出系统中的各节点运行的发展线。 image.png

cap理论,在该理论中可证明分布式系统无法同时满足cap三个特性,c代表一致性,该一致性为强一致。a代表可用性,若集群中只有一个领导节点,当领导节点崩溃后系统不可用则该集群的可用性不高。p代表分区容错性,当单个集群被划分为多个区域后是否该集群还能保证一致性,能正常运转。但所有的分布式系统中只能同时满足两个条件,得牺牲最后一个条件,不同场景选择不同,如银行必须保证一致性以及分区容错性,所以可能会适当的牺牲可用性。 image.png

acid理论指保证食物的四大特性,A原子性,如银行转账AB用户,当A向B用户转账1万元,则A账户减少1万元,B账户增加1万元,这个过程要么全部成功,要么全部失败,不可以中断,所以相当于原子性不可中断执行的最小单位。c一致性,一个状态转移至另一个状态后数据库状态一致。i,当多个用户并发访问数据库,每个用户都分配事务且相互隔离。d,持久性指事物被提交后在整个数据库中的改变就是永久的,如转账一旦提交后不可撤回。 image.png

最后老师讲了各种准备状态以及各种协议,如Raft协议,raft算法为一个领导节点向所有跟随者节点发送心跳以维持网络状态,当领导节点宕机后由跟随者节点进行倒计时投票选举领导节点,所以领导节点日志最新,raft为最终一致性,每个跟随者节点的日志长度可能在不同时期日志长度不同,领导者为最新日志,所以需要访问数据时只需要访问领导节点数据即可。相比Raft,Paxos与raft相似,但是Paxos所有节点都可以作为不同数据的领导节点,每个节点视图状态不同,所以读写数据会更快。 image.png

本次课内容信息较大,广泛的理解了分布式的相关概念,以及各节点之间会存在的问题,所以在分布式模块需要参考老师推荐的文献阅读才能更深入的进行了解。