系统架构师之——软件架构设计
yuyutoo 2025-05-24 18:04 3 浏览 0 评论
一 架构是什么
架构是什么?
IEEE 1471的定义是“一个系统的组织来实现特定的功能或一组功能组件的集合。术语“系统”包括单个应用程序,传统意义上的系统,子系统,系统系统,产品线,产品系列,整个企业以及其他感兴趣的集合”。
一个系统的诞生是一个软件过程,即将需求转换成实现的过程,是软件的生命周期。而软件生命周期的模型,称之为软件过程模型。如:
- -瀑布模型
- -增量模型
- -演化模型
- -喷泉模型
- -基于架构的开发模型
- -形式化方法模型
- 而,软件过程= 计算过程+架构设计,如下图
对于构件的组织与结构对于架构的描述有架构描述语言(ADL)描述。各种组织开发了不同的ADL,例如UML。常见的ADL元素是连接器,组件和配置。
例如:
架构定义描述组件结构:
架构定义描述行为:
工作、学习中我们经常会碰到“系统架构”“软件架构”这两个词,很多人认为他们是一样的,其实不然!系统=多个组件+子系统。
本文适用人群:
- -经常与信息化系统打交道的同学
- -需要经常写方案的同学
- -项目管理,系统架构
- -做二次开发的程序员等
- -即将成为不想被技术忽悠的企业高管、老板等
- -软考高级系统架构师
- -开发入门小白,编程开发初学者
- 更多资讯请关注公众号:freo-studio
二架构原则与风格
1-架构风格/架构模式是什么?
软件架构风格也称之为软件架构模式(有人认为架构模式与架构风格有区别,其实目的是一致的,一般不分开),是用于组织组件、结构构成的原理,依据结构组织定义了抽象框架。
软件架构模式负责的功能就是:
- 组件与连接器的清单及组合规则
- 针对常见问题提供解决方案,完善分区块与重构
- 描述组件与连接器的接口方式
- 组件要定义要:通用接口、可重构、可替换、低耦合、模块化
- 连接器定义要:通用性、低耦合、健壮性
总而言之,架构风格定义描述了系统,并给定约束和清单列表(component+connector)。
基本上一个软件系统都是基于多种架构风格模式组合而成,而每一种架构风格都是针对不同的系统需求目录而实现的。这些常见的系统架构目录需要包含以下内容:
- 一组组件component需要进行系统函数调用请求
- 一组连接器connector需要支持不同组件之间的通信、调用、同步、异步操作
- ADL描述需要包含如何集成组件以形成系统
- 运行时所有关系组件component的拓扑分布描述图
2-常用架构设计方法有哪些?
通常针对不同的场景区域有不同的架构设计,参考如下:
2-常用架构风格有哪些分类?
- 数据流风格:批处理序列、管道/过滤器
- 调用/返回风格:主程序/子程序、面向对象风格、层次结构
- 独立构件风格:进程通信、事件系统
- 虚拟机风格:解析器、规则系统
- 仓库风格:数据库系统、超文本系统、黑白系统
而根据企业架构分类分有:
- 业务架构
- 应用软件架构
- 信息架构:数据-存储,资源管理
- 信息技术架构:软硬件块组织,涵盖企业全部信息化
经典架构风格
- 管道/过滤器:数据流的方式,如UnixShell程序、传统编译器
特点优点:
-使得构件具有良好的隐蔽性、高内聚、低耦合
-运行设计将IO行为看成多个过滤器行为的合成
-支持软件重用
-系统维护简单
-允许对吞吐量、死锁等属性进行分析
-支持并行执行
缺点缺陷:
-进程形成批处理结构,增量式处理数据
-不适合处理交互应用
-数据传输没有通用标准,导致每一个过滤器解析合成数据导致系统性能下降,且导致过滤器复杂。
- 面向对象风格:数据的表示与行为封装在抽象类型/对象中
特点优点:
-对象隐藏其数据、行为表示,操作方便,互不影响
-设计可以将数据存取问题分割成为交互的代理程序集合
缺点缺陷:
-对象更新导致的连锁问题,多次调用导致更新问题
- 基于事件的隐式调用:广播、订阅、注册中心
特点优点:
-软件重构方便
-系统迭代、更新方便
缺点缺陷:
-放弃了对系统计算的控制,下游调用的不可控、不确定是否对其他构件的影响,需要增加接口发布版本控制来保证
-数据交互问题,全局性资源调用数据交互不便
-过程依赖于被触发事件的上下文
- 分层系统:下层服务层、下层客户层
- 仓库系统及知识库:黑板系统
- C2组件连接器风格:一条绳上多个蚂蚱
- C/S客户机服务器风格
- B/S浏览器服务器风格
- 多层架构风格:三层架构MVC模型
- 富互联网应用风格:RIA/Flex/Silverlight等
- 正交软件架构风格Orthogonal
- 层次消息总线架构Hierarchy Message Bus ,HMB
- 特定领域软件架构DSSA:垂直域、水平域
3-架构设计的整体过程?
主要过程是对系统进行分解成为一个个组件及其交互,以满足非功能、功能性需求。架构设计一般是三部分:硬件架构、软件架构、系统架构,整体过程如下:
大致需要经历以下几个步骤:
Step 1 业务需求及问题的理解及分析
- 关键性的一步,影响到后续的软件质量
- 没有理解关键性问题,不可能提出有效的解决方案
- 项目失败的关键问题所在于此
Step 2 确定设计元素和彼此的关系
- 为系统边界、上下文定义好基线baseline
- 根据需求进行分解组件
Step3 评估架构设计
- 列好系统质量相关属性的要求,确定评估方向,方便评估
- 如果没有做质量属性评估,架构设计工作可能会被推翻重来
Step4 转换实现架构设计
- 架构评估后进行,进行优化、分解、转换成ADL
- 关注于设计解决方案
- 利用运算符、应用设计描述符来标识,如分解、复用、压缩、抽象
- 反复递归评估设计
4-架构设计一般要遵守什么原则?
针对架构设计好坏的标准,我们需要遵守一定的设计原则,这样设计出来的系统架构才能更友好、更优雅,才是好架构。原则一般分两部分:架构原则+设计原则。
架构原则主要是针对宏观的,整体项目的把控原则,为保证项目交付;设计原则是针对软件设计部分的原则,对整体编码程序的把控原则,为保证程序交付。
主要架构原则有:
- 用得久不如用的好:不要想着设计架构使得一个系统能很久很多年,要想着设计一个架构能使得系统更容易适应业务变化而变化;
- 需要风险评估、模型分析:利用可视化设计工具如UML进行需求分析与决策设计、矛盾冲突分析
- 利用模型、视图作为交流协作的工具:理解关键的技术块和区域是最容易出差
- 使用增量、迭代开发模型(方法)
主要设计原则有:
- 关注联系分离,将系统划分为各个组件,避免重叠冲突。高内聚、低耦合,避免组件之间过依赖高
- 功能单一性原则,每一个模块提供特定功能。方便模块之间整合、用户使用
- 透明性原则,组件之间、模块之间应该透明,减少依赖
- 大量设计前需要细化
- 避免功能重复交叉
- 重构时,尽量组合,而不是继承
- 逻辑层组件做好组件的区分
- 做好各个层次之间的通信协议、数据格式
- 系统服务组件应该抽象化
- 做好错误异常处理机制
- 做好日志审计跟踪机制
- 命名规则规范化
三 架构模型
1-架构模型种类
传统分类如下:
- 结构模型
- 框架模型
- 动态模型
- 过程模型
- 功能模型
各有优缺点,集合其优点一哥们Kruchten提出“4+1”视图模型。也就是我们现在常用的架构模型。其模型图如下:
逻辑视图如:
开发视图如:
进程视图如:
物理视图如:
而随着云技术云服务的发展,传统的架构理念已经无法满足我们系统需求。而根据Mark Richards《软件架构模式》最新的架构模型分类为:
- 分层架构
- 微内核架构
- 微服务架构模型
- 事件驱动架构
- 基于空间的架构
图书参考:
https://www.oreilly.com/library/view/software-architecture-patterns/9781491971437/
3-如何根据实际情况选择适合自己的架构模型?
软件架构的模型涉及到影响系统的质量、性能、可维护性和整体性、安全性等,针对侧重点进行取舍。不考虑常见问题和长期后果可能会使您的系统面临风险,通常采用多样式的组合构成整个系统。
参考:
- https://www.tutorialspoint.com/software_architecture_design/key_principles.htm
相关推荐
- Linux内核网络设备驱动
-
1.接收数据包过程概述介绍数据包收包过程,有助于我们了解Linux内核网络设备在数据收包过程中的位置,下面从宏观的角度介绍数据包从被网卡接收到进入socket接收队列的整个过程:加载网卡驱动,初...
- 「技术」一文带你掌握Linux字符设备架构
-
一、Linux设备分类Linux系统为了管理方便,将设备分成三种基本类型:...
- 「技术干货」一文搞懂Linux内核调试方法(二)
-
上篇回顾:一文Linux内核调试方法(一)...
- Pytorch学习Day 5: 神经网络基础(nn.Module)学习课程
-
学习目标理解PyTorch中nn.Module类的作用和核心功能。掌握如何使用nn.Linear构建简单的单层神经网络。学会访问和打印神经网络的参数。通过代码实践加深对PyTorch神...
- 内存问题探微
-
这篇文章是我在公司TechDay上分享的内容的文字实录版,本来不想写这么一篇冗长的文章,因为有不少的同学问是否能写一篇相关的文字版,本来没有的也就有了。说起来这是我第二次在TechDay上做的...
- 阿里架构师的5年经验总结:盘点数据仓库常用的4大数据工具平台
-
数据仓库是解决方案,真正落地的时候,还要依托于工具平台。...
- 软考系统架构师2021_备考说明---软考高级之系统架构师_备考笔记
-
第一轮一个半月.这些是考试内容.这个通过率全国,只有百分之10左右..挺难的....
- 从 Java 程序员到架构师:技术进阶与能力跃迁的完整路径(深度版)
-
#程序员如何进阶为架构师?#从Java程序员到架构师:技术进阶与能力跃迁的完整路径(深度版)...
- 大厂架构师被A1逼疯:我20年经验不如A1五分钟生成的方案
-
程序员末日?AI竟包办八成代码!前端真的凉了?...
- 立志成为架构师的你请收下——架构设计的三种思维
-
软件架构的几个误区1.架构的目标即灵活性灵活性越好的架构越能适应未来变化的需要,但不是架构设计的目标,一味追求容易陷入另外一个坑,造成性能的损失和资源的浪费。2.一套成熟的开源框架就是架构框...
- 系统架构师之——软件开发方法
-
不管你是开发人员,还是互联网行业人员,基本上经常看到各种各样的软件相关的图,如什么架构图什么设计图什么模式图甘特图等。很多时候总是傻傻分不清。对此,我们很有必要对系统开发基础知识有认知。对于一名程序员...
- 系统分析师和系统架构师的区别是什么?
-
软考高级包括系统分析师、信息系统项目管理师、网络规划设计师、系统架构设计师和系统规划与管理师,其中,系统分析师和系统架构师这两个科目是大家很容易搞混淆的,因为都属于软考,所以他们的报考时间、报考条件都...
- 软件开发 “四高”的详细分析——高扩展
-
高并发架构的黄金法则:用“分治异步”玩转每秒10万+请求弹性架构:像搭乐高一样扩展你的系统杰夫·贝索斯曾说:“架构不是设计出来的,而是演化出来的。”高并发系统的核心在于...
- 复习七天通过软考高级系统架构师
-
前言软考复习的方式可以分为两种:报班和自学。首先晒一下成绩,开心的一批,虽然考的不是很好!!每科满分75,需要同时都>=45分才算合格。...
- 软件开发 “四高”的详细分析,即高并发、高性能、高扩展、高可用
-
高并发(HighConcurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有响应时间(ResponseT...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
推荐7个模板代码和其他游戏源码下载的网址
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)