架构师必须掌握的架构设计原则

AKF 架构原则

这 15 个架构原则来自《架构即未来 (The Art of Scalability)》 一书,作者马丁 L. 阿伯特和迈克尔 T. 费舍尔分别是 eBay 和 PayPal 的前 CTO,他们经历过 eBay 和 PayPal 大规模分布式电商平台的架构演进,在一线实战经验的基础上总结并提炼出 15 条架构原则:

  1. N + 1 设计

永远不要少于两个,通常为三个。比方说无状态的 Web/API 一般部署至少>=2 个。

  1. 回滚设计

确保系统可以回滚到以前发布过的任何版本。可以通过发布系统保留历史版本,或者代码中引入动态开关切换机制 (Feature Switch)。

  1. 禁用设计

能够关闭任何发布的功能。新功能隐藏在动态开关机制 (Feature Switch) 后面,可以按需一键打开,如发现问题随时关闭禁用。

  1. 监控设计

在设计阶段就必须考虑监控,而不是在实施完毕之后补充。例如在需求阶段就要考虑关键指标监控项,这就是度量驱动开发 (Metrics Driven Development) 的理念。

  1. 设计多活数据中心

不要被一个数据中心的解决方案把自己限制住。当然也要考虑成本和公司规模发展阶段。

  1. 使用成熟的技术

只用确实好用的技术。商业组织毕竟不是研究机构,技术要落地实用,成熟的技术一般坑都被踩平了,新技术在完全成熟前一般需要踩坑躺坑。

  1. 异步设计

能异步尽量用异步,只有当绝对必要或者无法异步时,才使用同步调用。

  1. 无状态系统

尽可能无状态,只有当业务确实需要,才使用状态。无状态系统易于扩展,有状态系统不易扩展且状态复杂时更易出错。

  1. 水平扩展而非垂直升级

永远不要依赖更大、更快的系统。一般公司成长到一定阶段普遍经历过买更大、更快系统的阶段,即使淘宝当年也买小型机扛流量,后来扛不住才体会这样做不 scalable,所以才有后来的去 IOE 行动。

  1. 设计时至少要有两步前瞻性

在扩展性问题发生前考虑好下一步的行动计划。架构师的价值就体现在这里,架构设计对于流量的增长要有提前量。

  1. 非核心则购买

如果不是你最擅长,也提供不了差异化的竞争优势则直接购买。避免 Not Invented Here 症状,避免凡事都要重造轮子,毕竟达成业务目标才是重点。

  1. 使用商品化硬件

在大多数情况下,便宜的就是最好的。这点和第 9 点是一致的,通过商品化硬件水平扩展,而不是买更大、更快的系统。

  1. 小构建、小发布和快试错

全部研发要小构建,不断迭代,让系统不断成长。这个和微服务理念一致。

  1. 隔离故障

实现故障隔离设计,通过断路保护避免故障传播和交叉影响。通过舱壁泳道等机制隔离失败单元 (Failure Unit),一个单元的失败不至影响其它单元的正常工作。

  1. 自动化

设计和构建自动化的过程。如果机器可以做,就不要依赖于人。自动化是 DevOps 的基础。

这 15 条架构原则基本上是 eBay 在发展,经历过流量数量级增长冲击过程中,通过不断踩坑踩出来的,是干货中的干货。消化吸收这 15 条原则,基本可保系统架构不会有原则性问题。

这 15 条原则同样适用于现在的微服务架构。eBay 发展较早,它内部其实很早 (差不多 2010 年前) 就已形成完善的微服务生态,只是没有提出微服务这个概念。

这 15 条原则可根据 TTM(Time To Market),可用性 可扩展性 质量,成本 效率分布在三个环内,如下图所示。

Image