系统设计1:聊一聊架构设计原则

概述

如何更好的完成一个复杂系统的开发,是每一个高级程序员必须思考的话题。

对于简单的单体应用,并发量少,只需满足功能需求即可。然而越是大型的应用,它所要考虑的因素就越来越多,通常来讲,架构设计应考虑三个关键点:

高可用(High Availability)

高可用的衡量指标通常为几个9,它是衡量系统稳定工作的指标。5个9,即99.999%表示一年出事故不超过5分钟,4个9,即99.99表示一年出事故不超过1小时,一般来说,系统的关键模块至少保证4个9。

具体的高可用又可分为存储的高可用,计算的高可用,业务的高可用。

高性能(High Performance)

随着系统并发量的增多,对资源的消耗越大,主要是两块,CPU和存储,分别代表存储的高性能,和CPU的高性能。

性能优化是一个很大的话题,也有非常多的手段,后面有空我将单独拿出来写一篇文章。

可扩展性(Scalability)

拆分是提升系统扩展性最重要的一个思路,它会把庞杂的系统拆分成独立的,有单一职责的模块。相对于大系统来说,考虑一个一个小模块的扩展性当然会简单一些。将复杂的问题简单化,这就是我们的思路。

其他

除了上面说的三个关键点之外,架构设计还应考虑成本(可维护性,人力成本,运行成本等),安全性等等,在此不多赘述。

solid设计原则

我们知道Java有23中设计模式,比较难全部记住,但是其中透露的思想可以归为solid设计原则里面。

solid设计原则是有由 Robert Martin 主张在面向对象设计和变成(OOD&OOP)过程中需要遵守的几个重要原则。

  1. 单⼀职责原则 (The Single Responsibility Principle): 修改某个类的理由应该只有一个,如果超过一个,说明类承担不止一个职责,要视情况拆分。
  2. 开放封闭原则(The Open Closed Principle):软件实体应该对扩展开放,对修改封闭。一般不要直接修改类库源码(即使你有源代码),通过继承等方式扩展。
  3. 里式替代原则(The Liskov Substitution Principle):当一个子类的实例能够被替换成任何超类的实例时,它们之间才是真正的 is-a 关系。
  4. 接口分离原则(The Interface Segregation Principle):不要强迫用户去依赖它们不使用的接口。换句话说,使用多个专门的接口比使用单一的大而全接口要好。
  5. 依赖倒置原则(The Dependency Inversion Principle):高层模块不应该依赖于底层模块,二者都应该依赖于抽象。换句话说,依赖于抽象,不要依赖于具体实现。

具体的介绍可以见我的另一篇文章《设计原则与生活》

CAP原理

谈到分布式,就要不得不提CAP理论。

CAP认为,一个分布式系统最多同时满足一致性(Consistency),可用性(Availability)和分区容忍性(Parition Tolerance)这三项中的两项。

  • 一致性:指all nodes see the same data at the same time,即更新操作成功,所有节点在同一时间的数据完全一致。
  • 可用性:指Reads and writes always succeed,即服务一直可用,而且响应时间正常。
  • 分区容忍性:指the system continue to operate despite arbitrary message loss or failure of part of the system,即分布式系统在遇到某节点或网络分区故障时,仍然能够对外提供满足一致性和可用性的服务。

一般来说,分区容忍性P必须满足,我们要在一致性C和可用性A之间做取舍。

然而真正做到强一致性非常难,这时候就出现了BASE理论。

BASE理论

BASE理论是对于 CAP 理论的延伸,核⼼思想是即使无法做到强一致性 (Strong Consistency,CAP 中的一致性指强一致性),但是可以采用适当的方式达到最终一致性 (Eventual Consistency)。

BASE 指基本可用 (Basically Available)、软状态 (Soft State) 和最终一致性 (Eventual Consistency)。

  • 基本可用 (Basically Available):是指分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。比如服务降级。
  • 软状态 (Soft State):是指允许系统存在中间状态,而该中间状态不会影响系统的整体可用性。分布式存储中一般一份数据至少存三个副本,允许不同节点间副本同步的延迟就是软状态的体现。
  • 最终一致性 (Eventual Consistency):是指系统中的所有数据副本经过一段时间后,最终能够达成一致状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

康威法则

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)。

如果系统架构不支持,你无法建立一个高效的组织;同样,如果你的组织架构不支持,你也无法建立一个高效的系统架构。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享