1. 架构是什么?
  2. 软件架构指软件系统的顶层结构,主要是由系统是一群关联个体组成,个体可以是模块或者子系统,他们按照某种特定的规则来运作和协作。

系统架构的目的
架构设计的主要目的是为了解决软件系统复杂度带来的问题,要有的放矢,不是胡编乱造。

(这个结论虽然很简洁,但却是架构设计过程中需要时刻铭记在心的一条准则)

  1. 复杂度来源

复杂度来源主要包括:高性能、高可用、可扩展、低成本、安全、规模。

3.1 高性能复杂度

解决集群复杂度:增加机器任务分配 和 将任务分解。

任务分解:

将系统分拆为多个子系统,单独的一个子系统功能内聚,单个运行起来更简单,更容易做到高性能,针对单个任务更进行扩展。

3.2 高可用复杂度

高可用的本质无非就是“冗余”来实现,高性能增加机器目的在于“扩展”处理性能;高可用增加机器目的在于“冗余”处理单元。

存储高可用的难点不在于如何备份数据,而在于如何减少或者规避数据不一致对业务造成的影响。

3.2 可扩展性复杂度

设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化。

综合分析,预测变化的复杂性在于:不能每个设计点都考虑可扩展性。不能完全不考虑可扩展性。所有的预测都存在出错的可能性。

第一种应对变化的常见方案是将“变化”封装在一个“变化层”,将不变的部分封装在一个独立的“稳定层”。

第二种常见的应对变化的方案是提炼出一个“抽象层”和一个“实现层”。抽象层是稳定的,实现层可以根据具体业务需要定制开发。

4.架构设计三大原则

架构设计的三大原则:合适原则、简单原则、演化原则

合适原则宣言:“合适优于业界领先”。

简单原则宣言:“简单优于复杂”。

演化原则宣言:“演化优于一步到位”。

5.架构设计流程

大概分为五步:识别复杂度、设计备选方案、评估和选择备选方案、设计详细的方案。

5.1 识别复杂度

将主要的复杂度问题列出来,然后根据业务、技术、团队等综合情况进行排序,优先解决当前面临的最主要的复杂度问题。

5.2 设计备选方案

备选做法:

1)备选方案的数量以 3 ~ 5 个为最佳。

2)备选方案的差异要比较明显。

3)备选方案的技术不要只局限于已经熟悉的技术。

设计常见错误:

1)设计最优秀的方案。

2)只做一个方案。

3)备选方案过于详细。

5.3 评估和选择备选方案

选取方案时候 可能会分为三种派别:最牛派、最熟派、领导派

其实这些派没有绝对的对错,不同的情景有不同的对和错。

选择方案的方式:

列出我们需要关注的质量属性点,然后分别从这些质量属性的维度去评估每个方案,再综合挑选适合当时情况的最优方案。常见的方案质量属性点有:性能、可用性、硬件成本、项目投入、复杂度、安全性、可扩展性等。在评估这些质量属性时,需要遵循架构设计原则 1“合适原则”和原则 2“简单原则”,避免贪大求全,基本上某个质量属性能够满足一定时期内业务发展就可以了。然后将这些质量属性按照优先级排列 进行选择。