这里的运行成本指的不仅是新功能开发的成本,还包括后期维护、扩展、修复bug、运维等等成本。
保持运维简洁
引入过多不必要的技术栈往往带来额外的复杂度:
- 工程师需要解决在不同系统中的问题。
- 引入额外的依赖项会增加故障的可能性,降低可用性。
- 对于新加入的工程师,需要更长的时间来了解系统的运行方式。
- 系统优化会变得更加困难。
作者给出了以下几条建议:
- 把新技术引入生产环境之前,至少应该考虑这几个问题:团队中其他成员对于这门新技术掌握成本如何?能否招聘到能够掌握这门技术的员工?等等
- 进行技术选型的时候,可以参考一些其他公司的项目技术选型,有没有什么潜在的问题,有没有比较好的已有解决方案等等。
作者建议保持简洁,先去尝试最简单的解决方案。
构建快速失败的系统
系统设计架构中有两种思想,一种提倡即使在有错误的情况下,也要尽可能保证系统运行,以保持系统的“鲁棒性”和“可靠性”,这种思想叫做安全失败;另一种则提倡降低对于错误的容忍,一旦有系统错误就抛出错误,停止运行,以尽快将错误暴露出去,这种思想叫做快速失败。
这里的快速失败原则有益于缩短验证周期,获得快速反馈(虽然是失败的消息反馈)。现实系统设计中往往会在两种思想中做出权衡,对于非必要的错误保持鲁棒性(代价是可能会提高问题的定位和debug的成本),对于必要的错误采取快速失败的原则(以便快速暴露问题-快速修复)。
构建自动化流程
尽可能使用自动化流程而不是人工处理,一来可以降低时间成本;二来减少人工低级失误。
保证批任务幂等
这时批任务的设计原则之一,任务处理幂等以方便任务失败重试。
构建快速恢复能力
这也是系统设计的原则,既然选择了快速失败的设计原则,相对应的,就应该建立快速恢复的能力。
网友评论