“状态机提供确定性转移语义,复制日志提供共同命令前缀;Paxos、Raft与Viewstamped Replication是日志层的具体协议。状态机复制由此支撑高可用键值存储、配置服务、数据库…”
形式陈述
最基础的状态机是无标签转移系统
其中
需要记录动作名称时,可把上述骨架扩展为标号转移系统
并写
表示在状态
直觉
状态应是对未来行为充分的历史摘要:一旦当前状态和后续输入相同,模型允许的未来不应再依赖已被状态遗忘的历史。无标签关系适合只研究可达性和轨迹;动作标签说明“哪一步发生了”;输入输出函数则同时保留外部调用与可观察结果。确定性表示同一状态和命令给出唯一后继与输出,非确定性则保留多种允许演化,用来表示环境、调度、随机选择或抽象尚未决定的细节。
例子与边界
若只观察是否占用,互斥锁可有 unlocked 与 locked 两个状态;若还要检查释放者合法性,就须细化成 owned(P)、owned(Q) 等状态。历史“P 获锁”与“Q 获锁”都投影成 locked,但下一步 unlock(P) 在两者中的合法性不同。这个具体差别说明:状态是否充分,取决于要保留的操作接口,不能只看图是否简洁。
计数器状态为整数
推论与应用
状态集合与转移关系给出最一般的无标号状态机骨架,动作和输入输出再按观察需求逐层加入。轨迹与路径语义从最大执行提取可观察行为;若还要解释状态命题,可在其上建立Kripke 结构。这些语义对象支撑模型检查与安全—活性证明:安全性常归约为所有可达状态都满足某个归纳不变式。
状态机复制让多个副本按同一命令序列运行,要求输入输出转移确定。若命令处理过程中直接读取各自墙钟,即使命令序列相同,副本也可能写入不同时间戳;应把约定的时间值作为共同命令输入,或明确采用能协调非确定性的复制机制。分布式系统则把局部状态机与信道状态组合成全局状态机。
算法序列也可产生状态转移,但评价目标不同。在线算法在请求到达后立刻选择动作并与离线最优比较,动态数据结构则按 update/query 操作序列报告成本;追溯数据结构甚至允许编辑过去操作并重算其后的逻辑历史。这里的状态机提供语义骨架,不替代它们的竞争比、更新界或历史编辑接口。
参考资料
- Nancy A. Lynch, Distributed Algorithms, Morgan Kaufmann, 1996, Chapter 8.
- Leslie Lamport, Specifying Systems, Addison-Wesley, 2002, Chapters 1–2.