TOC

在法求学时,一位教授告诉我,架构为什么是architecture?因为它有点像art。对于这个稍微有点“冷”的笑话,我第一个联想到的就是香港中银大厦,在我看来,中银大厦的外观设计与采光系统简直是平衡功能和艺术的杰作。这大概就是惊艳的architecture们的共通之处吧。

OK,言归正传。经历了业务分析与需求工程,今天终于来到了系统架构设计。这部分可以说是整个“V”模型中最重要的一个部分。可以说,当完成系统架构设计后,一个系统的performance已经定性了(这里我不想用“性能”这个词,原因我们下面再说)。

1. 何为系统架构设计?

This process encapsulates and defines areas of solution…with the system’s technical and commercial requirements and risks…

ISO/IEC 15288:2008
上文是ISO/IEC 15288:2008中关于系统架构设计目的的部分解释。从中有几个值得我们注意的关键词:areas和technical and commercial requirements。

第一关键词:Areas

“Areas” 的潜台词:架构设计的结果不是某种特点的solution,而是由多个solutuions组成的有共同性的“解”的集合。这个共性,也就是对系统需求的响应(当然,由于不同的架构设计会产生新的衍生需求,架构A不可能响应架构B的衍生需求,因此这类需求不在讨论之列)。

通过构造潜在架构的集合,一方面能够继续约束“V”模型下面的设计工作,另一方面,也为系统保留了“可能性”的基因,更可能在设计工作中产出革命性的产品。

虚线域内的任何一个点都可能是未来被采用的架构/solution

(结合上两期说到的需求工程,其实会发现在完整的工业体系流程中,伟大的工业产品,其初始定位往往是通过尊崇更基础的行为逻辑而产出的。这与我们传统认知中认为很多“灵光一现”而早就杰出产品的观念相矛盾。)

第二关键词:Technical & Commercial Requirements

这又是我们老调重弹了。既然架构是对系统需求的响应,系统需求是对STH Reqs的响应,那么架构就不可能不体现commerical需求。系统工程和机械工程、电气工程、自动化工程等等“工程”最大的区别就在于此。如果说其它各种“工程”是对“更高、更快、更强”的追求,系统工程则是一门平衡的艺术。而“优美”的系统架构就是这一艺术最好的体现。

既然是一门“艺术”,“优美”的系统架构也就没有优劣之分,好比谁也没办法比较莫奈和毕加索谁的作品更好?我没能力评价美术作品,但我知道,两者混合,肯定不是太好,因为风格不统一。同理,我们是不是可以推断“优秀”的系统架构都在遵循着各自内在唯一的设计哲学?


(图为莫奈的睡莲与毕加索的镜前女孩)

2. 架构设计的核心任务

解决了何为系统架构设计的问题,我们把系统架构设计从艺术的玄学领域拉回来,明确架构设计的核心任务,让它变得可操作起来。

实际上,系统架构设计可以理解为在一个高维空间中搜索最优解的过程。只不过这个空间也是需要自己建立的。

a)确立评价准则

评估评估准则是对判断系统架构的一个重要步骤。这跟之前说的系统架构设计无法评估优劣并不矛盾。在不同的设计哲学与理念下,我们很自然的不能比较毕加索与莫奈,但是当在统一的设计理念(或者说评价体系)下,评价他们却是可以的。

建立评价准则的过程可以理解为构建一个开放的高维特征空间(可以理解维度就是评价准则的数量)。因此,按照SE的理念,这一步的工作更多是关注如何响应更根本的功能需求(也就是建立空间),而不是纠结于具体技术细节本身(在空间中寻找符合要求的解),从而拓展系统架构设计的可能性。

同时,为了避免出现“萝卜招聘”的情况,先有评价准则再有待选的系统架构方案才能客观的对系统架构设计进行评价。当评估准则建立时,对应的“最优解"就会确定。

而如何根据需求准确建立每个系统的评价准则,如何平衡各种因素在评估时的权重,就是系统工程师的重要任务。

b)建立备选方案集

(高维空间中可能有无数个三点都满足需求,那么哪个才是最优解?)

在建立了评估空间之后的下一步工作是通过建立备选的解的子集合,降低搜索最优解的难度。

在这一步,体现系统工程师能力的时候又来了。如何平衡解的包络的大小?大的包络当然能包含更多系统设计的可能性,得到“惊艳”的系统设计,但是也会造成搜索最优解的过程冗长,浪费大量的资源。

c)选定系统架构

现在我们左手握着评价准则,右手拿着候选系统架构,已经可以做出选择了。下面的工作就不用多说了,就是系统工程师的“老把戏”——tradeoff。通过建模、仿真、分析等等手段,选择一个备选方案并证明其为最优就可以了。至此,我们就建立了系统的基线作为后续工作的输入。

之前聊过的,系统工程的两个核心思想:“需求”与“追溯”。完成了对需求的响应,这一步继续向下追溯就要到分系统了。因此,此处的基线应能提供后续需要的分系统需求、验证确认需求、系统组成描述等等后续开发所需要的全部信息。当然,后续还少不了持续迭代。

3. 总结

综上,可以看出在系统架构设计的整个过程中,各种权衡无处不在。从技术风险到成本效益,从备选部件到可能的架构。我想,架构设计可以比作一项“带着镣铐跳舞”的活动,甚至更难,因为还要考虑“美观性”和“完成度”。这大概也能解释在各种SE手册中,系统架构设计都是技术部分着墨最多的。然而,正如之前所说,系统架构设计就好像艺术一样。无论多么熟悉架构设计的流程,“惊艳”的架构永远还是需要一点灵感的。这大概也就是为什么革命性的工业系统也好像杰出的艺术品一样稀少吧。

(左图为通过风格迁移得到的“莫奈风格”的莲花,右上为原图,右下为莫奈“睡莲”原画。虽然大部分人无法像大师一样创造“惊艳”的系统,但是通过技术手段,“照猫画虎”足矣。)

欢迎关注我的微信公众号,一起交流系统工程技术

系统工程(SE)学习笔记(四)——系统架构设计相关推荐

  1. 网购秒杀系统架构设计案例分析——《大型网站技术架构》笔记

    一.核心思想: 网站秒杀时的并发比正常运营时多的多,所以网站的秒杀业务不能使用正常的网站业务流程,也不能和正常的网站交易业务共用服务器(否则造成巨大浪费),必须设计部署专门的秒杀系统,进行专门应对 二 ...

  2. 5、赛灵思-Zynq UltraScale+ MPSoC学习笔记:Petalinux 的设计流程及定制Linux系统

    5.赛灵思-Zynq UltraScale+ MPSoC学习笔记:Petalinux 的设计流程及定制Linux系统 声明:本文是学习赛灵思 Zynq UltraScale+ MPSoC 5EV过程中 ...

  3. STM32F103学习笔记四 时钟系统

    STM32F103学习笔记四 时钟系统 本文简述了自己学习时钟系统的一些框架,参照风水月 1. 单片机中时钟系统的理解 1.1 概述 时钟是单片机的脉搏,是单片机的驱动源 用任何一个外设都必须打开相应 ...

  4. BAT大牛亲授基于ElasticSearch的搜房网实战(第四章环系统架构设计与分层)

    从零起步基于ElasticSearch的搜房网(前后端集成)实战(介绍与整体目录)点击即可 静态资源集成太多页面,我已经上传到博客资源链接,供下载.后期代码全部完善后,会上传到github上. 静态资 ...

  5. 《秒杀系统架构设计》学习

    QQ 业务特点:细粒度数据查询 即使并发量很大,锁冲突其实不大,数据水平切分后,因为带上了 uid,gid 等字段,用户层面几乎没有锁冲突 weibo业务特点:读多写少,有少量读写锁冲突 微博的核心业 ...

  6. 系统架构设计:程序员向架构师转型之路-张勇-专题视频课程

    系统架构设计:程序员向架构师转型之路-247人已学习 课程介绍         本课程首先围绕普通开发人员如何向架构师转型这一课题,从架构师的角色以及转型过程中会遇到的困难及其解决方法切入展开讨论,总 ...

  7. C语言程序设计学习笔记:P1-程序设计与C语言

    本系列博客用于记录学习浙江大学翁恺老师的C语言程序设计,系列笔记链接如下: C语言程序设计学习笔记:P1-程序设计与C语言 C语言程序设计学习笔记:P2-计算 C语言程序设计学习笔记:P3-判断 C语 ...

  8. 《系统架构设计》-01-架构和架构师概述

    文章目录 1. 架构的基本定义 1.1 架构组成理论 1.1.1 系统元素 1)概念 2)静态结构和动态结构 1.1.2 基本系统属性 1.1.3 设计和发展原则 1.2 架构的决策理论 1.2.1 ...

  9. java系统架构设计,2022最新

    Java中23种设计模式的详细解析Java开发中23种设计模式详细介绍设计模式介绍设计模式分类设计模式六大原则开闭原则(Open Close Principle)里氏代换原则(Liskov Subst ...

最新文章

  1. 一文搞清楚QPS、TPS、并发用户数、吞吐量
  2. 基于DOS命令打war包
  3. DayDayUp:三观一致必将取代血缘关系,成为新的人际纽带(博主推荐文章)
  4. 转:openTSDB 2.0 安装
  5. stm32串口通信(初学者对于串口通信的理解)
  6. Java 设计模式之迭代器模式
  7. 浙江省2018年高等数学竞赛工科类试题
  8. UE4如何贴混合贴图_UE4_赛博朋克雨夜环境创作分享
  9. jdbc代码_凯哥带你从零学大数据系列之数据库篇---第三章:JDBC基础
  10. 如何查看Dll中包含了哪些函数
  11. 2015职称计算机考试基础知识,2015年中级职称计算机考试基本知识点.doc
  12. OpenCV学习之Canny算法自实现
  13. [ Linux ] 可重入函数,volatile 关键字,SIGCHLD信号
  14. 便利店的选址有什么诀窍吗?需要掌握哪些选址技巧?
  15. 机器翻译评价指标之BLEU原理介绍及代码实现
  16. 静态库与动态库之间的区别
  17. HRSSC是什么职位,有什么要求
  18. sqli-labs闯关笔记(Challenges)
  19. SG600城市智能灯杆网关+云平台解决方案
  20. IMDB评分最高的前50部动画电影

热门文章

  1. htcm7刷linux,htc one m7刷官方zip包的教程
  2. 图片实现水平垂直居中的方法
  3. [机缘参悟-39]:鬼谷子-第五飞箝篇 - 警示之二:赞美的六种类型,谨防享受赞美快感如同鱼儿享受诱饵。
  4. NLPCC'22 | 一种兼具准确性和多样性的图像风格化描述生成框架
  5. DFS算法原理及其具体流程,包你看一遍就能理解
  6. 简单介绍Fastboot
  7. 基于内容可变长度分块Content Defined Chunking
  8. php+转义反斜线,PHP 转义序列(反斜线)
  9. 2022年NOC软件创意编程(学而思赛道)选拔赛小学高年级组python,包含答案
  10. 光滑噪声数据常用的方法_整理一份详细的数据预处理方法