区块基础-容错Paxos

Posted 磨链mochain社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块基础-容错Paxos相关的知识,希望对你有一定的参考价值。


分布式容错


区块链,有一种理解为分布式统一账本,那么分布式的架构肯定会存在一个容错的问题。这里简单概述下容错相关内容。


分布式容错约定概念:


  • 节点:在一个网络中,每一台终端计算机称为一个节点,传统架构中服务器客户端的模式,那么服务器也看作一个节点。


  • 消息:网络中节点单独工作,协作在一块,需要一种机制,称为消息,也作为消息传递。


  • 消息丢失:网络中不能保证所有消息都是能正常被传递和确认,这个原因是由于网络中的带宽、物理设备故障、恶意节点等原因,故无法保证所有的消息都是能正常传递和确认,那么必然存在消息丢失。


  • 消息确认:在消息传递的过程中,接收消息的节点接收到消息后返回一个确认信息给发送节点。


  • 消息传递序号:在消息发送过程中,为了防止重复发送的统一消息,在消息传递中加一个序列号。


  • 状态复制:在分布式系统中,串形复制命令序列。


  • 加锁:串行状态复制的时候,通过加锁的方式保证单一执行修改。


  • 票:弱化形式的锁。检查服务节点状态,不对其进行加锁。


上述大致说明了一些分布式容错的约定概念。接下来简单介绍下一些协议。


分布式系统中的共识


分布式系统采用消息传递、反馈确认,那么假设一场对话(网络环境下点对点环境):

 

A:明天下午2点打球?收到请回复~ 
网络传输 
B:收到,明天下午2点一块打球,确认请回复 
网络传输 
A:收到,确认明天下午2点一块打球,收到请回复 
网络传输 
B:收到,确认回复 
网络传输 
。。。 

其实这种需要确认的协议是无法终止的,因为存在下一阶段的确认回复,最后一次不能保证没有丢失。但是理论和工程是不一样的,设计一种考虑忽略最后一次确认消息,那么一种可容忍的协议。 


这种协议这里称为“共识”,结合在分布式系统中,共识假设系统中有n个节点,允许最多有f个节点崩溃,那么正常工作节点就是n-f,认为系统中至少要有n-f个节点是正常的。


某一个节点发起请求x,那么在这样的环境中系统还是能达到最终一致。这个系统一致还要求三个条件:


  • 一致性:所有正常节点输入确定值一致。


  • 可终止:所有正常节点在规定时间内结束一轮抉择。


  • 有效性:输入的确定值是由系统中某个节点发起。

理想化的两阶段协议


1.step-1

2.客户端发起请求至所有分布式的服务器

3.step-2

4.if

5.发起请求的客户端获得了所有的服务器的锁

6.then

7.客户端一次发送消息,结束后解锁

8.

9.else

10.客户端未获得所有服务器的锁

11.重新进入step-1

12.end


这是一个理想化的模式。类似数据库系统,第一阶段就是事务的准备阶段,第二年阶段就是提交或者回滚。


问题: 


那么通过两阶段,出现节点故障的状态,那么请求无法完全,理想化的两阶段协议必须要求节点都正常,如果只是一部分服务器处于锁的状态,将无法正常完成整个过程。且客户端将无法判断服务器节点锁的状态,导致系统出现故障,问题:如何有效解决这种这种模式?

PAXOS


在票上加一个序列号,服务节点在收到票的时候记录票的序号,保证票不重复和本地记录的一致。通过超过半数的票来作为容错机制。

票协议:


  1. step-1

  2. 客户端向所有节点发送带序号的票

  3. step-2

  4. if

  5. 客户端收到半数服务节点收到票的回复

  6. then

  7. 客户端再次发起票,且加上命令消息一起发送给所有服务器

  8. 服务器节点收到消息,判断票有效性后,存储命令消息

  9. 服务器返回客户端信息


  10. else

  11. 客户端等待,返回step-1

  12. end if

  13. step-3

  14. if

  15. 客户端收到半数服务器的返回客户端消息

  16. 客户端通知所有服务器执行之前的命令

  17. else

  18. 客户端等待,返回step-1


  19. end if


这种票协议还是会出现服务节点存储本地票号,但是客户端在发起请求的时候票号会不一致,且命令存储会出现不一致。故再对这种模式进行改进。


PAXOS大致流程:


引入本地记录票号的计数、半数确认容错。




服务端 客户端
初始化 初始化
票号t=0、命令c 票号Tmax=0、命令C、存储命令的票Tc
step-1 step-1
发起请求、t=t+1,请求票号为t

服务节点判断:t>Tmax、那么Tmax=t,回复确认(Tc、C)
step-2 step-2
客户端如果收到半数服务节点回复确认、选择(Tc、C)验证Tc>0、那么c=C、发送消息p(t、c )

服务节点收到p、判断t=Tmax、那么C=c、Tc=t、回复成功
step-3 step-3
接收到半数以上服务节点回复成功,向每个服务节点发送执行c操作



说明:


PAXOS中有三阶段,三角色(提案者、接收者、学习者) 


上述流程中一个p(t、c)称为一个提案,那么提案根据算法存储在半数以上的服务器,那么后续再出现新的p(t、c)则因为t的顺序判断,故会顺序执行。


可以通过反证法,同时出现两个p(t、c)出现在服务节点,且都超过半数,那么两个p提案在服务器之间肯定会有一个不为空的交集。根据两个p中t的顺序号,那么肯定有一个p提案被存储在服务器节点中,成为有效提案。


在step-2中t为判断为与最高票编号比较,于是执行之前已经存储的p提案中的c命令。


场景分析:


  • 如果成功p提案的客户端没有故障,那么直接告诉所有服务器执行命令c


  • 如果客户端在没有告诉服务器执行命令的已经出现故障,那么服务器等待下一个客户端获得提案再执行命令。后续客户端发送请求的时候,服务器即可告诉客户端之前有一个提案待执行,避免再次发送提案。


  • 如果一般服务器出现故障,没有达到半数,客户端无法正常获得回复工作。


  • 如果出现执行多命令情景,那么引入实例、增加实例编号,c命令选中执行,客户端通过新的实例编号来启动新的实例。且服务器通过询问附近服务器确认一致的决议。


  • 算法中p2p网络环境下,每一个节点可以是单一角色、也可以是多个角色。


Leslie Lamport 1989年提出了Paxos这个词汇,但是论文在1998年发表,论文太过于艰涩,很多人都无法明白。 


1998年分布式系统问题已经开始受到重试,2006年谷歌大数据相关论文中,在大数据管理核心技术-容错方面采用了Paxos相关机制,故Paxos开始受到的普遍的关注和重视。


Paxos的应用: 


数据库相关:Chubby、ZooKeeper、Nutanix等 
域名服务器:Name Server 
配置管理:config管理。


5.17号,祝福“云茯苓”生日快乐,感谢对磨链社区的支持。

区块基础-容错Paxos




磨链社区-区块链导航平台 。基本框架上线:https://hao.mochain.info/   欢迎一块来补充内容,建立一个区块链技术社区有内容有价值的平台。


————/磨链热文HOT /————



END -


群内工作

  • 磨链(mochain)社区输出计划 
    招募条件: 
    1.需要一定的区块链基础。 
    2.对上述任何一方面有较为深入理解。 
    3.每周能保证一定的空余时间来折腾。 
    4.了解github相关 
    5.人员进行筛选,时间周期比较长。 
    有意向联系我。

  • 磨链在线课程 
    对自己擅长方面有一定的沉淀,愿意开设在线课程,会考虑和一些专业培训机构合作,要求有一定的一线经验,实实在在分享课程。有兴趣的联系,有偿工作。


磨链(mochain)社区内容输出计划

磨链社区内容输出计划,社区内划分6个模块,针对各模块细化分解,社区成员领取任务进行写作内容输出。审核通过后发布,整个过程中即是自己的一个学习提高,同时也有交流分享。

序号 项目 内容输出计划
1 区块链基础 包括密码学、共识机制、分布式、P2P网络等
2 以太坊 入门到精通,循序渐进学习以太坊
3 比特币 入门到精通,比特币相关内容深入琢磨
4 超级账本 架构、运行原理、共识机制、环境搭建配置开发相关
5 EOS 概念介绍,由浅入深,持续学习
6 DAG DAG的概念、原理机制、项目技术解读

PS:想加入磨链的,或者具体参与到磨链社区内容输出计划的,请加磨链组织者微信(jackyjin09)。欢迎每一位区块链技术爱好者加入磨链,一块琢磨区块链技术。


关于磨链和相关合作

磨链”---取磨炼之意,旨在普及区块链技术,磨炼技术,更好投身区块链行业。有兴趣一块琢磨区块链技术,联系笔者微信(jackyjin09)。 

磨链社区是一个纯粹的技术社区,欢迎相关技术合作,在不违反原则的前提下,积极参与合作。 


 


你也可以在这里找到我们:

1. PC官网:http://mochain.info 
2. Github : https://github.com/mochain 
3. Gitter 聊天: https://gitter.im/mochain 
4. 知识星球: https://t.zsxq.com/M3BMVZN 
5. 知乎:https://www.zhihu.com/people/mochain 
(持续更新中)

以上是关于区块基础-容错Paxos的主要内容,如果未能解决你的问题,请参考以下文章

从Paxos到拜占庭容错,兼谈区块链的共识协议

区块链共识之Paxos算法理解与实战

初探|Zookeeper基础之Paxos算法详解

Zookeeper协议篇-Paxos算法与ZAB协议,Java语言基础知识总结

区块链解读28-PAXOS算法

Euroclear和Paxos结束区块链黄金结算伙伴关系