这 15 个架构原则来自《架构即未来 (The Art of Scalability)》 一书,作者马丁 L. 阿伯特和迈克尔 T. 费舍尔分别是 eBay 和 PayPal 的前 CTO,他们经历过 eBay 和 PayPal 大规模分布式电商平台的架构演进,在一线实战经验的基础上总结并提炼出 15 条架构原则:
在 2000 年 7 月,加州大学伯克利分校的 Eric Brewer 教授在 ACM PODC 会议上提出了著名的 CAP 猜想,而后,在经过两年的努力,麻省理工学院的 Seth Gilbert 和 Nancy Lynch 从理论上证明了此猜想,从而使 CAP 理论正式成为了分布式计算领域的公认定理。
CAP 理论强调,在分布式系统中,最多只能同时满足一致性 (Consistency)、可用性 (Availability) 和分区容忍性 (Partition Tolerance) 中的两项。其中:
一致性指所有节点在同一时间点看到的数据完全一致
可用性则指 reads 和 writes 操作始终成功和响应时间正常
分区容忍性则指分布式系统能够在遭遇到某节点或网络分区故障时,仍然能够对外提供满足一致
BASE 理论
eBay 架构师 Dan Pritchett 凭借其丰富的实践经验,在 ACM 上发表了一篇文章,并提出了 BASE 理论,作为对 CAP 理论的一种延伸。其核心思想是:尽管无法做到强一致性(即 CAP 理论中的一致性概念),但是通过采用适当的方式可以实现最终一致性。BASE 代表基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventual Consistency)。 1.基本可用 (Basically Available)
基本可用是指分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。比如服务降级。 2.软状态 (Soft State)
软状态是指允许系统存在中间状态,而该中间状态不会影响系统的整体可用性。分布式存储中一般一份数据至少存三个副本,允许不同节点间副本同步的延迟就是软状态的体现。 3.最终一致性 (Eventual Consistency)
最终一致性是指系统中的所有数据副本经过一段时间后,最终能够达成一致状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
CAP 和 BASE 理论课题极深,背后甚至涉及到很复杂的数学证明。但我从简单浅显的角度来理解:在分布式系统中,性能、高可用、不丢数据和数据一致性通常是强需求。由于流量不断增长,数据复制和分区成为了不可避免的挑战:
复制(replication):数据在多个节点上存储多份,以确保数据不丢失且系统保持高可用;
分区(partition):数据按照某种规则切分分发到不同节点上,以降低单个节点的负载并提高系统性能,例如数据库的分库分表、系统拆分成微服务等,这种做法也会带来一些一致性问题。为了解决一致性问题,我们可以在时间上做出一定的妥协,即实现最终一致性。如果要求时间上的强一致性,就必须适当地牺牲可用性。因此,在系统架构设计上,与状态一致性的斗争是其中一个重要组成部分。
当选择使用分布式产品时,比如 NoSQL 数据库,必须了解它在 CAP 环章除的位置,以确保它可以满足特定场景的需求。
组织和系统改进原则
康威法则
Melvin Conway 在 1967 年提出所谓康威法则,指出组织架构和系统架构之间有一种隐含的映射关系:
Organization which design system […] are constrained to produce designs which are copies of the communication structures of these organization. 设计系统的组织其产生的设计等价于组织间的沟通结构。
康威法则也可以倒过来阐述:
Conway’s law reversed:You won’t be able to successfully establish an efficient organization structure that is not supported by your system design(architecture)。如果系统架构不支持,你无法建立一个高效的组织;同样,如果你的组织架构不支持,你也无法建立一个高效的系统架构。
系统改进三原则
IT 运维管理畅销书《凤凰项目》 的作者 Gene Kim 在调研了众多高效能 IT 组织后总结出支撑 DevOps 运作的三个原理 (The Three Ways: The Principles Underpinning DevOps),我认为也是系统改进提升的一般性原理,见下图:
原理一:系统思考 (System Thinking)
对于以开发为导向的组织而言,他们的能力已不仅仅只是生产软件,更重要的是持续地向客户传递价值。该价值从业务需求开始,依次经过研发、测试、部署、运维等流程,并最终以服务形式交付给客户。整个价值链的流速并不只依赖于单个团队或个人的杰出贡献,而是由整个价值链中最薄弱环节的限制而决定。所以,局部优化通常并不管用,反而还可能会损害整体效率。Gene Kim还特别强调:"瓶颈之外的所有优化只是幻象"。 原理二:强化反馈环 (Amplify Feedback Loops)
通过加强反馈机制实现流程改进是非常常见的方法。原则二着重于加强企业与客户、组织团队、流程和系统内部的反馈环路。如果没有测量,则无法实现提升,只有通过测量数据反馈来优化和改进系统。 原理三:持续试验和学习的文化 (Culture of Continual Experimentation And Learning)
新企业管理文化鼓励进行勇于尝试和不断实验、学习、改进的文化氛围。
总结