应用实例:熔断器状态机
有限自动机的用途不止于识别字符串。凡是「系统此刻处于某个状态,来一个事件就跳到下一个状态」的结构,本质都是一台有限状态机。下面取微服务中常见的一例:熔断器(circuit breaker),一台只有三个状态的机器,用于在下游故障时保护调用方不被拖垮。
1 · 三个状态与三类事件
三个状态分别是 CLOSED(正常放行)、OPEN(已熔断,请求直接拒绝,不再打到故障的下游)与 HALF_OPEN(冷却期满后放行少量试探请求,检测下游是否恢复)。事件是请求成功、请求失败与冷却到期。
这台机器与 DFA 页那台判整除的机器结构完全一致:画出状态、连上带条件的边、来一个输入跳一次。差别只在字母表的来源,一个是输入串的字符,一个是运行时的事件。
2 · 同一骨架的其他形态
正则引擎 →
Google RE2、grep 与各语言的 regex 实现把模式编译成 NFA 或 DFA 以线性扫描文本,本系列的三条转换正是这条流水线。Cloudflare 在 2019 年那次因回溯失控导致的全站故障之后转用 RE2,图的就是它「无回溯、时间线性」这条保证。
词法分析器 lexer
编译器与 JSON、协议解析的第一步:flex 把正则规则编译成一张 DFA 转移表,逐字符跳状态切出 token。编辑器的语法高亮同理。
入侵检测与 DPI
Snort、Suricata 与 Intel Hyperscan 用 NFA、DFA 加 Aho–Corasick,在网络流量上一遍扫出成千上万条攻击特征。
协议与界面状态机
TCP 连接(LISTEN → SYN_RCVD → ESTABLISHED 等)、订单与工单流转、表单向导、播放器的播放与暂停与缓冲,都是显式的有限状态机。
总览页串起了这台机器从 regex 一路构造出来的全过程。