架构设计流程:设计备选方案


极客时间:《从 0 开始学架构》:架构设计流程:设计备选方案

1、引言

经过上一章节关于识别复杂度,从而确定了当前系统面临的主要复杂问题后,方案设计就有了明确的目标,便可以进行架构方案的设计。

2、架构设计第 2 步:设计备选方案

成熟的架构师需要对已经存在的技术非常熟悉,对已经经过验证的架构模式烂熟于心,然后根据自己对业务的理解,挑选合适的架构模式进行组合,再对组合后的方案进行修改和调整。

只有当这种方式完全无法满足需求的时候,才会考虑进行方案的创新,而事实上方案的创新绝大部分情况下也都是基于已有的成熟技术。

NoSQL:Key-Value 的存储和数据库的索引其实是类似的,Memcache 只是把数据库的索引独立出来做成了一个缓存系统。
Hadoop 大文件存储方案,基础其实是集群方案 + 数据复制方案。
Docker 虚拟化,基础是 LXC(Linux Containers)。
LevelDB 的文件存储结构是 Skip List。

虽说是基于已有的技术或架构模式进行组合,然后调整,大部分情况下就能得到我们需要的方案,但由于可选的模式有很多,组合的方案也就很多,在进行些小创新,解决方案就会更多,因此,架构设计并不简单。这个阶段也是很多架构师容易犯错的地方。

  • 第一种常见的错误:设计最优秀的方案。
    根据架构设计原则中“合适原则”和“简单原则“的要求,挑选合适自己业务、团队、技术能力的方案才是好方案;否则要么浪费大量资源开发了无用的系统。
  • 第二种常见的错误:只做一个方案。
    PS:弊端
  • 心里评估过于简单,可能没有想得全面,只是因为某一个缺点就把某个方案给否决了,而实际上没有哪个方案是完美的,某个地方有缺点的方案可能是综合来看最好的方案。
  • 单一方案设计会出现过度辩护的情况,即架构评审时,针对方案存在的问题和疑问,架构师会竭尽全力去为自己的设计进行辩护,经验不足的设计人员可能会强词夺理。

因此,架构师需要设计多个备选方案,合理的做法如下:

  • 备选方案的数量以 3 ~ 5 个为最佳
  • 备选方案的差异要比较明显
  • 备选方案的技术不要只局限于已经熟悉的技术
  • 第三种常见的错误:备选方案过于详细
    浪费时间精力,还得不到好的结果
    正确的做法是备选阶段关注的是技术选型,而不是技术细节,技术选型的差异要比较明显。

3、小结

针对当前系统面临的主要复杂问题,对症下药,无论是采用常见的熟悉方案,还是基于已有方案进行创新,尽量作出3~5套的备选方案,专注于技术选型,有理有据