架构设计流程

第69篇

极客时间《从0开始学架构》课程笔记。

架构设计的流程(步骤)包括4步,首先识别复杂度,其次设计多个备选方案,然后评估和选择备选方案,最后再细化选定的方案。

第 1 步:识别复杂度

  1. 架构设计的本质目的是为了解决软件系统的复杂性,所以设计架构时,首先就要分析系统的复杂性。
  2. 复杂度主要来源:“高性能”、“高可用”、“可扩展”、“低成本”、“安全”、“规模”等。大部分场景下,复杂度只是其中的某一个,少数情况下包含其中两个,不管有几个,都必须进行优先级排序。
  3. 排序方法:将主要的复杂度问题列出来,然后根据业务、技术、团队等综合情况进行排序,优先解决当前面临的最主要的复杂度问题。重点是根据业务和团队综合判断,不是单纯技术角度判断。
  4. 识别复杂度是一项挑战,因为原始的需求中并没有哪个地方会明确地说明复杂度在哪里,需要架构师在理解需求的基础上进行分析。
  5. 复杂度“排查法”:根据复杂度来源,结合实际业务需求逐条分析识别,根据峰值计算是否需要高性能、根据业务后果判断哪里需要高可用、是否需要可扩展、是否需要考虑安全、成本等等。

第 2步:设计备选方案

  1. 明确复杂度问题之后才能进行方案设计,成熟的架构师需要对已经存在的技术非常熟悉,对已经经过验证的架构模式烂熟于心,然后根据自己对业务的理解,挑选合适的架构模式进行组合,再对组合后的方案进行修改和调整。
  2. 因为可选的架构模式很多,所以组合的方案也多,如果再加入一些创新之后,相应的解决方案会更多,这个阶段比较容易犯错。常见错误有三种。
  3. 第一种错误:设计最优秀的方案。不能为了优秀而优秀。应该时刻提醒自己根据架构设计原则中“合适原则”和“简单原则“的要求,挑选合适自己业务、团队、技术能力的方案才是好方案。
  4. 第二种错误:只做一个方案。不能只做单一方案,但也不可能穷举所有方案。合理做法是:设计3个备选方案,备选方案差异要比较明显,备选方案不能只限于已经熟悉的技术。
  5. 第三种错误:备选方案过于详细。备选方案就是初级设计,不是最终方案,写得太细会耗费大量时间精力,并且会太关注细节,从而忽略整体技术设计。正确的做法是备选阶段关注技术选型,而不是技术细节,技术选型的差异要比较明显。

第 3 步:评估和选择备选方案

  1. 评估方法:“360 度环评”。具体操作方式:列出我们需要关注的质量属性点,然后分别从这些质量属性的维度去评估每个方案,再综合挑选适合当时情况的最优方案。
  2. 常见的方案质量属性点有:性能、可用性、硬件成本、项目投入、复杂度、安全性、可扩展性等。在评估这些质量属性时,需要遵循架构设计原则 1“合适原则”和原则 2“简单原则”。
  3. 基于环评结果可以进行各个方案的对比分析,但还是不能选定方案,因为没有哪个方案是完美的,极少出现某个方案在所有对比维度上都是最优的。
  4. 但也不能根据数量对比法、加权法进行方案的选择,因为数量对比未考虑质量属性的优先级,加权法无法客观地给出每个质量属性的权重得分。
  5. 正确的做法是按优先级选择方案。即架构师综合当前的业务发展情况、团队人员规模和技能、业务发展预测等因素,将质量属性按照优先级排序,首先挑选满足第一优先级的,如果方案都满足,那就再看第二优先级……以此类推。
  6. 备选方案的选择和很多因素相关,并不单单考虑性能高低、技术是否优越这些纯技术因素。业务的需求特点、运维团队的经验、已有的技术体系、团队人员的技术水平都会影响备选方案的选择。


    环评表示例

第 4步:详细方案设计

  1. 详细方案设计就是将最终确定的备选方案进行细化,使得备选方案变成一个可以落地的设计方案,将方案涉及的关键技术细节给确定下来。
  2. 详细设计方案里面其实也有一些技术点和备选方案类似。但实际上这里的技术方案选择是很轻量级的,我们无须像备选方案阶段那样操作,而只需要简单根据这些技术的适用场景选择就可以了。
  3. 详细设计方案阶段可能遇到的一种极端情况就是在详细设计阶段发现备选方案不可行,一般情况下主要的原因是备选方案设计时遗漏了某个关键技术点或者关键的质量属性。
  4. 如何避免:架构师不但要进行备选方案设计和选型,还需要对备选方案的关键细节有较深入的理解;通过分步骤、分阶段、分系统等方式,尽量降低方案复杂度;采取设计团队的方式来进行设计,博采众长。
  5. 典型的需要细化的设计点:数据库表如何设计?数据如何复制?主备服务器如何倒换?业务服务器如何写入消息?业务服务器如何读取消息?业务服务器和消息队列服务器之间的通信协议如何设计?

你可能感兴趣的:(架构设计流程)