状态机基础概念回顾
状态机是埋点生命周期管理的核心数学工具,它通过限定系统可能处于的状态以及由事件触发的转换来精确描述行为。理解这些基本概念是将业务埋点映射为可控模型的前提。
核心概念
| 术语 | 定义 | 埋点场景对应 |
|---|---|---|
| 状态 (State) | 系统在某一时刻稳定的“快照”,反映了内部变量与对外表现 | 埋点生命周期阶段:初始化、激活、暂停、终止、异常 |
| 事件 (Event) | 外部或内部产生的触发信号,推动状态变迁 | SDK调用(init、track、pause、resume)、网络恢复、超时 |
| 转换 (Transition) | 在收到某事件后从一个状态移动到另一个状态的过程 | 从INIT → ACTIVE(触发事件:SDK启动完成) |
| 动作 (Action) | 在转换过程中或进入/离开状态时执行的副作用 | 记录日志、发送缓存数据、回传埋点 |
有限状态机模型(FSM)
有限状态机由五个元素组成:(Q, Σ, δ, q0, F)。
- Q – 状态集合(
{INIT, ACTIVE, PAUSED, ERROR, END}) - Σ – 输入事件集合(
{start, pause, resume, fail, stop}) - δ – 转移函数(
Q × Σ → Q) - q0 – 初始状态(
INIT) - F – 终态集合(
{END})
在埋点SDK中,典型的FSM定义可通过JSON描述:
{
"states": ["INIT", "ACTIVE", "PAUSED", "ERROR", "END"],
"events": ["start", "pause", "resume", "fail", "stop"],
"initial": "INIT",
"final": ["END"],
"transitions": [
{"from": "INIT", "event": "start", "to": "ACTIVE", "action": "logInitComplete"},
{"from": "ACTIVE", "event": "pause", "to": "PAUSED", "action": "flushCache"},
{"from": "PAUSED", "event": "resume","to": "ACTIVE", "action": "loadCache"},
{"from": "ACTIVE", "event": "fail", "to": "ERROR", "action": "reportError"},
{"from": "ERROR", "event": "retry", "to": "ACTIVE", "action": "retrySend"},
{"from": "*", "event": "stop", "to": "END", "action": "cleanup"}
]
}
状态图符号标准
| 符号 | 说明 | FSM中含义 |
|---|---|---|
| 实线圆角矩形 | 状态节点 | 如 ACTIVE、PAUSED |
| 实心箭头 | 带事件标签的转换 | 标注事件名,如 pause |
| 实心圆(起始) | 初始伪状态 | 指向 INIT |
| 同心圆(终止) | 终态 | 从 END 引出 |
| 虚线矩形 | 并发区域或正交区 | 埋点常多个通道,用此表示并行状态 |
与埋点生命周期的映射关系
埋点从创建到销毁的每个阶段都可以用状态机精确建模,从而保证行为的确定性、可审计性和可恢复性。
| 埋点阶段 | 状态 | 关联事件 | 转换动作 |
|---|---|---|---|
| SDK启动 | INIT → ACTIVE | initSuccess | 注册监听、加载持久化队列 |
| 用户暂停 | ACTIVE → PAUSED | pause | 清空缓冲区、持久化缓存 |
| 用户恢复 | PAUSED → ACTIVE | resume | 从本地缓存恢复待发送埋点 |
| 网络故障 | ACTIVE → ERROR | networkFail | 记录错误日志、启动重试计时器 |
| 重试成功 | ERROR → ACTIVE | retryOk | 清除错误标记、继续发送 |
| SDK关闭 | 任意状态 → END | shutdown | 释放资源、写最终日志 |
关键洞察: 状态机模型能确保埋点不会在“暂停”时发送数据(非法转换被禁止),也不会在“错误”状态下无限重试(通过附加动作控制重试次数)。这正是状态机驱动埋点管理的最大优势。
后续章节将基于上述基础概念构建完整的埋点状态机SDK,包括配置驱动、事件总线、动作插件等可复用架构。