一致性协议之状态机

复制状态机(State machine replication)

1. 有限状态机(Finite-state machine, FSM)

搬运自wiki

https://en.wikipedia.org/wiki/Finite-state_machine

这个部分是FSM的简单介绍,如果需要进一步理解,可以翻阅wiki和相关的书籍,本文中为了便于理解,部分的关键词没有翻译成中文,还是使用英文单词表示。

FSM是自动控制理论中的内容,也称为状态机(state machine)、有限自动机(finite-state automaton, FSA)。

FSM是一个计算模型,拥有一系列的state且在某一个时刻只有一个state。FSM收到一些input时,会从当前的state切换到另一个state,这个过程称为transition。一系列state、初始state以及触发transition的一系列input,共同构成了FSM。

1.1. 旋转闸门

地铁口经常使用的旋转闸门就可以用状态机来表示,闸门就只有两个state: locked和unlocked,他有两个input: push和coin,push表示游客推闸门,coin表示游客向闸门中投币。

下图所示的就是旋转闸门的状态转移图,最初,手臂被锁定,阻止进入,防止顾客通过。在旋转栅门上的插槽中放置硬币或代币会解锁臂,从而允许单个客户推入。客户经过后,手臂将再次锁定,直到插入另一枚硬币为止。

上述的状态转移图可以表示为下面的状态转移表。

上面的转移表比较复杂,可以转化为下面比较直观的转移表。

这个表的意思就是如果当前闸门是Locked状态,当有coin作为input的时候,闸门会变为Unlocked。这张表就包括了状态转移的过程。

1.2. 应用

FSM的应用很广泛,在硬件电路中可以使用逻辑器件进行不同状态的区分;而在软件领域中,编译器的前端词法分析也是使用FSM来实现的。

2. 复制状态机(state machine replication)

搬运自wiki

https://en.wikipedia.org/wiki/State_machine_replication

在CS领域,复制状态机是实现fault-tolerant服务的主要方式,通过复制server并且协调clients对server副本的访问。

2.1. 分布式系统

分布式软件一般都有很多个客户端和服务组成。每个服务都由一个或多个服务servers构成。当一个server无法应对大流量的客户端访问时,分布式服务会将server复制成多个副本将访问的流量分流给各个副本。但是各个副本会存在数据不一致的情况,使用复制状态机可以解决这个问题。

2.2. 状态机(State machine)

状态机有下面几个特点:

  • 一系列状态
  • 一系列输入
  • 一系列输出
  • 过渡方程
  • 输出方程
  • 开始状态

一个状态机开始于给定的开始状态。每个收到的输入都通过过渡方程和输出方程来产生一个新的状态以及相应的输出。这个新的状态会一直保持到下一个输入到达,产生的输出会传递给相应的接收者。

分布式服务中要求状态机具有确定性:同一状态机的多个副本以“开始”状态开始,并且以相同顺序接收相同输入将到达已生成相同输出的相同状态。这也就是复制状态机的理解。

总结

分布式服务中,为了保证流量不会压垮服务器,会将一个server复制成很多副本同时提供相同的服务。多副本服务就会出现副本的一致性问题,比如client1将replica1的X值设置为1,而client2将replica2的X值设置为2,这样如果另一个客户client3从不同的副本获取到的X值可能是1也可能是2,这就导致了副本的一致性问题。

复制状态机就是用来解决副本的一致性问题的,每个副本都是状态机的实现,而且是确定状态机(Deterministic finite-state machine)。使用状态机来实现每个服务器的副本就保证了对相同的输入,每个副本都会产生一致的输出。并且,将每个客户端的请求汇总成一个序列,每个副本都按照这个序列来执行,这就解决了副本的不一致问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值