可靠系统,从朴素的默认值开始
设计一个长期运行的服务时,人们很容易先想到更多功能:自动发现、动态调参、智能重试,或者一套足够灵活的配置语言。但决定系统能否安静运行数月的,往往是那些最朴素的默认值。 默认行为应该可解释 好的默认值不只是在常见情况下“能用”,还应该让维护者可以快速回答三个问题:系统现在在做什么、为什么这样做、失败之后会留下什么状态。 这意味着超时必须有明确单位,重试必须有边界,数据目录必须固定,日志也要能指出真正失败的阶段。默认行为越容易解释,现场排查就越少依赖记忆和运气。 把恢复路径当作正常路径 故障恢复不应该是一套只有事故发生时才第一次运行的命令。备份是否可读、配置能否回滚、服务重启后是否仍能接管旧状态,都应该在平静的时候验证。 真正可靠的系统并不是从不失败,而是在失败后仍然保持边界清楚:哪些内容已经提交,哪些动作可以重放,哪些资源需要人工确认。 少一点魔法 自动化适合消除重复劳动,不适合隐藏关键状态。把重要决策写进配置,把单位和上限写进接口,把验收命令留在同一个地方,往往比再增加一层抽象更有价值。 朴素并不等于简陋。它意味着每一层都有清晰职责,每一个默认值都有理由,而系统在凌晨出问题时仍然愿意说人话。