应用实例:熔断器 Circuit Breaker 状态机
DFA 的用途不止于「识别字符串」——凡是**「系统此刻处于某个状态,来一个事件就跳到下一个状态」**的结构,本质都是一台有限状态机。这里取一个微服务中常见的实例:熔断器 (Circuit Breaker)——它就是一台只有三个 state 的 DFA,在下游故障时保护服务不被拖垮。
三个 state:CLOSED(正常放行)、OPEN(已熔断,请求直接拒绝 fail-fast,不再打到故障的下游)、HALF_OPEN(冷却后放一个试探请求检测下游是否恢复)。事件 = 请求成功 / 失败 / 冷却到期。点下面的按钮发出事件,看它在三个 state
间跳转——这正是 state + transition 的实际形态。
1 · 同一套骨架的不同形态
「state + 一张 transition 表,来事件就跳」——认出这个骨架后,会在许多场景里发现 DFA:
正则引擎 →
Google RE2(Cloudflare 用它在边缘防 ReDoS)、grep、各语言 regex,把模式编译成 NFA/DFA 来线性扫描文本——本系列三条转换正是这条流水线。
词法分析器 lexer
编译器 / JSON / 协议解析的第一步:flex 把正则规则编译成一张 DFA 转移表,逐字符跳状态切出 token。语法高亮同理。
入侵检测 / DPI
Snort、Suricata、Intel Hyperscan 用 NFA/DFA(+ Aho-Corasick)在网络流量里一遍扫出成千上万条攻击特征。
协议与 UI 状态机
TCP 连接(LISTEN→SYN_RCVD→ESTABLISHED…)、订单 / 工单流转、表单向导、播放器(播放 / 暂停 / 缓冲),都是显式的有限状态机。
熔断器这台机器和 DFA 一页的「能被 3 整除」机器结构完全一致——都是「画出 state、连上带条件的边、来一个输入跳一次」。总览页串起它从 regex 一路构造出来的全过程。