软件架构思想和系统架构图

赵广陆 赵广陆     2022-10-22     178

关键词:

目录


1 软件架构体系

预备知识:互联网架构演进之路 https://blog.csdn.net/ZGL_cyy/article/details/126330968

1.1 系统与子系统

系统:泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。

  • 关联:系统是由一群有关联的个体组成的,没有关联的个体堆在一起不能成为一个系统。例如,把一个汽车发动机和一堆苹果放在一起不能称之为一个系统,把发动机、底盘、轮胎、车架组合起来才能成为一台汽车,构成一个系统。
  • 规则:系统内的个体需要按照指定的规则运作,而不是单个个体各自为政。规则规定了系统内个体分工和协作的方式。例如,汽车发动机负责产生动力,然后通过变速器和传动轴,将动力输出到车轮上,从而驱动汽车前进。
  • 能力:系统能力与个体能力有本质的差别,系统能力不是个体能力之和,而是产生了新的能力。例如,汽车能够载重前进,而发动机、变速器、传动轴、车轮本身都不具备这样的能力。

子系统:子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。 子系统的定义和系统定义是一样的,只是观察的角度有差异,一个系统可能是另外一个更大系统的子系统。

以微信为例来做一个分析:

  • 微信本身是一个系统,包含聊天、登录、支付、朋友圈等子系统。
  • 朋友圈这个系统又包括动态、评论、点赞等子系统。
  • 评论这个系统可能又包括防刷子系统、审核子系统、发布子系统、存储子系统。
  • 评论审核子系统不再包含业务意义上的子系统,而是包括各个模块或者组件,这些模块或者组件本身也是另外一个维度上的系统。例如,MySQL、Redis 等是存储系统,但不是业务子系统

1.2 模块、组件、服务

  • 模块:是一套一致而互相有紧密关连的软件组织。它分别包含了程序和数据结构两部分。现代软件开发往往使用模块作为合成的单位
  • 组件:自包含的、可编程的、可重用的、与语言无关的软件单元,组件可以很容易被用于组装应用程序中

模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已。例如:

  • 从逻辑的角度来拆分系统后,得到的单元就是“模块”从物理的角度来拆分系统后,得到的单元就是“组件”
  • 划分模块的主要目的是职责分离;划分组件的主要目的是单元复用。

例如我们要做一个学生信息管理系统,这个系统从逻辑的角度来拆分,可以分为:登录注册模块、个人信息模块、个人成绩模块;从物理的角度来拆分,可以拆分为应用程序、 Nginx、Web 服务器、MySQL等

  • **服务:**服务和组件有某种相似之处:它们都将被外部的应用程序使用。两者之间最大的差异在于:组件是在本地使用的(例如Jar文件);而服务是运行起来的,要通过同步或异步的远程接口来远程使用(例如RESTFul接口、web service、消息系统、RPC,或者socket)

服务是可以单独运行,并且对外提供功能的一种形式。可以将一个复杂的项目分解成多个服务。当某一个服务挂掉时不会拖垮整个系统。如果没有服务化,每当一个新的功能被添加到系统中就会影响到所有功能;如果采取服务化,每个服务只对其上下游的服务负责。

1.3. 软件架构体系

2 架构原则

2.1 解耦

在软件工程中,耦合指的就是对象之间的依赖性。对象之间的耦合度越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。

耦合性存在于各个领域,而非软件设计中独有的,理论上说绝对的零耦合是做不到的,但可以通过一些方法将耦合降至最低,降低耦合度即可理解为解耦,在设计上解耦的核心思想是【彼此独立,互不依赖】。

2.2 分层

分层结构是最为流行、应用最广泛的应用软件的设计方式。在应用了分层结构的系统中,各个子系统按照层次的形式组织起来,上层使用下层的各种服务,而下层对上层一无所知。每一层都对自己的上层隐藏其下层的细节。

经典三层架构

在软件架构中,经典三层架构自顶向下由用户界面层、业务逻辑层、数据访问层组成。在提出该分层架构的时代,多数系统往往较为简单,本质上都是一个单体架构的数据库管理系统。这种分层架构有效地隔离了业务逻辑与数据访问逻辑,使得这两个不同关注点能够相对自由和独立地演化。经典的三层架构如下所示:

分层的设计原则是:保证同一层的组件处于同一个抽象层次。即所谓的“单一抽象层次原则”。这一原则可以运用到分层架构中。比如下图所示:

2.3 封装

假设我们有一个程序,它在逻辑上有一些不同的对象,并且这些对象彼此之间会相互交流。

在一个类中,当每个对象的状态保持相对孤立,就实现了封装。其余的对象并不能观察到这个对象的状态。他们能做到的只有调用一些被称作“方法”的通用功能。

因此,对象使用方法掌控着自己的状态,除非明确允许,没有其他人可以接触到它。如果你想和某个对象交流,你需要使用提供的方法。但在默认情况下,你无法改变对象的状态。

3 架构的方法

架构图是为了表示软件系统的整体轮廓和各个组件之间的相互关系和约束边界,以及软件系统的物理部署和软件系统的演进方向的整体视图。要让干系人理解、遵循架构决策,就需要把架构信息传递出去,架构图就是一个很好的载体。不同的视角和角色,关注点也是不同的,看到的架构图是不一样的。

3.1 业务架构

使用者:CEO、CIO、CTO、产品总监

核心业务流程:

核心能力:

3.2 功能架构

使用者:产品总监、产品经理

**示例:**头条功能架构图

3.3 系统架构

使用者:系统架构师

3.4 技术架构

使用者:系统架构师

示例一:https://www.processon.com/view/5f2a0bfb1e08533a629b7ed3

示例二:冷链项目技术架构图

3.5 数据架构

使用者:CTO、系统架构师、数据架构师

示例一:数据模型

示例二:大数据平台架构

3.6 部署架构

使用者:运维架构师

示例一:https://www.processon.com/view/5f2a03cf637689168e49e3fa

示例二:冷链项目部署架构图

软件架构思想系列分层架构

-   分层架构   -今天谈下架构设计中的分层思想和分层模型。架构思维概述对于架构思维本身仍然是类似系统思维,结构化思维,编程思维等诸多思维模式的一个合集。由于架构的核心作用是在业务现实世界和抽象的... 查看详情

前端架构思想

软件架构(softwarearchitecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。传统软件架构描述的对象是直接构成系统的抽象组件,侧重于系统的抽象、拆分、组织方式等。所以如果从传统软件架构定义出发... 查看详情

[架构之路-109]-《软考-系统架构设计师》-软件架构设计-2-软件架构概述:架构风格

...架构风格展现系统不同侧面的信息,因此,一个软件系统可以采用多种不同风格展现软件的架构。不同风格的系统或子系统,需要使用不同的架构图来展现。一个大的系统,通常有根据不同业务的特点,采用... 查看详情

系统架构:分层架构

...#xff0c;为了可让产品快速上线,此时系统分层一般不是软件开发需要重点考虑的范畴,但是随着业务逐渐复杂,大量代码纠缠耦合,此时会出现逻辑不清楚、模块相互依赖、扩展性差、改一处动全身的问题。系统在... 查看详情

软件架构与设计-----架构模型

架构模型软件架构涉及软件系统抽象的高级结构,通过使用分解和组合,具有架构风格和质量属性。软件架构设计必须符合系统的主要功能和性能要求,并满足可靠性,可扩展性,可移植性和可用性等非功能性要求。软件架构必... 查看详情

一线架构—细化架构

概念架构阶段的3个步骤初步设计:基于关键功能,借助鲁棒图进行以发现职责为目的的初步设计,对于新系统很重要。高层分割:对系统黑盒进行切分,可以借助架构模式。考虑非功能需求,通过"目标-场景-决策表"分析非功能... 查看详情

软件的==需求==和设计文档

目录软件设计的总体思路需求设计文档功能设计系统架构设计逻辑结构图2-逻辑蓝图的表示法图3-a.TélicPABX的逻辑蓝图b.空中交通系统的蓝图进程架构图4-过程蓝图表示法图5-TélicPABX的过程蓝图(部分)开发架构图5-开发蓝... 查看详情

如何画出一张合格的技术架构图?

...决策。2、什么是架构图?系统架构图是为了抽象地表示软件系统的整体轮廓和各个组件之间的相互关系和约束边界,以及软件系统的物理部署和软件系统的演进方向的整体视图。3、架构图的作用一图胜千言。要让干系人理解、... 查看详情

[架构之路-36]:目标系统-系统软件-linuxos硬件驱动程序架构中隐藏的六大“分离”的思想与主要的驱动程序框架案例分析

目录第1章“分离”的思想的来源1.1 Linux一体化字符设备驱动程序的缺陷1.2懒人改进的思考1.3Linux硬件驱动程序期望的需要与目标1.4“分离”思想的来源1.5  隐藏在Linux设备驱动程序中的“分离”的思想1.6“分离”遵循的原则1.7... 查看详情

(软考笔记)——系统架构设计师-uml建模与架构文档化

...对象图状态和活动图状态图活动图构件图部署图基于UML的软件开发过程软件开发过程概述基于UML的需求分析对象的设计方法系统架构文档化模型概述逻辑结构进程架构开发架构物理架构场景迭代过程个人格言UML建模与架构文档化... 查看详情

软件架构思想系列模块化与抽象

前言软件架构的本质:软件体系结构是软件系统的基本组织,包括组件的组成、它们之间的关系以及它们之间的交互。Softwarearchitectureisthefundamentalorganizationofasoftwaresystem,includingthecompositionofitscomponents,therelationshipsbetweenthem,andtheirint... 查看详情

软件架构思想系列从伟人《矛盾论》中悟到的软件架构思想真谛:“对象”即事物,“函数”即运动变化...

...力和生产关系矛盾发展的结果。上述论断,我不禁联想到软件开发过程中的“矛盾”发展之规律,与事物(“需求”)之从混沌未知状态到MRD-PRD-系统设计-开发-物理部署上线使用的运动变化过程之间的相互联系,特画图如下:... 查看详情

系统逻辑架构设计

...。 3.设计与需求跟踪序号用户需求用户需求变更标识软件需求功能标号软件需求功能标题软件需求变更标识需求 查看详情

企业架构图之业务架构图

在TOGAF的世界里面,所有的架构思想都可以通过下面三种类型的图形进行表示。目录(Catalogs)矩阵(Matrix)图(Diagram)其架构图的本质就是用来进行沟通交流,通过架构图和业务团队进行沟通交流... 查看详情

架构框架和设计模式

软件架构是系统的一个草图,阐述了各个组件之间的通信,层次划分,一旦系统开始详细设计,架构蓝图就很难甚至无法改变。例如:三层架构:一种设计软件架构的思想。通常意义上的三层架构就是将整个业务应用划分为表示... 查看详情

软件架构中的soa架构有哪些特点?

...性与规模的不断增长,以及业务的多变性因素,使得敏捷软件开发变得尤其重要,在尽可能满足客户需求的同时,维持良好的软件质量与系统可用性。将整体应用拆分开来,从而确保以业务为中心的服务设计理念更加符合敏捷交... 查看详情

软件架构中的soa架构有哪些特点?

...性与规模的不断增长,以及业务的多变性因素,使得敏捷软件开发变得尤其重要,在尽可能满足客户需求的同时,维持良好的软件质量与系统可用性。将整体应用拆分开来,从而确保以业务为中心的服务设计理念更加符合敏捷交... 查看详情

架构框架设计模式的定义和区别

一、架构  架构即软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件体系结构是构建计算机软件实践的基础,简单来说,软件架构是一个系统的草图,是一种设计方案,将客户的... 查看详情