欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

复杂系统架构设计<1>

程序员文章站 2022-09-27 08:36:04
这两天开始读由Edward Crawley(爱德华 克劳利)、Bruce Cameron(布鲁斯 卡梅隆)、Daniel Selva(丹尼尔 塞尔瓦)著作的系统架构,一开始看目录以为是介绍系统软件架构的书,也是我买它的缘由,但粗略看完序和第一章第二章后不经肃然起敬,这本书是真的好,该书面向对象是适用 ......

这两天开始读由edward crawley(爱德华 克劳利)、bruce cameron(布鲁斯 卡梅隆)、daniel selva(丹尼尔 塞尔瓦)著作的系统架构,一开始看目录以为是介绍系统软件架构的书,也是我买它的缘由,但粗略看完序和第一章第二章后不经肃然起敬,这本书是真的好,该书面向对象是适用于所有需要系统架构行业而不单单是软件行业。它系统地介绍了系统的概念,组成,功能,如何分解系统,抽象系统,组合系统等相关的理论,相信不管什么学科什么专业什么行业读这本书都会有所收获。决心仔细研读一遍。

有的书传播知识,有的书介绍技能,有的书娱乐大众,而优秀的书传播优秀的思想,本书就是。

这篇是第一部分读书笔记,介绍了写系统架构理念,系统分析必备思路,系统架构所用的思维模式。

0 简介

架构的概念:对系统中实体以及实体之间关系所进行的抽象描述。

架构的目的:找出系统架构得以确立的决策点,并谨慎做出决策。不良的架构决策则会使得大型的研发活动从刚开始就变得难以推行。

核心观点:一些早期的决策可以加依分析和处理,在不知道各个组件的详细设计情况下,系统架构依然能经得起检验。不要期望直接设计出最优的架构,而仅仅是结构良好的创造活动要优于毫无结构的创造活动。目标当下。

学习目标:形成一套思考并创建系统架构的方式。

1 基本概念

1.1 系统

系统思维:与其他一些思维模式相并立,如批判思维,分析思维,创新思维。把某一种疑问、状况或难题明确视为系统是思维方式。

系统:由一组实体和这些实体之间的关系所构成的集合,其功能要大于这些集体各自的功能之和。其由有两个重点

  • 系统是由相互作用或相互联系的实体组成的
  • 实体之间发生相互作用时,会出现一种功能,这种功能大于或不同于这些实体各自所具备的功能。

实体:构成全体的小块,也称之为部件、模块、例程、配件等

实体关系:可以是静态的(连接关系),也可以是动态并交互的(货物的交换关系)。

哪些可以视为系统:任何一组实体都可以解读为一个系统。complex作为

  • 形容词复合的:形容实体与关系较多的事务。
  • 名词系统

系统和产品:产品是能够交换或具有交换潜力的事物,有些事物是产品不是系统(大米),有些事物既是产品(可供交换)也是系统(含有很多相互联系的实体)

架构:对系统种的实体及实体之间的关系所进行的抽象描述。

1.2 涌现

一组实体及其关系的集合,其功能大于这些实体各自功能之和。

涌现:系统在运作时所表现、呈现或浮现出的东西。为什么要构建系统就是要为了取得满意的涌现物。对涌现的理解,是系统思维的目标,也是系统的艺术。

功能:是系统最明显和最关键的涌现物。是系统所作的事情,也就是系统的动作、产出或输出。

功能/涌现物有四种分类(以汽车为例):

预期的涌现 意外的涌现
令人满意的 汽车可以载人
汽车内可以使人感到温暖或凉爽
汽车令人感到愉悦
汽车创造一种个人*的感觉
不和人意的 汽车燃烧碳氢化合物 汽车可以致人死亡

性能:系统涌现物:是系统运作或执行其功能的好坏程度。系统功能的一项属性。

原则:一种长期有效的道理,能够适用于各种问题。

涌现原则:当各实体拼合成一个系统时,实体之间的交互会把功能、行为、性能和其他内在属性涌现出来。将探寻系统所涌现出的预期属性和意外属性。名人名言

  • 系统并不是其组成物的简单加总,而是这些组成物之间互动的产物。russell ackoff
  • 整体大于其各部分之和。亚里士多德《形而上学》

系统还会涌现出其他属性:可靠性,可维护性,可操作性,安全性,健壮性,鲁棒性。这些属性与性能不同,这些属性不是立刻就能创造出价值,而是通过系统在整个生命期种的运作情况来体现。

不合人意的意外涌现被称之为紧急状况。

价值:是有着一定成本的利益。构建系统就是为了获得利益。

1.3 系统及其形式与功能

系统思维的第一任务:确定系统及其形式与功能。

形式:系统是什么,具有一定的形状、配置、编排及布局,是一种已然存在或有可能存在的物之载体或信息载体。形式在一段时间内是静止固定的。系统一定具备一定的形式。

功能:系统做什么,能够引发并创造某种性能,是对性能有所贡献的活动、操作及转换行为。是使某物得以存在或得以体现其用途的一种动作。涌现物出现在功能领域。由过程和操作数组成。

功能与形式:功能需要以形式的手段来展现。功能比形式更抽象,功能涉及转变,比形式更难以描述。

过程:功能中纯粹标识动作或转换的那一部分,改变操作数状态的那一部分。

操作数:其状态会在过程中发生改变的事物。

例子:

复杂系统架构设计<1>

复杂系统架构设计<1>

复杂系统架构设计<1>

形式和功能的区别:类似于商业活动中的商品和服务,商品是有形的产品(称为形式),而服务则是相对较为无形,面向过程的产品(称之为功能)。

每一种系统都具备形式、过程与操作数着三项特征。

名词-动词-名词:第一个名词充当执行动作所有的工具(形式),动词用来描述该动作(过程),第二个名词用来标识动作对象(操作数)。

1.4 实体及其形式与功能

系统思维的第二任务:确定系统中的实体、实体的形式和功能,以及系统边界和系统所处的环境。

系统是由一组实体所构成的。系统中的每个实体都有其形式和功能。

复杂系统架构设计<1>

当功能按某种次序执行时,会涌现出更加动态的行为。

一个系统可以分解为更小的系统,可以扩展成更大的系统,定义系统的实体和系统的边界,是一件非常重要而又比较困难的事情。

系统思考需要面对5个问题:

  • 确定如何将系统初步分解为恰当的实体
  • 用整体思维找出潜在的实体
  • 通过对重点的分析,把注意力集中到重要的实体上
  • 为实体创建抽象
  • 定义系统的边界,并将其与外界环境隔开

1.4.1 分解为恰当实体

难点在于:系统究竟属于互不相同的元素所组成的系统,还是模块化或集成系统。

如果系统由界限清楚的实体组成,可以用一种非常清晰的方式来分解。系统确实是由彼此较为独立的一些实体所聚集并定义而成的。舰队、马群、树林、图书馆

模块化的系统 :各个模块之间(尤其在功能上)相对独立。模块内部的关系比较密集,模块之间的关系比较稀疏。放大电路

集成系统:系统系统很难在不影响其功能的前提下进行简单分解,一般都是内部高度互联的系统。汽车转向装置系统,集成电路。

1.4.2 找出潜在实体

整体论:强调整体概念,从整体上把握事物之间的紧密联系。

整体思维:发现对系统可能有重要意义的全部实体。通过整体思维促使发现与系统交互的每一样东西,并考量给系统的影响和后果。

已知不确定和未知不确定:已知不确定是知道但不了解,未知不确定是连有没有都不知道的事物。

整体思维的目标是尽可能找出位置不确定的事物。

整体原则:每个系统都作为某一个或某些个大系统的一小部分而运作,同时,每个系统总中也都包含着更小的一些系统。整体思考这些关系,并研发出与上级系统、下级系统和平级系统相协调的架构。

  • 没有谁完全是孤岛。每个人都是陆地的一小块,都是主题的一部分。john donne

激发整体思维:结构化和非结构化头脑风暴,研发框架来保证相关问题可以得到考虑,从多个视角进行思考,把系统明确地放在大环境下进行思考。

复杂系统架构设计<1>

复杂系统架构设计<1>

1.4.3 找出重要实体

聚焦:把与当前问题有关的重要事物找出来

聚焦原则:在任何一个点上,都唔那个发现很多影响系统的问题,而其数量已经超出了人的理解能力。因此,必须找出其中最关键,最重要的哪些问题,并集中精力思考它们。

  • 问题不在于你看什么,而在于你看到了什么。henry david thoreau亨利 戴维 梭罗

聚焦过程中,把疑问、状况或难题确定出来,把其中重要方面凸显出来。更具体就是利益相关的东西是什么,

面对实体问一个简单的问题:这个实体对关系的成果或涌现物来说是否重要。一般来说把握其交互关系的前提下,人脑可以同时思考的事情优先,一般数量是7浮动2。列出对系统重要的事物一般为7个,把这些事物替换掉对系统的影响。

1.4.4 创建抽象

抽象:抽离于物体的性质描述,只含本质不含细节。好的抽象可以促进思考,不好的抽象会阻碍思考。

例子:

实际放大器:

复杂系统架构设计<1>

抽象机制指导原则:

  1. 针对形式和功能创建抽象时,要把重要的信息凸显出来,而把不太重要的细节隐藏起来。
  2. 要创建那种使适当的关系有机会得以表现出来的抽象。
  3. 在适当的层面进行分解或聚合,并于该层面创建抽象。
  4. 在能够有效表达当前系统的重要方面这一前提下,创建数量尽可能少的抽象

违背第一条,可能会把放大器抽象成热源,不能凸显放大的过程,如果违背第三条,可能会在抽象过程中覆盖过多的细节。

1.4.5 定义系统边界

系统边界可以清晰地划分出系统与其外围事物之间的界限。定义系统边界就等于将系统与其外围环境区隔,

外围环境:围绕在系统外围的东西。

系统边界:位于系统和大环境之间。划定边界考虑下列问题

  • 需要分析的实体包括进来(目标是理解某个机制)
  • 创建设计方案所必备的要素包括进来(目标是创建设计方案)
  • 负责实现和操作的东西包括进来(目标是体现某种价值)
  • 规章、契约、法律制度所建立的规范边界
  • 把系统和大环境区分开的传统做法和习惯做法
  • 必须遵守的一些接口定义和标准,包括与供应商的关系

外部接口:当某个关系跨越系统边界的时候,系统与大环境之间定义了一个外部接口

例子:如果认为team x 的任务是制作设计方案,那么把john、susan和amy放在系统内,把市场人员和操作人员放在系统之外就是一种较为合理的边界划分方式。用虚线表示系统边界。

例子中第二项任务:找出系统的实体,实体的形式与功能,以及系统边界及外围环境后的结果:

复杂系统架构设计<1>

1.5 实体之间关系

系统思维的第三任务:找出系统内及系统边界处实体之间所具备的关系,以及那些关系的形式与功能。

关系按特征分类:功能关系和形式关系。

功能关系:用来完成某件事情的实体之间所具备的关系,此关系可能涉及实体之间对某物的操作、传输或交换。功能关系具有动态性,所以其也成为交互关系。交互过程中,相关实体可能交换操作数,也可能协同对操作数执行操作。

形式关系:在某段那时间内稳定存在或有可能稳定存在的实体之间所具备的关系。其通常体现为连接关系或几何关系。为了强调其静态性也称为结构关系

功能关系与形式关系:功能关系通常以形式关系为前提。形式关系是功能关系的载体。例子:心脏不与肺相连,就无法同肺部交换血液。

形式关系与功能关系可以表示为关系图或n×n表。

关系图例子:系统内两个实体与系统外围环境中一个实体之间的关系。

  • 形式交互以双箭头线来表示,功能交互根据交互的性质用单箭头线或双箭头线来表示。
  • 有些关系位于系统内部,有些则跨越了系统边界,对于跨越边界的关系其表示方法与系统内部关系相似,它用虚线而非实线来表示。画这种关系图,应该把实体的形式和功能写出来,同时最好给关系加上标注。

复杂系统架构设计<1>

放大器关系图:黑色表示功能关系,灰色表示形式关系。

复杂系统架构设计<1>

电路图:把结构化连接或形式关系称为电气连接,功能交互中的箭头,在电路图中指的是电流的流动。

复杂系统架构设计<1>

n×n表:表的上方和左侧都写了n个实体,第一张表列出形式关系,第二张表列出功能关系。表中虚线左边是表示系统边界内部实体。位于对角线之外的每一个单元格都表示一种内部关系或外部关系

复杂系统架构设计<1>

关系图可以更加直观,n×n能够体现更多的细节,当节点和连接数量变多之后不会显得特备杂乱。

形式关系一般比较具体,刚开始思考关系的时候可以从形式关系入手,再思考的同时再考虑其承载的功能。形式关系的重要性,主要体现在对功能关系的曾在上。涌现物出现在功能领域,所以功能交互才是真正重要的。

外部接口:系统内部的实体和系统外围环境中的实体之间。不管是形式关系还是功能关系都有可能跨越系统边界。

1.6 预测涌现物

系统思维第四项任务:基于实体的功能以及实体之间的功能互动,来确定系统的涌现属性。

1.6.1 重要性

系统是奇妙之处在于涌现。系统各个实体组合一起后,实体的功能与实体之间的功能交互形成的组合涌现出更多的功能。

在形式领域中不会发成涌现。在功能领域中则会复杂很多,就涌现出很多其他的功能。

系统思维的主要目标:努力了解并预测涌现物以及涌现物带给系统的强大能力。

1.6.2 系统故障

系统故障就是由于预测涌现物没有出现。

预期涌现物没有出现:预期的良好涌现物未能出现,意外的涌现物出现

复杂系统架构设计<1>

1.6.3 预测涌现物

预测的难点在于不知道系统会涌现出何种功能。

三种方式来预测:

  • 更具以前做过的情况来预测,也就是根据先例来预测。回想以前做过的相同或极相似的解决方案,然后对其略作修改,并实现出来。
  • 试验,做出一个小模块,来进行试验。螺旋式开发,先构建出系统的某些部分,并检验其涌现物是否合意,再于后续的螺旋环节中逐次构建系统的其余部分。
  • 建模:建模预测涌现物并取得巨大成功的例子就是集成电路
  • 推理:系统没有先例,不能试验建模,就只能进行推理,在推理的过程中可以从一些相似但不同的系统中了解一些信息,也可以通过不完备的建模来得到一些信息来对最终的涌现物进行判断。

1.6.4 涌现物依赖于实体及关系

涌现物依赖于系统各实体的功能以及实体之间的功能交互。形式是功能交互的载体,形式于形式之间的关系(结构)对预测物有着重要意义。

三个例子,过滤器,杠杆,语句:

复杂系统架构设计<1>

机械杠杆:杠杆和支点组成,支点放在远离操作者就是良好涌现方法,若改变支点位置,良好涌现物就消失了。

形式关系对于涌现物起着关键作用,对特定的功能交互起着重要引导作用。

1.7 总结

系统思维就是把某个疑问、状况或难题明确当成系统来思考。

复杂系统架构设计<1>

2 复杂系统

复杂的系统:由很多高度相关、高度互联或高度混杂的元素或实体所组成的系统。

为什么会复杂:

  • 对系统由更多的要求,更多功能,更好性能,更加健壮,更加灵活。
  • 要求系统能够于其他系统相互协作

复杂度衡量法:通过一些复杂度的指标来衡量系统的复杂性。

难懂:系统的复杂度超越了人类由先的观察和理解呢能力,难懂的事物具有较高的表面复杂度。

架构师训练自己的思维:去理解复杂的系统,令那些系统不再那么难懂,应努力构建易懂的架构。

良好的系统架构:构建一套具备必要复杂度同时又不难懂的系统。

2.1 team xt范例

team xt是team x的扩展,角色仍然是制作设计方案。

分析一个系统先提出三个问题:

  1. 系统是什么:team xt系统是由一组人员和一套过程所构成的,过程就是研发设计方案。
  2. 系统的形式是什么:每位团队成员的总和
  3. 系统要完成什么功能。功能就是指系统所要做的事情、活动或转换行为。team xt系统功能就是研发设计方案。

第一项任务:确定系统及其形式与功能。通过仔细观察,广泛经验,每位成员谈话等手段。

第二项任务:确定系统中的实体、实体的形式和功能,以及系统边界和系统所处的环境。

复杂系统架构设计<1>

复杂系统架构设计<1>

划定系统边界,虚线以下的部分是系统的外部环境。

第三项任务:找出系统内及系统边界处实体之间所具备的关系,以及那些关系的形式与功能。

复杂系统架构设计<1>

第四项任务:基于实体的功能以及实体之间的功能互动,来确定系统的涌现属性。

2.2 分解

分解:就是把实体分成小的部件或组成部分。分而治之。

分解的难点:分解出来的实体构建整个系统的这一过程,这一过程通常称为整合。

整合:把各个部件所具备的形式聚合起来。

分解方式:取决于系统元素的构成情况。不同元素构成的系统,把team xt按照成员进行分解。元素的形式不确定,可以考虑按照功能来分解(例如,转向机制,压缩机,排序算法)。按照功能分解比较好。

体系:一种其实体均处在某个层次或某个位阶的系统,这些层次按照上下顺序排列起来。

元素在体系上有位阶的原因:

  1. 元素所涉及的范围更广。省长比市长行政范围大
  2. 元素的重要性较高或性能较强。黑带比褐带选手高
  3. 元素在功能上承担更多的责任。总统比副总高,职责更大。

2.3 层级分解

复杂系统架构设计<1>

该图没有体现出三位小组长之间的区别

复杂系统架构设计<1>

可以清楚的看到三个组长之间不同的分工。每个节点所统领的下层节点数量限制在7个以内,不超越认知能力。

组是一种有用的抽象单元,但不是唯一的分解方式,还可以按照地理位置,连接性或功能关系等分解。

如何确定分解结束:底层元素是不便于分解的原子部件。

简单系统:只需要分解一次,分解出来的这一层中元素不超过7个。

复杂系统架构设计<1>

复杂度适度系统:经过两次分解,每个上级部件统领的夏季部件不超过7个,最低层数量不超过81个,如team xt。

复杂系统:分解层级数超过3层。很少有这样的系统。

系统本身称为第0层,分解出来的那些层分别称为系统之下的第1层,第2层。系统之下的那些层可以叫做:

  • module:模块
  • assembly:配件
  • sub-assembly:子配件
  • function:函数或功能
  • rack:架
  • online replacement unit , orm :在线更换单元
  • routine:例程
  • committee:委员会
  • task force:工作组和任务组
  • unit:单元
  • component:组件
  • sub-component:子组件
  • part:部件和部分
  • segment:区段
  • section:节
  • chapter:章

系统之上的那些层:

  • system of system :系统的系统
  • complex:复合体
  • collection:集合

2.4 原子部件

原子部件:不能拆解的东西,凡是一经拆解就是去意义的东西。

2.5 逻辑关系

2.5.1 类和实例

类:一种结构,用来描述某种事物所共有的特征。

实例:类的具体表现。类的实例化。

2.5.2 特化关系

特化/泛化关系:通用的物体与一组特殊的物体之间的关系。

特化在编程语言中类似于继承:某个通用的类中创建子类,使得子类继承通用类中的某些属性及功能。

2.5.3 递归

递归:某套过程或某个对象把自己包括进来。以一种于自身相似的方式来使用实体或关系的现象。

2.6 思考

自顶而下或自底而上思考:使用最多的是自顶而下,从系统的目标开始,思考概念和高层架构。

由外向内思考。

现实工作是由内向外,最常用的方法是:从系统中选一个点,然后由这个点开始想上或向下探索1~2层。

交替思考:在思考系统时:思维会在形式领域和功能领域之间来回切换。以team xt为例:先从功能领域:研发设计方案,到形式领域:确定小组这一形式:功能领域:思考小组都要完成功能,思考研发设计方案这一功能如何涌现。

2.7 架构工具

架构展示有两种方法:

  • 维护一个集成模型,并根据需要对其进行投射。机械上用ug等。
  • 模型中维护多个视图。直接构建二维视图,看能不能协调一致。

对象过程方法(object process methodology , opm):把形式、功能、实体及关系有关的信息不都融入同一个模型中。

系统建模语言(system modeling language ,sysml)和美国国防部架构框架(department of defense architecture framework,dodaf):采用不同视图来表示信息。

2.7.1 sysml

sysml:对软件工程中的统一建模语言进行改编

复杂系统架构设计<1>

2.7.2 opm

opm:将面向对象的图表与面向过程的图表合并到同一套方法中,以便对系统进行描述。

在opm中,对象用方框表示,过程用椭圆表示,其特点:并不会针对系统创建多个不同的视图,或多种不同类型的图表,只会为系统创建一个继承模型,多个sysml图可以融合到一张含有对象、过程及关系的opm图中。

复杂系统架构设计<1>

复杂系统架构设计<1>

2.8 总结

复杂系统架构设计<1>