Skip to main content

规格 · 非功能基线

适用范围​

约束所有涉及时限、容量、并发与时钟的功能,规定这些量的口径与相互约束,并要求各功能显式声明具体取值。

不约束:具体取值的最终选择(由各功能在其中声明,且必须满足本规格的相互约束);硬件与网络容量规划。

规范条款​

时限基线​

  1. 涉及有效期的功能必须声明四个量,且必须满足下列相互约束:
量含义相互约束
租约时长有效期总长度必须 ≥ 最小支持值,且 ≤ 最大支持值
心跳间隔续约节奏必须 ≤ 租约时长 ÷ 3
结算时限从期望变更到必须结算完毕的时限必须 ≤ 租约时长
看门狗阈值判定停滞并强制终止的阈值必须 < 最小支持租约时长
  1. 必须声明最小与最大支持租约时长;必须满足:最大 ≥ 最小 × 2。
  2. 一切到期比较必须以服务端时钟为准;必须不设客户端宽限期(必须遵循API 与传输)。
  3. 客户端本地截止必须只用于更早收敛;必须不用于延后判定。
  4. 任何"必须在时限内完成"的要求必须给出:起点、终点、超时后的行为。

超时后的行为​

  1. 每个时限必须声明超时行为,且必须落在下列之一:
超时行为适用
收敛为失败状态无法确定或副作用不可逆
重试操作幂等且可安全重复
降级有明确的安全降级路径
告警并保持需要人工介入且不能自动处置
  1. 必须不存在"超时后无行为"的时限;必须不以静默继续代替超时处置。
  2. 超时判定必须由权威方(通常为服务端)执行;必须不依赖客户端自述超时。

重放与重试上界​

  1. 无工作类结果必须声明有界重放窗口,且必须 ≤ 租约时长(必须遵循幂等与一致性)。
  2. 自动重试必须有上界,且必须同时声明次数与总时长上界;必须不只声明其一。
  3. 触达上界必须产生告警并转为人工处理。

并发口径​

  1. 每个功能必须声明其并发度:同一作用域内允许同时进行的执行数。
  2. 并发度必须是显式设计选择,并必须说明该选择是稳态设计还是阶段性权衡;必须不隐含为"未定义"。
  3. 若并发度为 1,必须声明"第二请求如何处置"(拒绝 / 排队 / 冲突)。
  4. 需要本地单实例的场景必须声明:必须不把本地锁当作跨进程或跨主机的权威判据。

容量口径​

  1. 每个功能必须声明下列容量上界,必须不留空:
必须声明的上界说明
单批事件 / 消息大小含条目数与总字节数的口径
单次操作涉及的对象数例如子任务、子代理、批量条目
单作用域并发对象数与并发度一致或更严
重试与重放窗口与时限基线一致
  1. 超出上界必须失败关闭;必须不静默截断、丢弃或部分处理。
  2. 上界必须同时作为成本上界与攻击面上限声明理由。

时钟​

  1. 允许的时钟偏移必须显式声明;必须不假设各参与者时钟一致。
  2. 服务端时间必须由服务端写入;必须不接受客户端提交的时间作为权威。
  3. 依赖单调性的量(序号、修订、代际)必须由服务端生成并保证单调;必须不依赖时间戳实现单调性。

声明与校验​

  1. 上述四类口径必须在功能的设计文档中集中声明一处,且必须可被检查;必须不散落在多处。
  2. 取值变更必须按版本与兼容判定兼容性;必须不静默调整。

违反时的失败语义​

违反情形必须的行为
时限四量缺失或违反相互约束视为规格违反;评审阶段必须拦截
时限无超时行为必须补超时行为
无界重试或无界重放窗口必须补上界
并发度未声明必须显式声明
容量上界留空必须补齐
超上界时静默截断必须改为失败关闭
以客户端时间为权威必须改为服务端时间

校验方式​

校验对象判据失败表现
时限约束心跳间隔 ≤ 租约 ÷ 3;结算时限 ≤ 租约;看门狗阈值 < 最小租约任一不满足即失败
租约范围最大 ≥ 最小 × 2不满足即失败
超时行为每个时限必须能定位到超时行为缺失即失败
上界存在重放窗口与自动重试必须均有显式上界无界即失败
并发度显式并发度必须可定位到声明,且说明权衡性质未声明即失败
容量完整四类容量上界必须全部有值留空即失败
超界行为构造超上界输入必须失败关闭静默截断即失败
时钟权威篡改客户端时间不得改变判定改变即失败
单调性来源序号 / 修订 / 代际必须由服务端生成由客户端生成即失败

相关规格​