《从 0 开始学架构》学习归整(三)架构设计流程

内容纲要

第一步 识别复杂度

架构设计的目的本质上是为了解决软件系统的复杂性。要解决复杂性,首先我们得知道复杂在哪里?

不了解复杂度在什么地方,可能会做的越多错的越多。

复杂度来源

  1. 高性能
  2. 高可用
  3. 可扩展
  4. 低成本、安全、规模

系统的复杂度可能包含一个或多个点。如果同时具备这些点,架构师必须好好想想,是不是设计失误了。如果真的都需要面临这些复杂度,则架构师需要对复杂度进行排序解决。

过度设计

过度设计是指在在架构师在设计的时候,太超前的考虑了太多的业务场景(实际上可能根本不会发生,或者发生的概率很小),导致在设计架构的时候,使架构过于复杂,违背了演化原则。

后果
  1. 运维效率低下
  2. 开发效率低下
  3. 问题排查困难
  4. 换人成本极高
困境

如果接手这种项目,将面临:

  1. 要做的事情太多,无从下手
  2. 设计方案太复杂,落地遥遥无期
  3. 设计互相矛盾
解决之道
  1. 列出复杂度原因
  2. 给复杂度排序
  3. 优先解决优先级较高的复杂度问题

如何识别复杂度?

复杂度分析4 问

  1. 是否需要高性能?
    • 分析业务,预估 TPS、QPS 量级(以峰值计算,峰值可以取平均值的 2~4 倍,⚠️具体业务具体分析)
  2. 是否需要高可用?
    • 分析业务中断、消息丢失对系统和业务的影响
  3. 是否需要可扩展?
    • 分析业务场景,总结系统是否需要为各场景设计可扩展性
  4. 是否需要安全?是否需要低成本?
    • 这个不用问,安全是必不可少的,如果你不想收到勒索邮件的话;低成本得看公司缺不缺钱,设计的方案能不能符合成本预算。

第二步 设计备选方案

成熟的架构师需要熟悉很多已知的技术;对已经经过验证的架构烂熟于心;根据业务挑选合适的架构进行组合,并做调整。

新技术都是在现有的技术的基础上发展起来的,现有的技术又源于先前的技术。将技术进行功能性分组,可以大大简化设计过程,这就是“技术模块化”的首要原因。技术的“组合”和“递归”特征,将彻底改变我们对技术本质的认识。

常见错误及解决办法

  1. 设计最优秀的方案
    • 我们都知道有很多优秀的方案,知道原理,都能做出来,但是,得先问问自己:“我们有那个条件吗?”
  2. 只做一个方案
    • 人力有穷时,很多问题,不是一下子能够想全的
    • 单一方案可能出现过度辩护的情况,如:在评审、调研时,可能会默认偏向那个唯一方案,导致忽略某些重要问题,或者错过实际更优的方案
      • 备选方案以 3 ~ 5 个为佳;少了可能会考虑不周全,多了需要花费太多精力
      • 备选方案需要差异明显(架构上的差异)
      • 备选方案的技术不要局限于已熟悉的技术;很多时候,新的技术的某些特点会更适合某些场景(毕竟新技术都是为了某些场景而诞生的)
  3. 备选方案过于详细
    • 牵扯太多精力
    • 注意力可能过于集中到细节,失去整体视野
    • 评审时可能会被带到讨论细节的节奏,失去架构评审的目的
      • 备选阶段重点关注技术选型,不要过度关注细节
      • 技术选型的差异要明显

评估和选择备选方案

备选方案选择的困难点

  1. 每个方案都可行
  2. 没有完美的方案
  3. 评价标准主观性强

选方案的指导思想

  1. 最简派
    • 选最简单的方案
  2. 最牛派
    • 选技术最牛的方案
  3. 最熟派
    • 选使用最熟悉的方案
  4. 领导派
    • 让领导来选(甩锅大法)

到底这么选?

360 度环评

  1. 列出需要关注的质量属性点
  2. 从不同质量属性维度去评估每个点
  3. 挑选最优的方案
常见质量属性
  • 性能
  • 可用性
  • 硬件成本
  • 项目投入
  • 复杂性
  • 可扩展性
  • 安全性

遵循“简单原则”、“合适原则”;避免贪大求全(什么都想要);满足业务一定阶段内的发展需求(一般来说按照当前的业务规模的 2 ~ 4 倍来做预算即可)即可

常见误区
  1. 数量对比法
    • 看哪个方案优点多就选哪个方案
      • 单纯的数量无法大表真正的需求
  2. 权重法
    • 每个质量属性给一个权重
      • 权重设置过于主观,很难得出真正符合实际需求的值
解决方案

需要根据优先级进行选择

详细方案设计

经过设计方案评审后,大体的方向已经定下来了,但项目落地还没完成,所有架构师需要继续设计详细的方案。

详细方案设计,简单来说就是将方案涉及的关键技术细节确定下来

问题

详细方案制定时可能出现一种极端情况:在详细方案设计时才发现备选方案不可行(一般是在设计备选方案时遗漏了某些关键技术点或质量属性)

预防及解决办法
  • 架构师在设计备选方案时,需要对备选方案有较深入的理解
  • 通过分步骤、分阶段、分系统等方式降低方案复杂度
    • 如果无法从方案复杂度入手,就以设计团队的方式进行设计,博众取长,避免架构师出现盲点

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注