跨域专家推导:一个局部优化会改写其他域的边界
缓存命中从 95% 降到 80%,回源从 500/秒变 2,000/秒——一个"性能优化"让数据库从余量充足走到饱和。本页沿依赖图传播一次变化,推导缓存、异步与跨区组合后的系统级后果。
局部优化的跨域传播
一个局部优化可能改变其他域边界:缓存提高读吞吐但扩大陈旧窗口;批量写降低数据库调用但提高重试粒度;全异步降低请求等待但增加任务状态和追踪需求;强同步复制提高耐久性但增加跨区尾延迟。专家级设计应沿依赖图传播变化:流量从 API 转到 MQ 后,容量压力迁移到 Broker 与消费端;提高数据库连接数可能将排队转移到锁或存储;引入新副本也改变切换、RPO 和读一致性。
决策影响不仅包含执行路径,还包括数据生命周期、安全边界、团队值班、部署协调和成本。无法指明负责人和恢复动作的架构边界尚未完成。
一次完整变化:加缓存后会发生什么
基础链每秒1万查询,数据库可持续2000,缓存命中95%时回源500看似充足。命中降至80%回源2000已达持续上限;全失效是1万,若无保护会引发数据库排队、超时与重试。缓存不只是性能优化,还改变事实读取、新鲜度与恢复依赖。
引入版本化值、合并加载与回源并发上限可缓解,但"允许旧值"要按数据类型判断:内容标题可陈旧,权限撤销与余额裁决不能同样处理。回填旧值与删除并发需要版本守卫和墓碑,直接设短TTL不是正确性证明。
再加入异步与跨区
把写后通知改Outbox减少同步耦合,增加积压期限、幂等与查询;跨区异步复制增加RPO与成功应答的风险。若业务要求跨区故障后仍不丢已确认写,必须重新审视复制提交,而不能把HTTP成功率SLO当耐久性保证。
假设主区失效后缓存也冷、剩余数据库只6000/秒,即使平时命中95%满足目标,切换时1万回源会超载。恢复计划需分级开放、预热、优先业务与回源限额,不能只把DNS指到另一区。
推导产物与验收
提交每次变化前后的不变量、数据主权、容量、失败时序和成本,圈出需要重新验证的旧结论。选"加缓存""改异步""跨区"三项组合,逐步推导而不是将三篇独立最佳实践并列。至少说明一个优化导致的新风险,并给反例实验,例如删除后旧缓存回填、发送成功后Outbox重放、旧主恢复继续写。可使用不变量模型与真实资源实验互证;模型通过不代替真实部署边界。
传播链模板与停止条件
本页讲了"局部优化会改写其他域边界",评审时需要把六条传播链写成模板:每条链一个变更、一个可观测信号、一个停止条件。没有停止条件的传播分析,只是提醒"注意影响",无法在运行中执行。
六条链与示例信号:负载链(缓存命中 95%→80%,信号为数据库 QPS,停止条件超过 2,000/s);重试链(新增重试,信号为尝试率,停止条件超过 1.2 倍);新鲜度链(通知改异步,信号为最老待处理秒数,停止条件超过 300 秒);权限链(新增影子租户,信号为跨租户读取计数,停止条件任何非零);恢复链(单区故障切换,信号为冷缓存回源,停止条件超过 6,000/s);组织链(团队拆分,信号为交接延迟,停止条件超过 1 天)。
模板的价值在于把"受影响"变成"可检测"。反例:变更评审写"引入缓存可能影响一致性"——没有信号、没有阈值、没有动作。按模板应写"新鲜度链:信号为投影版本差,超过 2 个版本停止放量并回滚缓存策略"。停止条件要绑定动作(暂停发布、限流、回滚),否则信号只是仪表盘。
执行 python3 labs/architecture_models.py propagation_chains:预期输出六条链,每条都有 signal 与 stop。脚本只检查模板字段,不采集真实信号。
两个合理选择:A 只对高风险变更做全六链分析,其余用检查清单勾选;B 所有变更都跑六链。本例选 A(高风险=涉及共享资源、跨区、权限),并规定高风险判定由变更模板自动预填,评审者可以改判但要写理由。
架构师变化条件
命中降到 60%:回源 4,000/秒已超上限,需要回源限额与降级读,而不是等缓存自然恢复。若通知 Outbox 积压期限设为 5 分钟,业务通知语义从"尽力"变为"有界承诺",下游需要按期限设计重试。跨区切换加入冷缓存预热预算后,RTO 时间线要并入回源曲线——每次变化重算"回源峰值×剩余容量"矩阵。
闭卷验收
本页 8 道闭卷题收进了下方自测面板:先回忆,再展开参考答案与评分点,最后给三档自评。