一种零停机一致性协议切换方法

文档序号:35664770发布日期:2023-10-06 20:02阅读:20来源:国知局
一种零停机一致性协议切换方法

本发明属于分布式系统共识,具体涉及一种零停机一致性协议切换方法。


背景技术:

1、随着人工智能、物联网、5g等相关技术的快速发展以及数字经济在全球的加速推进,数据资源已经成为全球竞争的关键力量。目前,全球的数据量仍处于高速增长的阶段。根据权威机构的统计与预测,在2020年时全球的数据产生量已经达到47zb,预测到2035年,数据量将达到2412zb。传统的集中式存储系统已经不能高效可靠的存储这些巨量数据,越来越多的公司改用分布式存储系统。

2、分布式存储系统使用多台独立的设备分散的存储数据。这种存储系统可以使用多台设备分担存储负荷,通过计算机网络连接分散的存储单元,保证系统在逻辑上统一。但分布存储会带来数据丢失不可恢复等问题。当数据被多个用户访问和读取时,副本之间可能会出现不一致的问题,这会直接影响系统的一致性和准确性。因此,数据的一致性是分布式系统中的一个主要挑战。

3、为了解决分布式一致性这一问题,研究者们提出了多种经典的一致性协议算法。然而现有的每一种一致性协议设计都是为了满足特定的配置而进行的优化改进,因此虽然这些协议在它们优化设计的场景下表现较好,但是没有一种协议可以在不同场景下一直保持较好的性能,因此需要根据不同的工作负载仔细选择适当的协议,才能使得该系统具有较佳的性能。

4、现有的最朴素的协议切换的解决思想是“停止-重定向”(stop-redirect)这种简单直接的切换方案。当工作负载改变时,向集群中的所有节点发送停止请求,当所有节点的实例执行完成将系统置于静止状态,再通知启动初始化另一个一致性协议。

5、但是这种方法主要存在两个问题:一方面是协议切换期间的过渡是不容错的,这可能会导致系统在切换期间崩溃;另一方面,在节点确认停止请求后,如果有新的提交命令将不会被处理,系统将遭受停机时间的困扰。

6、在此背景下,提供一种恰当的切换解决方案是提高系统性能的关键一步。


技术实现思路

1、针对现有技术的不足,本发明设计一种零停机一致性协议切换方法。

2、一种零停机一致性协议切换方法,具体由一致性协议调度层和多个一致性协议两部分实现;所述切换方法为每个客户端请求添加唯一命令序列号mcpseqno和一致性协议标签mcpprocessedby在一致性协议调度层中使用;序列号mcpseqno在一致性协议调度层中是递增的,当状态机在执行命令时,会跟踪保存每一个客户端已经被执行过的最近的也即是最大的序列号;当状态机开始执行一条日志里边的命令时,一致性协议调度层比较其序列号,查看是否为待执行的下一条命令,如果是则直接执行,否则就忽略掉这个命令,返回上次执行此命令的结果;

3、所述一致性协议调度层,通过运行paxos协议将复制状态机的实例化过程抽象为一个通用层次,通过这个更高的抽象层来执行更新复制状态机的状态;

4、所述一致性协议,在初始时给定一组一致性协议{p1,p2...pn},一致性协议调度层负责从一个一致性协议切换到另一个一致性协议;通过设置改变正在运行的协议实例到另一个协议实例,使执行更新状态机完成协议切换;

5、所述协议切换通过组合不同的一致性协议实例来配置通用的状态机,将切换适配功能抽象到一致性协议调度层,把多种一致性协议视为黑盒,更模块化的使用这些不同的一致性协议,在初始化时集成众多一致性协议;进行一致性协议切换的方法具体为:

6、首先将一致性协议在节点初始化时同步初始化运行,并且服务器为每个一致性协议注册协议执行过程中每个阶段的消息包,将消息包转发给各个一致性协议,使某个一致性协议拦截它所需要的消息包;无论是哪个一致性协议的消息包请求到达,协议切换时服务器都不会停止处理客户端的请求;

7、将一个一致性协议实例工作的生命周期称为period,每当执行切换时,一个新的一致性协议的实例会进入工作状态,开始下一个period,period的生命周期被严格的绑定在一致性协议的实例上;由于repass-switch在启动时同步初始化了一致性协议,所以无论何时在一个节点中启动一个新period,所有其他节点都会同步启动新period,这些节点也都是切换后一致性协议实例的参与者;

8、每当进行一次切换时,都会启动一个新period,因此在此之后,新的请求命令的排序是在新period中发生的,在切换期间的任何时间内,两个一致性协议实例都在对客户端提交的命令进行排序;即上一个period中的实例对切换开始时未决定的命令排序,而新period中的实例对从切换过渡开始的命令进行排序;这样一致性协议调度层不仅确保命令按照不同的period被顺序调度执行,在同一个period中也保证了正在运行的各个一致性协议实例的顺序,实现了处理命令的连续性;

9、当客户端发出第一条请求命令时,一致性协议调度层为其添加命令序列号mcpseqno,并且为其添加该命令所使用的一致性协议标签mcpprocessedby;此时客户端并不知道哪个服务器是领导者,它会向任一节点发送命令,如果该节点不是领导者,则将请求命令转发到领导者节点;并由当前运行的一致性协议consensus1的实例,开始处理客户端请求;当工作负载发生变化,客户端发出新的请求命令,一致性协议调度层接收到此命令根据一致性协议标签切换成新的一致性协议consensus2处理;根据一致性协议的属性,在收到大多数节点的确认消息后,所有正确的节点都将创建并初始化将要切换到的新的一致性协议的实例,即新的period2启动并调用consensus2的实例;当其他节点准备切换时,在收到节点的确认消息后,所有正确的节点都将创建并初始化将要切换到的新的一致性协议的实例;同时一致性协议调度层通过比较命令序列号mcpseqno查看是否是序列中待执行的下一个,如果是则执行更新状态机状态,开始处理请求命令;由此实现一致性协议之间以动态容错的方式不停机的协调切换,最小化协议切换延迟;

10、对于一个状态机命令,其执行过程包括以下:

11、根据协议调度层缓存的命令序列号检查该命令是否为下一个待执行的命令,如果是则进入不是则直接将该命令放入待执行缓冲区;更新协议调度层缓存的序列号,同时状态机执行该命令;对于待执行缓冲区的每一个命令,判断其是否为下一个待执行命令,如果是则更新协议调度层缓存的序列号并使状态机执行该命令,同时从缓冲区移除该命令,如果不是下一个待执行的命令则直接退出循环;

12、所述待执行命令缓冲区,需要满足以下性质:

13、(1)缓冲区的命令需要保证局部有序;

14、(2)当从缓冲区取走一个命令后,需要保证缓冲区中的下一个命令是缓冲区中所有命令中序列号最小的命令;

15、(3)当一个新的命令因无法执行而写入缓冲区时,需要保证在写入之后缓冲区中的下一个命令是缓冲区中所有命令中序列号最小的命令。

16、本发明有益技术效果:

17、与现有“停止-重定向”方案对比,本发明所提出的一致性协议的切换方法能够使协议在运行时切换,并且可以使用户的感知延迟最小化。具体包括以下有益效果:

18、(1)减少用户的感知延迟;本发明所提出的一致性协议的切换方法仅在协议切换时接收更改命令,并不受来自节点请求的影响。同时一致性协议调度层通过运行paxos协议保证其可用性。这种通过一致性协议调度层协调一致性协议之间的转换,可以在转换过程中不停机的平稳过渡,最小化协议切换延迟。

19、(2)容错性;“停止-重定向”方案拒绝在转换过程中提交给系统的任何新命令,并且不能容错。本发明所提出的一致性协议切换方法能够在运行时切换共识协议,从而能够对动态变化的工作负载进行动态选择不同的一致性协议,并保证在过渡期间零停机。使得协议过渡期间是可容错的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1