最近学习了李运华老师在极客时间的《从0开始学架构》文章,为了理解深刻便于复习思考整理了思维导图笔记,大家可以参考学习。
结合复杂度来源和架构设计原则,看看在实践中究竟如何逐步进行架构设计。
第 1 步:识别复杂度
架构设计的本质目的是为了解决软件系统的复杂性,所以在我们设计架构时,首先就要分析系统的复杂性。只有正确分析出了系统的复杂性,后续的架构设计方案才不会偏离方向;
正确的做法是将主要的复杂度问题列出来,然后根据业务、技术、团队等综合情况进行排序,优先解决当前面临的最主要的复杂度问题。
第 2 步:设计备选方案
成熟的架构师需要对已经存在的技术非常熟悉,对已经经过验证的架构模式烂熟于心,然后根据自己对业务的理解,挑选合适的架构模式进行组合,再对组合后的方案进行修改和调整。
架构师需要设计多个备选方案,合理的做法:
- 备选方案的数量以 3 ~ 5 个为最佳。
- 备选方案的差异要比较明显。
- 备选方案的技术不要只局限于已经熟悉的技术。
备选阶段关注的是技术选型,而不是技术细节,技术选型的差异要比较明显。
架构师的技术储备越丰富、经验越多,备选方案也会更多,从而才能更好地设计备选方案。
例如,开源方案选择可能就包括 Kafka、ActiveMQ、RabbitMQ;集群方案的存储既可以考虑用 MySQL,也可以考虑用 HBase,还可以考虑用 Redis 与 MySQL 结合等;自研文件系统也可以有多个,可以参考 Kafka,也可以参考 LevelDB,还可以参考 HBase 等。
第 3 步:评估和选择备选方案
在完成备选方案设计后,如何挑选出最终的方案也是一个很大的挑战,主要原因有:
- 每个方案都是可行的。
- 没有哪个方案是完美的。
- 评价标准主观性比较强。
评估和选择备选方案的方法:“360 度环评”!
具体的操作方式:列出我们需要关注的质量属性点,然后分别从这些质量属性的维度去评估每个方案,再综合挑选适合当时情况的最优方案。
常见的方案质量属性点有:性能、可用性、硬件成本、项目投入、复杂度、安全性、可扩展性等。在评估这些质量属性时,需要遵循架构设计原则“合适原则”和“简单原则”,避免贪大求全,基本上某个质量属性能够满足一定时期内业务发展就可以了。
第 4 步:详细方案设计
简单来说,详细方案设计就是将方案涉及的关键技术细节给确定下来。
详细设计方案阶段可能遇到的一种极端情况就是在详细设计阶段发现备选方案不可行,一般情况下主要的原因是备选方案设计时遗漏了某个关键技术点或者关键的质量属性。比如在备选方案评估时忽略了开发周期这个质量属性。