- 架构是什么?
- 软件架构指软件系统的顶层结构,主要是由系统是一群关联个体组成,个体可以是模块或者子系统,他们按照某种特定的规则来运作和协作。
系统架构的目的
架构设计的主要目的是为了解决软件系统复杂度带来的问题,要有的放矢,不是胡编乱造。
(这个结论虽然很简洁,但却是架构设计过程中需要时刻铭记在心的一条准则)
- 复杂度来源
复杂度来源主要包括:高性能、高可用、可扩展、低成本、安全、规模。
3.1 高性能复杂度
解决集群复杂度:增加机器任务分配 和 将任务分解。
任务分解:
将系统分拆为多个子系统,单独的一个子系统功能内聚,单个运行起来更简单,更容易做到高性能,针对单个任务更进行扩展。
3.2 高可用复杂度
高可用的本质无非就是“冗余”来实现,高性能增加机器目的在于“扩展”处理性能;高可用增加机器目的在于“冗余”处理单元。
存储高可用的难点不在于如何备份数据,而在于如何减少或者规避数据不一致对业务造成的影响。
3.2 可扩展性复杂度
设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化。
综合分析,预测变化的复杂性在于:不能每个设计点都考虑可扩展性。不能完全不考虑可扩展性。所有的预测都存在出错的可能性。
第一种应对变化的常见方案是将“变化”封装在一个“变化层”,将不变的部分封装在一个独立的“稳定层”。
第二种常见的应对变化的方案是提炼出一个“抽象层”和一个“实现层”。抽象层是稳定的,实现层可以根据具体业务需要定制开发。
4.架构设计三大原则
架构设计的三大原则:合适原则、简单原则、演化原则
合适原则宣言:“合适优于业界领先”。
简单原则宣言:“简单优于复杂”。
演化原则宣言:“演化优于一步到位”。
5.架构设计流程
大概分为五步:识别复杂度、设计备选方案、评估和选择备选方案、设计详细的方案。
5.1 识别复杂度
将主要的复杂度问题列出来,然后根据业务、技术、团队等综合情况进行排序,优先解决当前面临的最主要的复杂度问题。
5.2 设计备选方案
备选做法:
1)备选方案的数量以 3 ~ 5 个为最佳。
2)备选方案的差异要比较明显。
3)备选方案的技术不要只局限于已经熟悉的技术。
设计常见错误:
1)设计最优秀的方案。
2)只做一个方案。
3)备选方案过于详细。
5.3 评估和选择备选方案
选取方案时候 可能会分为三种派别:最牛派、最熟派、领导派
其实这些派没有绝对的对错,不同的情景有不同的对和错。
选择方案的方式:
列出我们需要关注的质量属性点,然后分别从这些质量属性的维度去评估每个方案,再综合挑选适合当时情况的最优方案。常见的方案质量属性点有:性能、可用性、硬件成本、项目投入、复杂度、安全性、可扩展性等。在评估这些质量属性时,需要遵循架构设计原则 1“合适原则”和原则 2“简单原则”,避免贪大求全,基本上某个质量属性能够满足一定时期内业务发展就可以了。然后将这些质量属性按照优先级排列 进行选择。