2023系统架构师---论软件系统架构风格(范文)

论软件系统架构风格

系统架构风格(System Architecture Style) 是描述某一特定应用领域中系统组织方式的惯用模式架构风格定义了一个词汇表和一组约束,词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的口软件系统架构风格反映了领域中众多软件系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。软件系统架构风格的共有部分可以使得不同系统共享同一个实现代码,系统能够按照常用的、规范化的方式来组织,便于不同设计者很容易地理解系统架构。

请以“软件系统架构风格”论题,依次从以下三个方面进行论述:

1概要叙述你参与分析和开发的软件系统开发项目以及你所担任的主要工作。

2.分析软件系统开发中常用的软件系统架构风格有哪些?详细阐述每种风格的具体含义。

3.详细说明在你所参与的软件系统开发项目中,采用了哪种软件系统架构风格,具体实施效果如何。

理素材准备
批处理序列:

构件为一系列固定顺序的计算单元,构件之间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在其前一步结束后才能开始,数据必须是完整的,以整体的方式传递。管道-过滤器:每个构件都有一组输入和输出,构件读取输入的数据流,经过内部处理,产生输出数据流。前一个构件的输出作为后一个构件的输入,前后数据流关联。过滤器就是构件,连接件就是管道。早期编译器就是采用的这种架构,要一步一步处理的,均可考虑此架构风格。二者区别在于批处理前后构件不一定有关联,并且是作为整体传递,即必须前一个执行完才能执行下一个。管道-过滤器是前一个输出作为后一个输入,前面执行到部分可以开始下一个的执行。

调用/返回风格主程序/子程序。

单线程控制,把问题划分为若千个处理步骤,构件即为主程序和子程序,子程序通常可合成为模块。过程调用作为交互机制,充当连接件的绝色。调用关系具有层次性,其语义逻辑表现为主程序的正确性取决于它调用的子程序的正确性。

面向对象:

构件是对象,对象是抽象数据类型的实例。在抽象数据类型中,数据的表示和它们的相应操作被封装起来,对象的行为体现在其接受和请求的动作。连接件即使对象间交互的方式,对象是通过函数和过程的调用来交互的。

层次结构:

构件组成一个层次结构,连接件通过决定层间如何交互的协议来定义。每层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层。通过层次结构,可以将大的问题分解为若干个渐进的小问题逐步解决,可以隐藏问题的复杂度。修改某一层,最多影响其相邻的两层(通常只能影响上层).

层次结构优点:

1、支持基于可增加抽象层的设计,允许将一个复杂问题分解成一个增量步骤序列的实现。

2、不同的层次处于不同的抽象级别,越靠近底层,抽象级别越高;越靠近顶层,抽象级别越低

3、由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件复用提供了强大的支持。

缺点:

1、并不是每个系统都可以很容易的划分为分层的模式。

2、很难找到一个合适的、正确的层次抽象方法。

独立构件风格

进程通信:构件是独立的进程,连接件是消息传递。构件通常是命名过程,消息传递的方式可以是点对点、异步或同步方式,以及远程过程(方法)调用等

事件驱动系统(隐式调用): 构件不直接调用一个过程,而是触发或广播一个或多个事件。构件中的过程在一个或多个事件中注册,当某个事件被触发时,系统自动调用在这个事件中注册的所有过程。一个事件的触发就导致了另一个模块中的过程调用。这种风格中的构件是匿名的过程,它们之间交互的连接件往往是以过程之间的隐式调用来实现的。

主要优点是为软件复用提供了强大的支持,为构件的维护和演化带来了方便;缺点是构件放弃了对系统计算的控制。

虚拟机风格

解释器:通常包括一个完成解释工作的解释引擎、一个包含将被解释的代码的存储区、一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行的进度的数据结构。具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用,缺点是执行效率低。

基于规则的系统: 包括规则集、规则解释器、规则/数据选择器和工作内存,一般用在人工智能领域和DSS中

仓库风格 (数据共享风格,以数据为中心)

数据库系统:构件主要有两大类,一类是中央共享数据源,保存当前系统的数据状态:另一类是多个独立处理单元,处理单元对数据元素进行操作。

黑板系统:

包括知识源、黑板和控制三部分。知识源包括若干独立计算的不同单元,提供解决问题的知识。知识源响应黑板的变化,也只修改黑板:黑板是一个全局数据库,包含问题域解空间的全部状态,是知识源相互作用的唯一媒介:知识源响应式通过黑板状态的变化来控制的。黑板系统通常应用在对于解决问题没有确定性算法的软件中(信号处理、问题规划和编译器优化等)。

超文本系统:

构件以网状链接方式相互连接,用户可以在构件之间进行按照人类的联想思维方式任意跳转到相关构件。是一种非线性的网状信息组织方法,它以节点为基本单位,链作为节点之间的联想式关联。通常应用在互联网领域。

现代编译器的集成开发环境一般采用数据仓储(即以数据为中心的架构风格)架构风格进行开发,其中心数据就是程序的语法树。

合格范文赏析

摘要:本人于 2016年1月参与浙江省某市公交集团“公交车联网一体化“项目,该系统为新能源营运车辆补贴监管、安全监控等方面提供全方位的软件支撑,在该项目组中我担任系统架构师岗位,主要负责整体架构设计与中间件选型

本文以该车联网项目为例,主要讨论了软件架构风格在该项目中的具体应用。底层架构风格我们采用了虚拟机风格中的解释器,因该公交共有几十种不同的数据协议,使用解释器风格可以满足整车数据协议

兼容性需求;中间层关于应用层的数据流转我们采用了独立构件风格中的隐式调用,这种风格主要用于减低系统间耦合度、简化软件架构,提高可修改性方面的架构属性;应用系统层我们采用了 B/S 的架构风格,统一解决公交行业性难题“实施推广难、维护难”问题。最终项目成功上线,获得用户一致好评。随着国家十三五计划中-能源战略的深入和推广,该市公交集团自 2016 年 1月起全面停止采购燃油机公交车,规划到 2020 年纯电公交车采购占比必须在 70%以上,同时配套将车联网方面的系统建设被列为T作重点。不管从新能源营运车辆补贴监管、安全监控或者公交公司自身的营运和机护需求,都要求有新的车联网系统对他们进行全方位的支持,而我司是该公交的主要仪表与 can模块产品的主要供应商,全市 4000多台车中有 3000多辆是我司的产品,我司不仅掌握熟悉该公交整车数据而且在车联网底层 can 数据有非常明显的领域知识优势,因此 2016年1月我司被该市公交集团委托建设公交集团车联网一体化项目。本项目组全体成员共有 27 人(不含业主方),我在项目中为担任系统架构师职务,架构小组共 4 人,我主要职责负责整体架构设计与中间件选型,4 月份完成架构工作,整个项目共耗时了7个月,2016 年8月顺利通过验收。

在架构工作开始阶段,我们便意识到,架构风格是一组设计原则,是能够提供抽象框架模式,可以为我们的项目提供通用解决方案的,这种能够极大提高软件设计的重用的方法加快我们的建设进程,因此在我司总工程师的建议下,我们使用了虚拟机风格、独立构件风格以及 B/S 架构风格这三种较常用风格。虚拟机风格中的解释器架构风格能够提供灵活的解析引擎,这类风格非常适用于复杂流程的处理。独立构件风格包括进程通讯风格与隐式调用风格,我们为了简化架构复杂度采用了隐式调用风格,通过消息订阅和发布控制系统间信息交互,不仅能减低系统耦合度,而且还提高架构的可修改性。B/S 架构风格是基于浏览器和服务器的软件架构,它主要使用 http 协议进行通信和交互,简化客户端的工作,最终减低了系统推广和维护的难度,以下正文将重点描述架构风格的实施过程和效果。

底层架构我们使用解释器风格来满足整车数据协议兼容性需求。解释器风格是虚拟机风格中的一种,具备良好的灵活性,在本项目中我们的架构设计需要兼容好 86 种不同 can 数据协议,一般来说这种软件编写难度非常高,代码维护难度压力也很大,因此这个解释器的设计任务便很明确了,软件设计需要高度抽象、协议的适配由配置文件来承担。具体的做法如下,我们对各个车厂的 can 数据结构进行了高度抽象由于 can 数据由很多数据帧组成,每个数据帧容量固定并且标识和数据有明确规定,因此我们将 can 协议中的ID和数据进行关系建模,将整体协议标识做为一个根节点,以canid作为根节点下的叶子节点,使用XML 的数据结构映射成了有整车协议链-数据-数据字节-数据位这 4 层的数据结构,核心的代码采用jdom.jar与java 的反射机制动态生成 java 对象,搭建一套可以基于可变模板的解释器,协议模板的产生可以由公交公司提供的 excel 协议文档进行转换得到,解释器支持协议模板热部署,这种可以将透传二进制数据直接映射成 java 的可序列化对象,将数据协议的复杂度简化,后期数据协议更改不会对软件产生影响,仅仅更改协议模板文件即可,最终我们使用了 86 个协议描述文件便兼容了这些复杂的 can 数据协议规避了 can 数据巨大差异带来的技术风险。

中间层我们使用独立构件风格中的隐式调用来简化构件间的交互复杂度,降低系统合度。主要的实现手段是,我们采用了一个开源的消息中间件作为连接构件,这个构件是 apache 基金会下的核心开源项目activemg,它是一款消息服务器,其性能和稳定性久经考验。由上文提到的解释器解析出对象化数据经过activemg 分发到各个订阅此消息的应用系统,这些应用系统包括运营指挥调度、自动化机护、新能源电池安全监控等,这种多 web 应用的情况非常适合采用消息发布与消息订阅的机制,能够有效解决耦合问题,我们在编码的过程中发现只要采用这种风格的 web 应用,整个选代过程效率极高,错误率降低,而且我们使用的 spring 框架,消息队列的管理完全基于配置,清晰简单,维护性良好,例如整车安全主题、运营调度主题、机护维修主题等消息队列分类清晰,可以随时修改其结构也能够随时增其他主题的消息队列,不同的 web 系统监听的队列也可以随时变换组合,基于消息中间件的架构设计能够让系统的构件化思路得到良好实施,总体来说这种架构风格带来了非常清晰的数据流转架构,简化了编码难度,减低本项目的二次开发的难度。

应用系统层我们主要采用 B/S 的架构风格,主要用于解决公交推广难、维护难得问题。公交行业有一个明显的特点,公交子公司分布在全市各个地区,路途很远,且都是内网通讯,车联网络也是走的 APN 专网,一般是无法远程支持的,这给我们的系统推广以及后期维护带来了很大难题,我们可以想象如果使用C/S 架构,更新客户端一旦遇到问题很可能需要全市各个站点跑一遍。这让我们在系统推广和维护方面面临较大压力。我们采用的 B/S 架构风格能够解决这个难题,并充分考量可现在的相关技术成熟度,例如现在的 htm15 完全能够实现以前客户端的功能,项目中我们使用了大量的前端缓存技术与 websocket 技术能够满足公交用户实时性交互等需求。这种风格中页面和逻辑处理存储在 web 服务器上,维护和软件升级只要更新服务器端即可,及时生效,用户体验较好,例如界面上需要优化,改一下 Javascript 脚本或者CSST支文件就可以马上看到效果了。

项目于 2016年8月完成验收,这1年内共经历了2次大批量新购公交车辆接入,这几次接入过程平稳顺利,其中协议解释器软件性能没有出现过问题,消息中间件的性能经过多次调优吞吐量也接近了硬盘 I0极限,满足当前的消息交互总量,另外由于我们的项目多次紧急状态下能够快速适应 can 协议变动,得到过业主的邮件表扬。除了业主机房几次突发性的网络故障外,项目至今还未有重大的生产事故,项目组现在留1个开发人员和 1个售后在维护,系统的维护量是可控的,系统运行也比较稳定。

不足之处有两个方面,第一在架构设计的过程中我们忽略 PC 配置,个别 PC 因为需要兼容老的应用软件不允许系统升级,这些电脑系统老旧,其浏览器不支持 htm15,导致了系统推广障碍。第二在系统容灾方面还有待改善。针对第一种问题,我们通过技术研讨会说服可业主新购 PC,采用两台机器同时使用方式解决。针对第二种问题我方采用了服务器冗余和心跳监测等策略,在一台服务暂停的情况下,另外一台服务接管,以增加可用性。

你可能感兴趣的:(系统架构)