What's Architecture Design

What’s Architecture Design

Terms

  • 系统:泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。

  • 模块:划分的目的是职责分离。

  • 组件:划分的目的是复用。

  • 软件架构:软件系统的顶层结构。

    • 系统由一群关联个体组成。
    • 明确系统包含的个体,例如子系统、模块、组件等等。
    • 明确个体运作和协作的规则。

Architecture Design Purpose

架构设计的目的:解决复杂度带来的问题。

  • 复杂度的来源

    • 高性能
    • 高可用
    • 可扩展性
    • 低成本
    • 安全
    • 规模
  • 常见误区

    • 因为架构很重要,所以要做架构设计
    • 不是每个系统都要做架构设计吗?
    • 为了高性能、高可用、扩展,所以要做架构设计,上来就要实现”三高“,结果会出现架构设计无比复杂。

Difference between framework and architecture

框架关注的是规范,架构关注的是结构

Design Principle

  • 合适原则
  • 简单原则
  • 演化原则

合适原则

宣言:合适优于业界领先。

脚踏实地做事

  • 将军难打无兵之仗:没那么多人,却想干那么多活,是失败的第一个主要原因。
  • 罗马不是一天建成的:没有那么多积累,却想一步登天,是失败的第二原因。
  • 冰山下面才是关键:没有那么卓越的业务场景,却幻想灵光一闪成为天才,是失败的第三个主要原因。

简单原则

宣言:简单优于复杂

”复杂“在制造领域代表先进,在建筑领域代表领先,但在软件领域,却恰恰相反,代表的是”问题“。

软件领域的复杂性体现:

  • 结构的复杂性
    • 组件数量多
    • 组件之间关系复杂
  • 逻辑的复杂性
    • 遵循KISS原则(Keep It Simple, Stupid!)

带来的问题:

  • 组件越多,就越有可能其中某个组件出现故障,从而导致系统故障。
  • 某个组件改动,会影响关联的所有组件,这些被影响的组件同样会继续递归影响更多组件。
  • 定位一个复杂系统中的问题总是比简单系统更加困难。
演化原则

宣言:演化优于一步到位

Windows系统的发展历史,Android系统发展历史

对于软件来说,变化才是主题。软件架构需要根据业务的发展而不断变化。设计Windows和Android的人都是顶尖的天才,即便如此,他们也不可能在1985年设计出Win8,不可能在2009年设计出Android 6.0。

如果没有把握”软件架构需要根据业务发展不断变化“这个本质,在做架构设计的时候就会容易陷入一个误区:试图一步到位设计一个软件架构,期望不管业务如何变化,架构都稳如磐石。

生物演化:

  1. 生物要适应当时的环境。
  2. 生物需要不断地迭代繁殖,将有利的基因传承下去,将不利的基因剔除或修复。
  3. 当环境变化时,生物要能够快速改变以适应环境变化;如果生物无法调整就被自然淘汰;新的生物会保留一部分原来被淘汰的生物的基因

软件架构设计:

  1. 设计出来的架构要满足当时的业务需要。
  2. 架构要不断地在实际应用过程中迭代,保留优秀的设计,修复有缺陷的设计,改正错误的设计,去掉无用的设计,使得架构逐渐完善。
  3. 当业务发生变化时,架构要扩展、重构、甚至重写;代码也许会重写,但有价值的经验、教训、逻辑、设计等却可以在新架构延续。