算法与数据结构 / 有限自动机 · DFA / NFA / regex 与它们之间的转换 / 应用实例:熔断器状态机 待审核 7 / 7
applications · 真实应用

应用实例:熔断器状态机

有限自动机的用途不止于识别字符串。凡是「系统此刻处于某个状态,来一个事件就跳到下一个状态」的结构,本质都是一台有限状态机。下面取微服务中常见的一例:熔断器(circuit breaker),一台只有三个状态的机器,用于在下游故障时保护调用方不被拖垮。

1 · 三个状态与三类事件

三个状态分别是 CLOSED(正常放行)、OPEN(已熔断,请求直接拒绝,不再打到故障的下游)与 HALF_OPEN(冷却期满后放行少量试探请求,检测下游是否恢复)。事件是请求成功、请求失败与冷却到期。

图 1-1 · 熔断器在三个状态间的跳转。可发出成功、失败与冷却到期事件,观察失败计数累积到阈值时跳闸,以及 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 一路构造出来的全过程。