认识什么是架构

news2024/9/24 21:14:24

目录

​编辑 

一、架构是什么

 1.1 系统与子系统

 1.1.1 系统

1.1.1.1 关联

 1.1.1.2 规则

 1.1.1.3 能力

1.1.2 子系统

 1.2 模块与组件

 1.2.1 模块

 1.2.2 组件

 1.3 框架与架构

 1.3.1 框架

 1.3.2 架构

 1.3.2.1 架构定义

 1.3.2.2 架构组成

 1.3.2.2.1 要素

 1.3.2.2.2 结构

1.3.2.2.3 连接

 1.3.2.3 总结

 1.3.2.4 我对架构的理解

 1.3.2.4.1 系统性思考的合理决策

 1.3.2.4.2 结构

1.3.2.4.3 连接

1.3.2.4.4 规范

 二、架构设计的目的

 2.1 无架构设计带来的问题

 2.1.1 应用服务的边界不是很清晰

 2.1.2 应用服务层次不清晰,系统耦合严重

 2.1.3 系统应用服务跟踪问题

 2.1.4 系统服务监控问题

2.1.5 技术体系失控问题

 2.2 架构设计的作用

 2.2.1 系统性思考的合理决策

 2.2.2 明确的系统骨架

 2.2.3 系统协作关系

 2.2.4 约束规范和指导原则

 2.3 架构设计的目的

 2.3.1 管理复杂性

 2.3.2 提高效率

 2.4 架构设计的前提条件

 2.4.1 需求相对复杂

 2.4.2 非功能性需求在整个系统占据重要位置

 2.4.3 系统生命周期长,有扩展性需求

 2.4.4 系统基于组件或者集成的需要

 2.4.5 业务流程再造的需要


一、架构是什么

在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。在不同的书籍上, 不同的作者, 对于架构的定义也不统一, 角度不同, 定义不同。此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义, 因为概念是人认识这个世界的基础和用来沟通的手段,如果对架构概念理解不一样,那沟通起来自然不顺畅。

Linux 有架构,MySQL 有架构,JVM 也有架构,使用 Java 开发、MySQL 存储、跑在 Linux 上的业务系统也有架构,应该关注哪一个?想要清楚以上问题需要梳理几个有关系又相似的概念:系统与子系统、模块与组建、框架与架构。

 1.1 系统与子系统

 1.1.1 系统

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

关键词:关联、规则、能力

1.1.1.1 关联

系统是由一群有关联的个体组成的,没有关联的个体堆在一起不能成为一个系统。例如,把一个发动机和一台 PC 放在一起不能称之为一个系统,把发动机、底盘、轮胎、车架组合起来才能成为一台汽车。

 1.1.1.2 规则

系统内的个体需要按照指定的规则运作,而不是单个个体各自为政。规则规定了系统内个体分工和协作的方式。例如,汽车发动机负责产生动力,然后通过变速器和传动轴, 将动力输出到车轮上,从而驱动汽车前进。

 1.1.1.3 能力

系统能力与个体能力有本质的差别,系统能力不是是个体能力之和,而是产生了新的能力。例如,汽车能够载重前进,而发动机、变速器、传动轴、车轮本身都不具备这样的能力。

1.1.2 子系统

也是由一群关联的个体组成的系统,多半是在更大的系统中的一部分。

 1.2 模块与组件

都是系统的组成部分,从不同角度拆分系统而已。模块是逻辑单元,组件是物理单元。

 1.2.1 模块

模块就是从逻辑上将系统分解, 即分而治之, 将复杂问题简单化。模块的粒度可大可小, 可以是系统,几个子系统、某个服务,函数, 类,方法、 功能块等等。划分模块的主要目的是职责分离。

 1.2.2 组件

组件可以包括应用服务、数据库、网络、物理机、还可以包括 MQ、容器、Nginx 等技术组件。划分组件的主要目的的是单元复用。"组件"的英文单词 Component,对应中文的"零件"一词,"零件"更容易理解一些。"零件"是一个物理的概念, 并且具备"独立且可替换"的特点。

 1.3 框架与架构

 1.3.1 框架

框架通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范, 也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

框架是组件实现的规范,例如:MVC、MVP、MVVM 等,是提供基础功能的产品,例如开源框架:Ruby on Rails、Spring、Laravel、Django 等,这是可以拿来直接使用或者在此基础上二次开发。再例如,SpringMVC 是 MVC 的开发框架,除了满足 MVC 的规范,Spring 提供了很多基础功能来帮助我们实现功能,包括注解(@Controller 等)、Spring Security、SpringJPA 等很多基础功能。

 1.3.2 架构

 1.3.2.1 架构定义

在 TOGAF9 是这么定义:一个系统基本的构件(子系统, 模块, 组件),体现在它的各个构件、构件间的相互关系、构件与环境间的关系,以及对系统设计和演进进行治理的原则中。两种含义:

* 一个系统的形式化描述,或指导系统实现的构件级的详细计划;
* 一组构件的结构、构件间的相互关系、以及对这些构件的设计和随时间演进的过程进行治理的一些原则和指导策略。

架构从字面意思上,是源于古代的建筑术语。把架构拆分成两个字“架”和“构”。“架”就是“加”和“木”的结合,把木头加起来、连接起来就是架。“构”就是结构的意思。所以,“架构”就是把“木“按照一定的结构连接起来。

 1.3.2.2 架构组成

 1.3.2.2.1 要素

对应到软件架构,“木”代表构件(要素),“结构”代表架构的产物:

木就是系统中的要素,我们将他们称之为架构构件(要素)。架构要素可以是**子系统、模块、应用服务、组件**。

 1.3.2.2.2 结构

**结构**,是架构的产物。不同的软件系统会有不同的结构,这些结构是为解决不同场景而设计的。

1.3.2.2.3 连接

**连接**,通过定义架构元素之间的接口和交互关系、集成机制,实现架构元素之间的连接。连接可以是分布式调用、进程间调用、组件之间的交互关系等。

 1.3.2.3 总结

总结一下架构的组成 = 要素 + 结构 + 连接,将系统要素按照特定结构进行连接交互。

 1.3.2.4 我对架构的理解

我在这重新定义架构(见仁见智,自己独立思考):软件架构指软件系统顶层结构设计。架构是经过系统性地思考,权衡利弊之后在现有资源约束下的最合理决策,最终明确的系统骨架:包括子系统,模块, 组件。 以及他们之间协作关系,约束规范, 指导原则. 并由它来指导系统各方面的设计和指导团队中的每个人思想层面上的一致。

 1.3.2.4.1 系统性思考的合理决策

比如技术选型、解决实施方案(包括执行目标计划)、成本评估、性价比评估等等。

 1.3.2.4.2 结构

明确的系统骨架(结构):明确系统有哪些构件组成。

1.3.2.4.3 连接

系统协作关系:各个组成部分如何协作来实现业务请求。

1.3.2.4.4 规范

约束规范和指导原则:保证系统有序,高效、稳定运行,包括规范、原则、流程等内容。

 二、架构设计的目的

 2.1 无架构设计带来的问题

如果没有架构设计,说明你的系统不够复杂。随着业务的增长,系统由单体应用渐进演化为分布式和微服务化。系统整体的复杂性越来越高,技术团队可能从一个团队变成多个专业化团队。假如没有架构设计,系统定会是一个无序失控的状态。

 2.1.1 应用服务的边界不是很清晰

到底该怎么拆分没有一个明确的原则,研发人员为了所谓微服务化而拆分,而不是从当前业务考虑。导致系统无序的状态,开发效率低。

 2.1.2 应用服务层次不清晰,系统耦合严重

导致服务依赖出现网状依赖结构,牵一发动全身,后续修改和扩展困难。

 2.1.3 系统应用服务跟踪问题

由于微服务化后,系统逻辑复杂,服务出现问题后,你很难快速的定位问题和修复。比如之前我们踩过不少坑,我们使用 dubbo 服务化,系统一旦出现问题,一推人手忙脚乱。

 2.1.4 系统服务监控问题

由于研发人员基本没有服务监控意识,都是出现问题后再想办法如何添加服务监控接口。

2.1.5 技术体系失控问题

不同的开发团队使用不同的技术栈或者组件,造成公司内部的技术架构失控。甚至研发人员为追求时髦新潮技术,拿应用项目来试验新技术。

 2.2 架构设计的作用

架构设计的目的是为了解决系统复杂性带来的问题,其本质就是对系统进行有序化地重构以致符合当前业务的发展,并可以快速扩展。

 2.2.1 系统性思考的合理决策

 2.2.2 明确的系统骨架

 2.2.3 系统协作关系

 2.2.4 约束规范和指导原则

 2.3 架构设计的目的

架构的本质是管理和解决系统的复杂性,提高效率。

 2.3.1 管理复杂性

对系统进行有序化重构,不断减少系统的“熵”,使系统不断进化,改善软件质量为目的的内在结构性变化

 2.3.2 提高效率

对系统进行有序化重构,以符合当前业务的发展,并可以快速扩展。

 2.4 架构设计的前提条件

无论是何种变化,架构师通过理解业务,全局把控,权衡业务需求和技术实现,选择合适技术,解决关键问题、指导研发落地实施,促进业务发展,提高效率。那什么样的系统要考虑做架构设计? 技术不会平白无故的出和自驱动发展起来,而架构的发展和需求是基于业务的驱动。

 2.4.1 需求相对复杂

 2.4.2 非功能性需求在整个系统占据重要位置

 2.4.3 系统生命周期长,有扩展性需求

 2.4.4 系统基于组件或者集成的需要

 2.4.5 业务流程再造的需要

如果觉得对您有帮助,欢迎点赞+收藏+关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/806028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YAML+PyYAML笔记 7 | PyYAML源码之yaml.compose_all(),yaml.load(),yaml.load_all()

7 | PyYAML源码之yaml.compose_all,yaml.load,yaml.load_all 1 yaml.compose_all()2 yaml.load()3 yaml.load_all() 1 yaml.compose_all() 源码: 作用:分析流中的所有YAML文档,并产生相应的表示树。解析: # -*- codi…

IDEA配置远程docker解释器及无编码提示/关联不到python依赖问题

文章目录 1. 修改docker默认配置以支持远程连接2. 配置docker远程解释器3 .IDE配置project SDK4. 本地代码与Linux目录映射5.运行配置 1. 修改docker默认配置以支持远程连接 vim /lib/systemd/system/docker.service,修改docker启动参数 #ExecStart/usr/bin/dockerd -H fd://…

后台管理系统中重定向业务功能的实现

实现 退出登录组件中获取到当前路由路径并且传递query参数给登录页面 // 组件内 const logout()>{// 获取当前路由路径const redirectroute.fullPathuseStore.logout(redirect) }// pinia/store仓库 async logout(redirect:string){... // 清空仓库业务router.push({name:…

机器人状态估计:robot_localization 功能包基本参数详解

机器人状态估计:robot_localization 功能包基本参数详解 前言功能包简介相关参数基本参数 前言 移动机器人的状态估计需要用到很多传感器,因为对单一的传感器来讲,都存在各自的优缺点,所以需要一种多传感器融合技术,将…

【业务功能篇56】SpringBoot 日志SLF4J Logback

3.5.1 日志框架分类与选择 3.5.1.1 日志框架的分类 日志门面 (日志抽象)日志实现JCL(Jakarta Commons Logging) SLF4J(Simple Logging Facade for Java)Jul(Java Util Logging) , Log4j , Log4j2 , Logback 记录型日志框架 Jul (Java Util Logging):JDK中的日志…

山西电力市场日前价格预测【2023-07-29】

日前价格预测 预测明日(2023-07-29)山西电力市场全天平均日前电价为337.82元/MWh。其中,最高日前电价为355.66元/MWh,预计出现在09: 15。最低日前电价为314.90元/MWh,预计出现在24: 00。 价差方向预测 1:实…

MySQL基础语法(DDL、DQL、DML、DCL)

目录 SQL通用语法以及分类 SQL通用语法 SQL语句的分类 数据库/表/列的命名规则 DDL语句 DDL设计的数据类型 数据库操作 表操作(必须先进入到数据库) DQL语句 DQL的执行顺序 基本查询 SELECT 条件查询 WHERE 分组查询 GROUP BY 排序查询 OR…

formatter的用法,深拷贝, Object.assign 方法实战。

1. :formatter的用法 :formatter 接受一个函数作为参数&#xff0c;这个函数有三个参数&#xff1a;row&#xff0c;column 和 cellValue。row 是当前行的数据&#xff0c;column 是当前列的数据&#xff0c;cellValue 是当前单元格的值。 <el-table-column prop"SYS…

Spring Boot——Spring Boot启动原理

系列文章目录 Spring Boot启动原理 系列文章目录一、Spring Boot启动的宏观流程图二、Spring Boot启动流程2.1 初始化new SpringApplication2.1.1Spring Boot入口2.1.2初始化SpringApplication2.1.2.1判断当前应用程序类型2.1.2.2设置应用程序的所有初始化器(initializers)2.1.…

内置 NMOS 单路 PWM 控制的高调光比 LED 降压恒流控制器

概述 OC5401M 是一款内置调光 NMOS 的单路 PWM 控制的高调光比降压恒流驱动控制器&#xff0c;PWM 调光比最高可达 10000&#xff1a;1。 OC5401M 支持 16-60V 输入电压范围。 OC5401M 采用电流滞环控制方式&#xff0c;无需环路补偿。 OC5401M 可通过外接电阻设置 LED输出电流…

Python(四十九)获取列表指定元素的索引

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

Improving Cross-Modal Retrieval with Set of Diverse Embeddings

框架图&#xff1a; Using Triplet Loss: Smooth-Chamfer similarity Using Log-Sum-Exp,

matplotlib从起点出发(5)_Tutorial_5_styleSheets

1 使用样式表和rcParams自定义matplotlib 以下是自定义matplotlib的属性和默认样式的提示。 有三种方式来自定义matplotlib: 在运行时设置rcParams&#xff1b;使用样式表&#xff1b;改写matplotlibrc文件。 在运行时设置rcParams优先于样式表&#xff0c;样式表优先于matp…

[JavaWeb]SQL介绍-DDL语句

SQL介绍-DDL语句 一.SQL简介1.简介2.SQL通用语法3.SQL语言的分类 二.DDL-操作数据库与表1.DDL操作数据库2.DDL操作表①.查询表(Retrieve)②.创建表(Create)③.修改表(Update)④.删除表(Delete) 一.SQL简介 1.简介 SQL: Structured Query Language–结构化查询语言用来操作关系…

如图,△ABC中,AD是角平分线,E、F分别为AC、AB上的点,且∠AED+∠AFD=180°.试问:DE与DF有何关系,并说明理由.

Question&#xff1a; 如图&#xff0c;△ABC中&#xff0c;AD是角平分线&#xff0c;E、F分别为AC、AB上的点&#xff0c;且∠AED∠AFD180&#xff0e;试问&#xff1a;DE与DF有何关系&#xff0c;并说明理由&#xff0e; Answer&#xff1a; 分析&#xff1a;过D作DM⊥AB于…

postgresql搭建主备

文章目录 1. 要求2. 主库设置3. 主库创建复制槽、复制用户4. 导出主库5. 备库设置6. 备库创建standby.signal7. 启动备库8. 备库创建复制槽、查询数据9. 查看日志10. 测试切换11. 同步测试12. 监控主备状态 1. 要求 1.使用流复制&#xff0c;配置复制槽 2.只有一个备库时不配置…

技术分享 | 接口自动化测试中,文件上传该如何测试?

在服务端自动化测试过程中&#xff0c;文件上传类型的接口对应的请求头中的 content-type 为 multipart/form-data; boundary…&#xff0c;碰到这种类型的接口&#xff0c;使用 Java 的 REST Assured 或者 Python 的 Requests 均可解决。 实战练习 Python 版本 在 Python 版…

Mysql原理篇--第三章 事务与锁

文章目录 前言一、mysql 的事务1 .1 mysql 事务:1 .2 mysql 为什么要支持事务: 二、mysql的事务实现&#xff1a;2.1 mysql的事务隔离级别&#xff1a;2.2 mysql 脏读&#xff0c;不可重复读&#xff0c;幻读&#xff1a;2.2.1 脏读&#xff1a;2.2.2 不可重复读&#xff1a;2.…

生态共建 | 5-6月,YashanDB与14款产品完成兼容互认证

5-6月&#xff0c;深圳计算科学研究院崖山数据库系统YashanDB与中科可控信息产业有限公司、云基智慧工程股份有限公司、上海天玑数据技术有限公司、金蝶软件&#xff08;中国&#xff09;有限公司、上海布雷德科技有限公司、深圳市杉岩数据技术有限公司、广东中兴新支点技术有限…

prometheus和cAdvisor组合

文章目录 docker内部署PromethuesPrometheuscAdvisorPrometheus和cAdvisor关系配置 docker内部署Promethues Prometheus Prometheus是一个开源的系统监控和报警工具&#xff0c;由SoundCloud开发并在2012年捐赠给了Cloud Native Computing Foundation (CNCF)。它被广泛用于监…