什么是架构?——软件系统架构的定义
IEEE对于软件系统架构的定义:
Architecture is the fundamental organization of a system embodied in its components, their relationships to each other, and to the environment, and the principles guiding its design and evolution. [IEEE 1471]
organization 是组织的意思,这里理解为组织结构。
直译:架构是一个系统在其组件层面的基本组织结构表现,包括系统内部组件之间的关系、组件与外部的关系以及决定其设计和演进的原则。
《系统架构-复杂系统的产品设计与开发》一书中用最简单的话来描述架构:
“对系统中的实体及实体之间的关系所进行的抽象描述。”
(第九页,出自Edward Crawley等人专著论文《The Influence of Architecture in Engeering Systems》)
以上两种表述,第一种措辞严谨精确,可用于书面定义;第二种更直白容易理解,可用于日常表达。
-----------------------------------------------------------------------------
--------------延申-----如何画软件架构图?--------------------------
-----------------------------------------------------------------------------
软件架构图的目的是将设计表达出来,而一套设计包含多个维度,一个图基本上表达不完,那就需要多个图,需要哪些图?
画架构图目前有几种选择:
1、遵循一些标准体系,这些标准要求应该有哪些东西,我们就画哪些东西,这里列两个标准:
TOGAF: 企业架构领域的一个标准框架,定义了四种图,从不同维度来表现一套架构设计,包括业务架构、技术架构、数据架构、应用架构,以下引用摘自WIKI
开放组体系结构框架(英语:The Open Group Architecture Framework,缩写:TOGAF)是一个企业架构框架,它提供了一种设计,规划,实施和管理企业信息技术架构的方法[2]。TOGAF是一种高层设计方法。 它通常被建模为四个级别:业务,应用程序,数据,和技术。 它在很大程度上依赖于模块化,标准化以及已有的,经过验证的技术和产品。
RUP: 是由Rational Software公司开发的一套搞软件工程方法,其中有一块做软件架构设计的方法使用的是一篇论文中的内容——4+1视图,看了一圈,比较抽象,我也不太理解,就不说了,具体可以自行查询
我个人更倾向于TOGAF的四种图,因为容易理解:
软件架构的定义基本上就是说有哪些组件,他们之间的关系。但是组件这个定义比较泛,在不同的维度组件上表现为不同的东西,TOGAF的四种图就是从四个维度对软件架构定义的套用:
从业务维度上来说,至少要描述清楚有哪些系统,有什么功能,他们之间的关系是怎么样的等等
从技术整体维度上来说,由哪些 中间件/子系统/技术组件 组成,他们之间的关系是怎么样的等等
从单个应用程序维度上来说,里用到了什么开发技术,做了什么分层,它又会把数据存到哪等等
从数据维度上来说,有哪些数据,存在哪,如何存,他们之间如何转化、流转的等等
2、自己画,能说清意思就行
说实在的,我们画图的目的就是表达清楚自己设计的内容,对老板,对产品、对研发、对运维,只要能达到目的也没必要非得纠结这些目前还没达成统一的标准。自己画就行
最后,画图的时候不要想着把所有细节都能弄进去。对于一个庞大的系统,不要妄想几张图就说清所有的事情;也不要画几张图就撒手不管做起ppt架构师了,架构图固然重要(错误的设计会导致项目组很难受,甚至导致项目失败,试错成本相当高),引导团队进行架构的落地过程也相当重要,这是对你架构设计质量以及你个人技术能力的检验。
3、C4模型
C4模型是一种更为容易理解的模型,学习成本低,表达效果好,直接上链接
https://www.infoq.cn/article/C4-architecture-model/
https://www.infoq.com/articles/C4-architecture-model/
相关文章
- 电子电气架构——电子电气架构师设计架构时需要注意什么?
- #电子电气架构——下一代车载网关应该是什么样子呢?
- 电子电气架构车载网关系列——什么是车载网关?
- 开发架构系列1-什么是 Nacos、Zipkin、工单、ZooKeeper、xxl-job、jenkins、 JSP、Servlet、EFK、Grafana、RDP、eclipse、ProM
- 超融合架构和传统架构有什么区别?
- 七张图了解 Kubernetes 内部的架构
- 云原生架构的 5 条原则——它是什么以及如何掌握它
- clickhouse 核心特性及架构介绍
- MySQL第二讲 MySQL主从架构搭建
- “大话架构”阿里架构师分享的Java程序员需要突破的技术要点
- 《大型网站技术架构:核心原理与案例分析》笔记
- Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始
- ARM架构处理器扩展结构-NEON
- Oracle数据库架构中包括几层?每层都有什么元素?
- 企业级互联网架构下CI/CD实践
- 《Microsoft.NET企业级应用架构设计(第2版)》——第1章 今天的架构师和架构 1.1软件架构到底是什么
- 《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》——第3章 数据安全工具DRBD、extundelete 3.1 数据镜像软件DRBD介绍
- 《低功耗蓝牙开发权威指南》——2.7节客户端–服务器架构
- 《计算机系统:系统架构与操作系统的高度集成》——1.1 盒子里有什么
- flutter系列之:flutter架构什么的,看完这篇文章就全懂了
- 云原生架构(二)环境搭建(Mac上安装Istio---Docker+Kubernetes+Istio一条龙)
- 聊聊分布式定时任务中间件架构及其实现--转
- SQL Server架构----SQL Server的执行模式和SQLOS
- 系统架构设计师-无服务器架构及其应用