当前位置: 首页 > news >正文

深入探索系统架构设计

目录

前言

软件的体系结构

软件架构定义

软件架构设计与生命周期

1、需求分析阶段

2、设计阶段

3、实现阶段

4、构件组装阶段

5、部署阶段

6、后开发阶段

软件架构的重要性

1、架构设计能够满足系统的品质

2、架构设计使受益人达成一致的目标

3、架构设计能够支持计划编制过程

4、架构设计对系统开发的指导性

5、架构设计能够有效地管理复杂性

6、架构设计为复用奠定了基础

7、架构设计能够降低维护费用

8、架构设计能够支持冲突分析

最后


前言

快速变化的技术环境中,设计出既能满足当前需求又能适应未来发展的系统架构变得日益重要。随着企业对灵活性、可伸缩性和成本效率的需求不断增加,传统的单体应用已难以满足这些要求。

因此,现代系统架构师面临着前所未有的挑战:如何在保证性能的同时,还能确保系统的可维护性和可扩展性?

软件的体系结构

从第一个程序被划分成模块开始,软件系统就有了体系结构。现在,有效的软件体系结构及其明确的描述和设计,已经成为软件工程领域中重要的主题。

由于历史原因,研究者和工程人员对 Software Architecture (简称S A ) 的翻译不尽相同,本文中软件“体系结构”和“架构”具有相同的含义。

软件架构定义

一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件的外部可见属性以及它们之间的相互关系。体系结构并非可运行软件。

确切地说,它是一种表达,使软件工程师能够:

1、分析设计在满足所规定的需求方面的有效性;

2、在设计变更相对容易的阶段,考虑体系结构可能的选择方案;

3、降低与软件构造相关联的风险。

上面的定义强调在任意体系结构的表述中“软件构件”的角色。在体系结构设计的环境中,软件构件简单到可以是程序模块或者面向对象的类,也可以扩充到包含数据库和能够完成客户与服务器网络配置的“中间件”(也可以是作为包含数据库和能够完成客户与服务器网络配置的“中间件”的扩充)。

软件体系结构的设计通常考虑到设计金字塔中的两个层次——数据设计和体系结构设计。数据设计体现传统系统中体系结构的数据构件和面向对象系统中类的定义(封装了属性和操作),体系结构设计则主要关注软件构件的结构、属性和交互作用。

建立体系结构层“内聚的、良好设计的表示”所需的方法,其日标是提供一种导出体系结构设计的系统化方法,而体系结构设计是构建软件的初始蓝图。

软件架构设计与生命周期

1、需求分析阶段

需求分析阶段的 S A研究还处于起步阶段。在本质上,需求分析和 S A 设计面临的是不同的对象:一个是问题空间;另一个是解空间。保持二者的可追踪性和可转换性,一直是软件工程领域追求的目标。

2、设计阶段

设计阶段是 S A研究关注的最早和最多的阶段,这一阶段的S A 研究主要包括: S A 模型的描述、 S A 模型的设计与分析方法,以及对 S A 设计经验的总结与复用等。

3、实现阶段

实现阶段最初的 S A研究往往只关注较高层次的系统设计、描述和验证。为了有效实现从S A设计向实现的转换,实现阶段的体系结构研究表现在以下几个方面。

(1)研究基于 S A 的开发过程支持,如项目组织结构、配置管理等。

(2)寻求从 S A 向实现过渡的途径,如将程序设计语言元素引入 S A阶段、模型映射、构件组装、复用中间件平台等。

(3)研究基于 S A 的测试技术。S A提供了待生成系统的蓝图,根据该蓝图较好地实现系统需要的开发组织结构和过程管理技术。

以体系结构为中心的软件项目管理方法,开发团队的组织结构应该和体系结构模型有一定的对应关系,从而提高软件开发的效率和质量。对于大型软件系统而言,由于参与实现的人员较多,所以需要提供适当的配置管理手段。

S A 引入能够有效扩充现有配置管理的能力,通过在 S A 描述中引入版本、可选择项 (Options)等信息,可以分析和记录不同版本构件和连接子之间的演化,从而可用来组织配置管理的相关活动。典型的例子包括支持给构件指定多种实现的 UniCon、 支持给构件和连接子定义版本信息和可选信息的xA D L等。为了填补高层 S A模型和底层实现之间的鸿沟,可通过封装底层的实现细节、模型转换、精化等手段缩小概念之间的差距。

典型的方法如下。

( 1 ) 在 S A 模型中引入实现阶段的概念,如引入程序设计语言元素等。

(2)通过模型转换技术,将高层的S A模型逐步精化成能够支持实现的模型。

(3)封装底层的实现细节,使之成为较大粒度构件,在 S A 指导下通过构件组装的方式实现系统,这往往需要底层中间件平台的支持

4、构件组装阶段

在S A设计模型的指导下,可复用构件的组装可以在较高层次上实现系统,并能够提高系统实现的效率。在构件组装的过程中, S A 设计模型起到了系统蓝图的作用。研究内容包括如下两个方面。

5、部署阶段

随着网络与分布式软件的发展,软件部署逐渐从软件开发过程中独立出来,成为软件生命周期中一个独立的阶段。

为了使分布式软件满足一定的质量属性要求,如性能、可靠性等,部署需要考虑多方面的信息,如待部署软件构件的互联性、硬件的拓扑结构、硬件资源占用(如CPU、 内存)等。

S A 对软件部署作用如下。

1、提供高层的体系结构视图来描述部署阶段的软硬件模型。

2、基于 S A 模型可以分析部署方案的质量属性,从而选择合理的部署方案。现阶段,基于 S A 的软件部署研究更多地集中在组织和展示部署阶段的 SA、 评估分析部署方案等方面,部署方案的分析往往停留在定性的层面,并需要部署人员的参与。

6、后开发阶段

后开发阶段是指软件部署安装之后的阶段。这一阶段的 S A 研究主要围绕维护、演化、复用等方面来进行。典型的研究方向包括动态软件体系结构、体系结构恢复与重建等。

软件架构的重要性

软件架构设计是降低成本、改进质量、按时和按需交付产品的关键因素。

1、架构设计能够满足系统的品质

系统的功能性是软件架构设计师通过组成体系架构的多种元素之间的交互作用来支持的。架构设计用于实现系统的品质,如性能、安全性和可维护性等。通过架构设计文档化,可以尽早地评估项目的这些品质。

2、架构设计使受益人达成一致的目标

架构设计的过程使得不同的受益人达成一致的目标,体系架构的设计过程需要确保架构设计被清楚地传达与理解。一个被有效传达的体系架构使得涉众们可以辩论、决议和权衡,反复讨论,最终达成共识。文档化体系架构是非常重要的,这是软件架构设计师的主要职责。

3、架构设计能够支持计划编制过程

架构设计将确定组件之间的依赖关系,直接支持项目计划和项目管理的活动,例如,细节划分、日程安排、工作分配、成本分析、风险管理和技能开发等;架构设计师还能协助估算项目成本,例如,体系架构决定使用第三方组件的成本,以及支持开发的所有工具的成本;架构设计师支持技术风险的管理,包括制订每一个风险的优先次序,以及确定一个恰当的风险缓解策略。

4、架构设计对系统开发的指导性

架构设计的主要目标就是确保体系架构能够为设计人员和实现人员所承担的工作提供可靠的框架。很明显,这比简单的传送一个体系架构视图要复杂得多。为了确保最终体系架构的完整性,架构设计师必须明确地定义体系架构,因为它确定了体系架构的重要元素,例如系统的组件,组件之间的接口以及组件之间的通信。架构设计师同时还必须定义恰当的标准和指导方针,它们将会引导设计人员和实现人员的工作。对开发过程活动采取恰当的架构回顾和评估,能够确保体系架构的完整性。这些质量保障 (Quality Assurance,QA) 活动的任务是确定体系架构的标准和指导方针的有效性。

5、架构设计能够有效地管理复杂性

如今的系统越来越复杂,这种复杂性需要我们去管理。体系架构通过构件及构件之间关系,描述了一个抽象的系统,因而提供了高层次的复杂的管理的方法。同样,架构设计过程考虑组件地递归分解。这是处理一个大问题很好的方法,它可以把这个大问题分解成很多小问题,再逐个解决。

6、架构设计为复用奠定了基础

架构设计过程可以同时支持使用和建立复用资源。复用资源可以降低一个系统的成本,并且可以改进系统的质量,这些好处已经被证明。一个体系架构的建立,能够支持大粒度的资源复用。例如,体系架构的重要组件和它们之间的接口和质量,能够支持现货供应的组件,存在的系统和封装的应用程序等的选择,从而可以用来实现这些组件。

7、架构设计能够降低维护费用

架构设计过程可以在很多方面帮助我们降低维护费用。首先最重要的是架构设计过程要确保系统的维护人员是一个主要的涉众,并且他们的需求被作为首要的任务满足。一个被恰当文档化的体系架构不应该仅仅为了减轻系统的可维护性,架构设计师还应该确保结合了恰当的系统维护机制,并且在建立体系架构的时候还要考虑系统的适应性和可扩充性。

8、架构设计能够支持冲突分析

架构设计的一个重要的好处是,它可以允许人们在采取改变之前推断它所产生的影响。一个软件构架确定了主要的组件和它们之间的交互作用,两个组件之间的依赖性以及这些组件对于需求的可追溯性。有了这个信息,例如需求的改变等可以通过组件的影响来分析。同样的,改变一个组件的影响可以在依靠它的其他组件上分析出来。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CCF编程能力等级认证GESP—C++7级—20240907
  • 利用Idea远程调试
  • Python 从入门到实战15(字符串其它操作)
  • Day14笔记-函数简介定义调用参数一
  • 【Java】基于JWT+Token实现完整登入功能(原理+实操图解)
  • 鸿蒙开发5.0【帧率】解析
  • 宠物毛发对人体有什么危害?宠物空气净化器小米、希喂、352对比实测
  • Nginx的配置性能优化
  • Docker方式部署ProxySQL和Keepalived组合实现MGR的高可用访问
  • Java面试篇基础部分-Java反射机制是什么
  • 使用Jenkins扩展钉钉消息通知
  • python操作腾讯企业邮箱读取邮件内容
  • 人工智能(AI)正在以前所未有的速度融入我们生活的方方面面
  • IntelliJ IDEA 中实现 Spring Boot 项目 的自动编译
  • 【PyTorch】使用容器(Containers)进行网络层管理(Module)
  • 【Leetcode】101. 对称二叉树
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Angular2开发踩坑系列-生产环境编译
  • CAP理论的例子讲解
  • css系列之关于字体的事
  • Java 23种设计模式 之单例模式 7种实现方式
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • javascript 哈希表
  • Java教程_软件开发基础
  • k个最大的数及变种小结
  • Python十分钟制作属于你自己的个性logo
  • React 快速上手 - 07 前端路由 react-router
  • Redis中的lru算法实现
  • TypeScript实现数据结构(一)栈,队列,链表
  • 安装python包到指定虚拟环境
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端面试总结(at, md)
  • 容器服务kubernetes弹性伸缩高级用法
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 使用SAX解析XML
  • 探索 JS 中的模块化
  • 以太坊客户端Geth命令参数详解
  • 正则表达式小结
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 通过调用文摘列表API获取文摘
  • ​你们这样子,耽误我的工作进度怎么办?
  • # Kafka_深入探秘者(2):kafka 生产者
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #laravel 通过手动安装依赖PHPExcel#
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (4)Elastix图像配准:3D图像
  • (7)摄像机和云台
  • (C++17) optional的使用
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Ruby)Ubuntu12.04安装Rails环境
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)构建dubbo分布式平台-平台功能导图