目录

  • 误区
    • 设计最优秀的方案
    • 只做一个方案
    • 备选方案过于详细
  • 评估和选择
    • 评估
    • 选择

绝大部分时候我们有了明确的目标后,对已经被验证过的成熟技术按图索骥就能够找到可选的解决方案。只有当这种方式完全无法满足需求的时候,才会考虑进行方案的创新,而事实上方案的创新绝大部分情况下也都是基于已有的成熟技术。

在《技术的本质》一书中,对技术的组合有清晰的阐述:

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

虽说基于已有的技术或者架构模式进行组合,然后调整,大部分情况下就能够得到我们需要的方案,但并不意味着架构设计是一件很简单的事情。因为可选的模式有很多,组合的方案更多,往往一个问题的解决方案有很多个;如果再在组合的方案上进行一些创新,解决方案会更多。

误区

设计最优秀的方案

根据架构设计原则中“合适原则”和“简单原则“的要求,挑选合适自己业务、团队、技术能力的方案才是好方案;否则要么浪费大量资源开发了无用的系统,要么根本无法实现

只做一个方案

很多架构师在做方案设计时,可能心里会简单地对几个方案进行初步的设想,再简单地判断哪个最好,然后就基于这个判断开始进行详细的架构设计了。这样做有很多弊端:

  • 心里评估过于简单,可能没有思考全面;
  • 架构师经验知识和技能的局限性,可能某个评估的标准和经验是不正确的;
  • 单一方案设计会出现过度辩护的情况,即架构评审时,针对方案存在的问题和疑问,架构师会竭尽全力去为自己的设计进行辩护,经验不足的设计人员可能会强词夺理。

合理的做法如下:

  • 备选方案数量以3~5个为佳。太少可能因为思维狭隘,考虑不周全,过多则需要耗费大量的精力和时间,并且方案之间的差别可能不明显;
  • 备选的方案的差异要比较明显。如:主备方案和集群方案差异就很明显,都用ZooKeeper 做主备决策,一个检测周期是 1 分钟,一个检测周期是 5 分钟,这就不是架构上的差异,而是细节上的差异;
  • 备选方案的技术不要只局限于已经熟悉的技术。设计架构时,架构师需要将视野放宽,考虑更多可能性。

备选方案过于详细

有的架构师或者设计师在写备选方案时,错误地将备选方案等同于最终的方案,每个备选方案都写得很细。这样做的弊端显而易见:

  • 耗费了大量的时间和精力;
  • 将注意力集中到细节中,忽略了整体的把控,可能导致耗时较久,以此方案数量不够,或者方案差异性不明显;
  • 评审时其他人会被细节绕进去,评审效果差;

正确的做法是备选阶段关注的是技术选型,而不是技术细节,技术选型的差异要比较明显,对于技术细节,最终方案确定后再细节补充即可。

评估和选择

评估

前面提到了那么多指导思想,真正应该选择哪种方法来评估和选择备选方案呢?
360度环评:列出我们需要关注的质量属性点,然后分别从这些质量属性的维度去评估每个方案,再综合挑选适合当时情况的最优方案。

常见的方案质量属性点有:性能、可用性、硬件成本、项目投入、复杂度、安全性、可扩展性等。在评估这些质量属性时,需要遵循架构设计原则 1“合适原则”和原则 2“简单原则”,避免贪大求全,基本上某个质量属性能够满足一定时期内业务发展就可以了。

如一定时期内业务发展指数级爆发这种概率性事件,需要遵循架构设计原则3"演化原则",避免过度设计,一步到位的想法。即使真的出现这种情况,那就算是重新做方案,代价也是可以接受的,因为业务如此迅猛发展,钱和人都不是问题。

通常情况下,如果某个质量属性评估和业务发展有关系(例如,性能、硬件成本等),需要评估未来业务发展的规模时,一种简单的方式是将当前的业务规模乘以 2 ~4 即可,如果现在的基数较低,可以乘以 4;如果现在基数较高,可以乘以 2。例如,现在的 TPS 是 1000,则按照 TPS 4000 来设计方案;如果现在 TPS 是 10000,则按照 TPS 20000 来设计方案。

原文中的设计场景环评表如下(右侧三列三个方案):

选择

完成方案的 360 度环评后,我们可以基于评估结果整理出 360 度环评表,一目了然地看到各个方案的优劣点。但是 360 度环评表也只能帮助我们分析各个备选方案,还是没有告诉我们具体选哪个方案,原因就在于没有哪个方案是完美的,极少出现某个方案在所有对比维度上都是最优的。例如:引入开源方案工作量小,但是可运维性和可扩展性差;自研工作量大,但是可运维和可维护性好;使用 C 语言开发性能高,但是目前团队 C 语言技术积累少;使用 Java 技术积累多,但是性能没有 C 语言开发高,成本会高一些……诸如此类。

误区:

  • 数量对比法:简单地看哪个方案的优点多就选哪个,这种方案主要的问题在于把所有质量属性的重要性等同,而没有考虑质量属性的优先级。
  • 加权法:每个质量属性给一个权重,这种方案主要的问题是无法客观地给出每个质量属性的权重得分。

正确的做法是按优先级选择,即架构师综合当前的业务发展情况、团队人员规模和技能、业务发展预测等因素,将质量属性按照优先级排序,首先挑选满足第一优先级的,如果方案都满足,那就再看第二优先级……以此类推。

那会不会出现两个或者多个方案,每个质量属性的优缺点都一样的情况呢?

理论上是可能的,但实际上是不可能的。前面提到,在做备选方案设计时,不同的备选方案之间的差异要比较明显,差异明显的备选方案不可能所有的优缺点都是一样的。

--------来源《极客课程》∙ 学习摘要

流程二备选方案及评估相关推荐

  1. 关于系统架构你不知道的那些事-架构设计流程:评估和选择备选方案

    关于系统架构你不知道的那些事-架构设计流程:评估和选择备选方案 前言 架构设计第 3 步:评估和选择备选方案 评估和选择备选方案实战 备选方案 1:采用开源 Kafka 方案 备选方案 2:集群 + ...

  2. 架构设计第三步:评估和选择备选方案

    上一期我讲了设计备选方案,在完成备选方案设计后,如何挑选出终的方案也是一个很大的挑 战,主要原因有: 每个方案都是可行的,如果方案不可行就根本不应该作为备选方案. 没有哪个方案是完美的.例如,A 方案 ...

  3. 关于系统架构你不知道的那些事-架构设计流程:设计备选方案

    关于系统架构你不知道的那些事-架构设计流程:设计备选方案 前言 架构设计第 2 步:设计备选方案 第一种常见的错误:设计最优秀的方案. 第二种常见的错误:只做一个方案. 第三种常见的错误:备选方案过于 ...

  4. 计算机职业规划备选方案,大学生职业生涯规划-备选方案

    <大学生职业生涯规划-备选方案>由会员分享,可在线阅读,更多相关<大学生职业生涯规划-备选方案(7页珍藏版)>请在人人文库网上搜索. 1.职业规划的评估与备选49职业" ...

  5. EC-PCA: 利润中心会计流程设计和方案要点

    文章目录 一.概述 二.流程设计和方案要点 2.1 利润中心会计配置 2.2 利润中心段维护流程 2.3 利润中心主数据维护流程 2.4 利润中心记账流程 2.5 利润中心分配分摊流程 2.6 出具报 ...

  6. yaahp使用教程_如何用yaahp进行大量备选方案/评价对象的综合评价?

    概述 一般大于9阶的判断矩阵就很难保证判断的一致性, 如果模型中有大量备选方案/评价对象(例如学校的所有教师), 直接处理会产生阶数非常大的判断矩阵, 无论对于人的思维能力还是yaahp处理能力都是无 ...

  7. 10个团建小游戏备选方案

    中医五年制实验班团建小游戏备选方案 游戏活动: 1.快乐数钱 女同胞每人代表五毛钱,男同胞每人代表一元钱.主持人喊到多少金额,参与者就要按此数目组合在一起,在5秒内未成功组合的团队全体成员将会受到相应 ...

  8. 架构设计文档模板之1:备选方案模板

    备选方案模板 1.需求介绍 [需求介绍主要描述需求的背景.目标.范围等] 随着前浪微博业务的不断发展,业务上拆分的子系统越来越多,目前系统间的调用都是同步调用,由此带来几个明显的系统问题: 性能问题: ...

  9. 计算机职业生涯规划备选方案,计算机与信息学院举办第十二届大学生职业生涯规划大赛...

    4月2日晚,计算机与信息学院于田C413室举行第十二届大学生职业生涯规划大赛决赛,旗山校区团学工作办公室方万春老师.艺术学院园林学院刘芸老师.计算机与信息学院辅导员林黄敏老师参加本次比赛并担任评委,学 ...

最新文章

  1. 阅读Book: MultiObjective using Evolutionary Algorithms (2) -- Multi-Objective Optimization: 各种解释多目标
  2. 索尼:声控将在VR中发挥大作用
  3. java流方式接收pdf_java – 在Itext 7中,如何获取范围流来签署pdf?
  4. [leetcode] 704.二分查找
  5. cdh集群linux命令,CDH集群中,服务器启动spark2-shell命令行注意事项
  6. 《web前端课堂》正式上线啦!
  7. JavaScript重难点解析1(数据类型——var、let、const区别,类型补充,“===”、“typeof”、“instanceof”区别,Symbol数据类型)
  8. 菜鸟启动“快递包装换鸡蛋”活动 史上最低碳的一届“双11”来了
  9. 如何使用 kubeadm 安装 Kubernetes?
  10. 继续跟上--“永远不要对一个外行聊你的专业”
  11. oracle的pl sql教程,Oracle PL SQL从入门到精通_IT教程网
  12. 企业 IT 架构转型之道 阿里巴巴中台战略思想与架构实战
  13. JSZip的简单使用
  14. 第一次使用GeoLite2-City.mmdb的经历---通过ip地址获取经纬度以及该ip地址所属地区
  15. 零基础如何学 Web 前端开发
  16. WIN10下没有NVIDIA控制面板的解决办法
  17. 服务器常用语言,计算机常用词汇--语言及服务器篇
  18. log4j不打日志问题之实战解决方案(二)
  19. 非功能性需求基础概念
  20. STM32外部引脚电路个人总结

热门文章

  1. 中国56个民族拼音表
  2. 电影html css页面,纯CSS3构建的电影屏幕效果
  3. python复制word段落_使用python将整个word文档(包括表)复制到另一个
  4. 从有线路由器连接到另一个无线路由器
  5. 交安ABC考试单选练习题库(1)
  6. MySql 删除索引
  7. 【网络】VLAN 及其配置详解
  8. 什么是数字“指纹”?
  9. 为什么你的广告投放效果不好?这5点做到了吗?
  10. 学会这一招,轻松处理图片转ico格式