一、分布式系统的指标
性能(吞吐量/响应时间/完成时间)
资源占用
可用性
可扩展性
二、分布式协调与同步
1、分布式互斥
对于同一共享资源,一个程序正在使用的时候也不希望被其他程序打扰;在分布式系统里,这种排他性的资源访问方式.
解决方案:
1-1、霸道总裁:集中式算法
协调者与统筹各个程序访问,在使用集中式算法的时候,一定要选择性能好、可靠性的服务器来运行协调者.
集中式算法具有简单、易于实现的特点,但可用性、性能易受协调者影响.在可靠性和性能有一定保障的情况下,比如中央服务器计算能力强、性能高、故障率低或者中央服务器进行了主备,主故障后备可以立马升为主,且数据可恢复的情况下,集中式算法可以适用于比较广泛的应用场景.
1-2、民主协商:分布式算法
分布式算法适合节点数目少且变动不频繁的系统,且由于每个程序均需通信交互,因此适合p2p结构的系统.
分布式算法是一个先到先得和投票全票通过的公平访问机制,但通信成本较高,可用性也比集中式算法低,适用于临界资源使用频度较低,且系统规模较小的场景.
1-3、轮值CEO:令牌环算法
类似华为的轮值ceo体系里,ceo就是临界资源,同时只能有一个人担任,由多名高管轮流出任ceo.
令牌环算法的公平性高,在改进单点故障后,稳定性也很高,适用于系统规模较小,并且系统中每个程序使用临界资源的频率高且使用时间比较短的场景.
1-4、另:
适合大规模系统中的分布式互斥算法,多层结构的分布式令牌环算法,把整个广域网系统中的节点组织成两层结构,可以用于节点数量较多的系统,或者是广域网系统.
2、分布式选举
主节点,在一个分布式集群中负责对其他节点的协调和管理,也就是说,其他节点都必须听从主节点的安排.主节点的存在,就可以保证其他节点的有序运行,以及数据库集群中的写入数据在每个节点上的一致性.当然,如果主节点故障了,集群就会天下大乱,可能导致每个节点上的数据会不一致.这里,就需要选举出一个主节点,由它来协调和管理其他节点,以保障集群有序运行和几点间数据的一致性.
解决方案:
2-1、Bully算法:alive消息,偏向于让ID更大的节点作为leader.
2-2、Raft算法:同意或者不同意选举的消息,收到过半的投票,则当选为leader.
2-3、ZAB算法:投票信息,倾向于让数据最新或者ID值为最大的节点作为leader.
3、分布式共识
分布式共识就是在多个节点均可独自操作或记录的情况下,使得所有节点针对某个状态达成一致的过程.通过共识机制,我们可以使得分布式系统中的多个节点的数据达成一致.
共识方法:
3-1、PoW算法:在POW共识机制中,挖矿是指利用有计算能力的设备来进行哈希计算,这个计算的过程就是工作量,通过不断的计算来得出一个合理的哈希值,这就是所谓的解题.当有人或者节点得出了这一个合理的哈希值,那么他就可以获得记账权,记录区块链上的交易记录,这个记录就是产出区块,获得记账权就会得到一定量比特币的奖励.
按劳分配,以每个节点的计算能力来竞争记账权,算力越高,越有可能获得记账权.优点明显,相对公平/有容错机制/完全去中心化/简单易懂/容易实现;缺点,不适合私有链或者联盟链,共识效率低,每秒完成交易量少,存在阻塞问题,资源浪费严重,交易服务费高.
3-2、PoS算法:要求用户证明拥有某些数量的货币(即对货币的权益).根据每个节点所占有代币的数量和时间(即权益)来决定其挖矿的难度,根据每个节点所占代币的比例和时间, 等比例的降低挖矿难度,从而加快找随机数的速度.
由系统权益代替算力决定区块记账权的共识机制,拥有的权益越大则成为下一个区块生产者的概率也越大.优点,资源消耗低/达成共识周期短/交易服务费低.缺点,每秒完成交易量较低/容易被垄断/无法处理分叉链的情况.
3-3、DPoS算法:似于股份制公司,各个节点首先投票选举出可信度比较高的来作为达成共识过程中的决策者.当然,每个节点支持的票数由其持有的货币数量决定.这些可信节点可以被视为“ 挖矿池”,它们之间具有相同的权利.普通节点可以选举或驱逐不合格的“股东”.在比特股中这个股东数量被控制在100个.
持有币的人可以进行投票选举,选举出一些节点作为代表来几张.优点,能耗更低/每秒完成交易量高/无垄断情况/交易服务费低/更加安全.缺点,持币人投票的积极性并不高/故障问题解决效率低,易出现安全隐患.
4、分布式事务
事务是包含一系列操作的、一个有边界的工作序列,有明确的开始和结束标志,且要么完全执行,要么完全失败,即all or nothing.分布式事务,就是在分布式系统中运行的事务,由多个本地事务组合而成.
实现分布式事务基本方法:
4-1、基于XA协议的二阶段提交方法
算法思路可以概括为:协调者下发请求事务操作,参与者将操作结果通知协调者,协调者根据所有参与者的反馈结果决定各参与者是要提交操作还是撤销操作.系统中的事务管理器作为协调者,负责各个本地资源的提交和回顾,而资源管理器就是分布式事务的参与者,通过投票阶段和提交阶段,协调事务的操作,保持数据的一致性.
缺点:同步阻塞问题/单点故障问题/数据不一致问题.优点:强一致性/同步执行/算法简单实现
4-2、三阶段提交协议方法
三阶段提交引入了超时机制和准备阶段
缺点:数据不一致问题/性能较低/系统吞吐量不高. 优点:强一致性/同步执行/无同步阻塞问题/无单点故障问题.
4-2-1、在协调者和参与者中引入超时机制.
4-2-2、在第一阶段和第二阶段中间引入了一个准备阶段,也就是在提交阶段之前,加入了一个预提交阶段.在预提交阶段排除一些不一致的情况,保证在最好提交之前各参与节点的状态是一致的.
4-3、基于消息的最终一致性方法
将事务通过消息或者日志的方式来异步执行,消息或日志可以存到本地文件,数据库或消息队列中,再通过业务规则进行失败重试.
优点:最终一致性/异步执行/无同步阻塞问题/无单点故障问题/性能高/系统吞吐量高
缺点:算法过于复杂
5、分布式锁