第2章 需求与约束分析:业务离线场景识别、数据一致性等级、网络不稳定性假设、设备能力约束

离线优先架构的成败首先取决于对业务场景和物理约束的精准识别。本章围绕四类核心输入——业务离线场景、数据一致性等级、网络不稳定性假设、设备能力约束——逐一展开分析,并输出对架构边界、系统分层、模块职责、数据流与信任链路、选型权衡、风险点、落地步骤和验收标准的直接影响。

2.1 业务离线场景识别

离线场景不是简单的“断网可用”,需要从用户操作流程中分离出必须在线和可以离线完成的子任务。以下是通过任务分解法识别的三类典型离线场景:

离线场景分类典型任务离线时长要求本地数据量估算对架构边界的影响
设备本地控制开关、参数调节、状态查看≥ 8 小时(单班次)≤ 10 MB(配置 + 日志)UI 层 + 控制逻辑必须全闭环于本地进程
现场数据采集传感器读数、巡检记录、照片上传≥ 24 小时(跨班次)≤ 500 MB(含非压缩图片)本地写缓存 + 顺序日志,同步为异步任务
离线报表查看昨日产量、告警历史、趋势图≥ 48 小时(周末)≤ 200 MB(预聚合数据)服务端推送快照,本地只读仓库

场景识别完成后,架构边界清晰:所有用户可见操作(点击、滑动、输入)必须在本地 500ms 内响应,只有在触发同步时才允许网络依赖。同时,拒绝将离线功能退化为“空页面”或“弹窗提示无网络”——离线状态下界面功能完整度必须保持在 80% 以上。

2.2 数据一致性等级

离线场景天然引入最终一致性,但不同业务的写冲突容忍度差异极大。我们按 CRDT + 操作日志 方案定义三个一致性等级:

等级名称写冲突处理适用场景同步策略
L1强最终一致服务端最终裁决,客户端乐观更新设备参数(如温度阈值)——误冲突可导致设备误动作每次网络恢复时全量拉取服务端状态
L2可合并一致CRDT 自动合并(LWW-Register / RGA)巡检记录、文本备注——允许乱序合并增量同步 + 冲突检测
L3弱一致客户端独立写入,服务端以最新时间戳为准浏览历史、用户偏好——丢失可接受批量上传,不做冲突解决

数据流与信任链路决策:L1 场景下,信任根始终在服务端,本地修改需附带完整操作前状态哈希;L2 场景下,信任链路为客户端 CRDT → 服务端 CRDT → 持久化,双方互验因果序;L3 场景下,信任模型简化为“客户端为最终生产者,服务端仅做日志存储”。

2.3 网络不稳定性假设

我们采用悲观假设法定义网络的三个状态级别,并以此驱动系统分层与模块职责:

网络状态定义(离线优先专用):
  ONLINE      : 连续 30s 内 RTT ≤ 200ms,丢包率 ≤ 1%
  DEGRADED    : RTT 200-800ms,丢包率 1%-5%,或者间歇中断(单次 ≤ 5s)
  OFFLINE     : 连续 30s 无任何网络响应,或者弱信号下收不到任何 ACK

在此假设下,系统必须支持无感状态切换:

  • 网络从 ONLINE 切换到 DEGRADED 时,不阻塞用户操作,仅降低同步频率与并发数。
  • 网络切换为 OFFLINE 时,所有网络调用必须由同步调度器统一接管,切换时间 ≤ 100ms。
  • 网络恢复时,同步引擎应按优先级(L1 → L2 → L3)回放本地操作日志。

选型权衡:为了满足状态切换的时效性,放弃传统的 OkHttp 直连,采用自定义ConnectionManager + 本地 Socket 探测 + 应用层心跳合并。代价是网络层代码复杂度升高,但换来对断续网络的精确感知。

2.4 设备能力约束

目标设备为工业手持终端与加固平板,硬件配置如下:

资源项典型值设计约束
CPU4 核 Cortex-A53 @ 1.2 GHz本地 CRDT 合并线程 ≤ 1 个,峰值 CPU 占用 ≤ 40%
RAM2 GB应用常驻内存 ≤ 200 MB(含 SQLite 缓存)
存储16 GB eMMC + 64 GB SD离线日志与快照总配额 ≤ 4 GB
电量5000 mAh / 10h 工作同步操作峰值功耗 ≤ 1.5 W,避免触发温控降频

这些约束直接影响模块职责划分:

  • 数据层必须采用WAL + 批量提交模式,避免频繁 I/O 抢占 CPU。
  • 同步引擎在 DEGRADED 状态下应主动降级:压缩图片(quality=60%)、合并多条日志、使用 ChunkedUpload 避免 OOM。
  • UI 层不能执行任何 CRDT 合并或文件 IO 操作——这些必须由后台Worker线程处理,主线程仅负责渲染。

2.5 架构影响总览

将上述需求与约束映射到架构方案关键维度,整理如下:

架构维度核心结论对应约束来源
架构边界离线场景全覆盖,只同步依赖在线2.1 离线场景分类
系统分层明确分离 在线同步层 与 离线应用层2.3 网络状态切换 + 2.4 资源约束
模块职责数据一致性管理由 ConflictResolver 模块承担,独立于业务逻辑2.2 一致性等级 + 2.4 内存约束
数据流与信任链路L1 场景信任服务端;L2 场景双向验证因果序2.2 一致性等级
选型权衡放弃标准 HTTP 库,自研 ConnectionManager;使用 CRDT 而非 OCC2.3 网络假设 + 2.2 写冲突处理

2.6 风险点与权衡

  1. CRDT 膨胀风险:L2 场景下 CRDT 元数据占用持续增长。落地措施:设定单文档 CRDT 版本上限(5000 次操作后触发 squash)。
  2. 离线状态与在线状态数据不一致导致的用户困惑:UI 必须在关键字段旁显示 同步状态指示器(如 🟢/🟡/🔴 圆点),并允许手动触发即时同步。
  3. 设备存储写磨损:频繁的 SQlite WAL 日志 + 图片缓存可能降低 eMMC 寿命。已规划使用 临时文件 + 定期 GC 策略,且每天限制总写量 ≤ 500 MB。
  4. 同步优先级反转:低优先级 L3 数据可能堵住 L1 同步队列。必须实现优先级队列 + 饥饿防止——L1 请求可跳过 L3 待发送队列。

2.7 落地步骤与验收标准

步骤操作产出物
1绘制完整离线场景矩阵(含异常路径)离线场景需求文档 v1.0
2定义每个场景的数据一致性等级和 CRDT 类型一致性等级决策表
3编写网络状态切换 mock 测试桩(模拟 ONLINE → DEGRADED → OFFLINE)网络状态模拟库 + 测试用例
4基于设备能力约束评估框架:内存、CPU、存储各设置预警阈值资源约束检查清单
5将本章输出正式合并到架构设计文档的“约束与假设”章节架构设计 v0.2

验收标准:

  • 三种离线场景均能在 mock OFFLINE 状态下完成核心功能且无崩溃。
  • L1、L2、L3 数据在同步后一致性等级满足定义(测试脚本自动验证)。
  • 网络状态切换感知延迟 ≤ 150ms(从实际断网到应用层切换)。
  • 在所有约束条件下,应用内存峰值 ≤ 220 MB,CPU 占用 ≤ 45%。
架构决策记录:本章得出的约束将被视为“不可变更的硬条件”。任何后续架构改动如果导致内存超限、网络切换延迟超标或一致性等级降级,必须通过变更评审。
离线场景识别与约束 → 架构分层映射 设备本地控制 现场数据采集 离线报表查看 UI 层 离线操作闭环 同步层 网络状态切换 / 优先级队列 数据层 & CRDT引擎 本地WAL / 冲突合并 网络不稳定 ONLINE/DEGRADED/OFFLINE 设备能力约束 2GB RAM / 16GB eMMC 每个离线场景对应一到多个约束条件,共同决定系统各层的职责边界 L1 / L2 / L3 一致性等级独立映射到 CRDT 引擎中的具体合并策略 离线场景(输入) 系统分层(方案) 约束条件(硬限制)