论软件架构风格

204 阅读9分钟

说明:这是我在备考软考高级时写的练习论文,仅供参考。如有不当之处欢迎指正及讨论

题目

软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。

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

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

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

3. 详细说明你所参与分析和设计的软件系统是采用什么软件架构风格的,并分析采用该架构风格设计的原因。

摘要

我所在的公司是一个制造业民营集团的子公司,为了提高生产效益,降低生产成本,需要通过工业互联网技术实现集团的生产数字化升级。2020年10月,公司发起了一个工业互联网云平台项目(以下简称IICP项目)。

软件系统开发中常用的软件架构风格包括:1)管道/过滤器 2)数据抽象和面向对象 3)基于事件的隐式调用 4)分层系统 5)仓库系统及知识库 6)C2风格 7)客户端/服务器风格 8)三层C/S结构风格 9)浏览器/服务器风格。

IICP项目主要采用的是三层C/S结构风格,同时也包含了浏览器/服务器风格的特性。因为项目有以下特点:1)需要处理分部在广域网内的多个工业设备 2)允许操作的人员在智能手机和电脑上进行业务操作 3)对数据的安全性有很高的要求 4)应用功能需要持续的迭代和更新。

项目已于今年8月投产试用,就目前的运行情况来看,总体上达到了公司的预期目标,完成了一部分设备的数据接入和大屏查看。

正文

2020年10月,我所在的公司发起了一个工业互联网云平台项目(以下简称IICP项目)。作为公司的技术骨干,在项目中我担任核心开发工程师,主要负责项目的一部分架构设计及开发工作。

1.项目概述

我所在的公司是一个民营集团的子公司,集团主要从事与电力相关的工业设备的生产制造业务,包括:变压器,断路器,光伏发电设备等。为了提高生产效益,降低生产成本,需要通过工业互联网技术实现集团的生产数字化升级。

IICP项目的主要目标是支持工业设备的数据采集,数据分析与远程控制。工业设备数据通过MQTT协议上传到服务端,前端web大屏通过平台提供的API接口,获取并实时显示设备的最新工况数据,对于部分设备也支持通过web端远程控制其开或关。为了方便操作人员在工业现场做数据比对,也支持手机APP的方式访问数据。IICP项目支持设备告警,当设备发生告警时,会发送短信和邮件给相关人员,便于第一时间处理设备的告警。

2.常用的软件架构风格

软件系统开发中常用的软件架构风格包括:

(1)管道/过滤器

在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。

(2)数据抽象和面向对象

这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。

(3)基于事件的隐式调用

基于事件的隐式调用风格的思想是构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一个模块中的过程的调用。基于事件的隐式调用风格的主要特点是事件的触发者,并不知道哪些构件会被这些事件影响。

(4)分层系统

层次系统组成一个层次结构,每一层为上层服务,并作为下层的客户。

(5)仓库系统及知识库

在仓库风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存储上执行。若构件控制共享数据,则仓库是一传统型数据库。若中央数据结构的当前状态触发进程执行的选择,则仓库是一黑板系统。黑板系统主要由三部分组成:1)知识源。知识源中包含独立的、与应用程序相关的知识,知识源之间不直接进行通信,它们之间的交互只通过黑板来完成;2)黑板数据结构:黑板数据是按照与应用程序相关的层次来组织的解决问题的数据,知识源通过不断地改变黑板数据来解决问题;3)控制:控制完全由黑板的状态驱动,黑板状态的改变决定使用的特定知识。

(6)C2风格

C2体系结构风格可以概括为,通过连接件绑定在一起按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下:

系统中的构件和连接件都有一个顶部和一个底部;构件的顶部应该连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;一个连接件可以和任意数目的其他构件和连接件连接;当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。

(7)客户端/服务器风格

C/S体系结构有三个主要组成部分:数据库服务器、客户端应用程序和网络。

(8)三层C/S结构风格

二层C/S结构是单一服务器且以局域网为中心的,所以难以扩展至大型企业广域网或Internet软、硬件的组合及集成能力有限,客户机的负荷太重,难以管理大量的客户机,系统的性能容易变坏,数据安全性不好。三层C/S体系结构是将应用功能 分成表示层、功能层和数据层三个部分,削弱二层C/S结构的局限性。

(9)浏览器/服务器风格

浏览器/服务器风格就是三层C/S结构的一种实现方式,具体结构为浏览器/Web服务器/数据库服务器。

3.项目实际应用

IICP项目主要采用的是三层C/S结构风格,同时也包含了浏览器/服务器风格的特性。如下图所示,项目的表示层包括了浏览器和手机客户端(同时支持Android系统和iOS系统),功能层主要是应用服务器,我们采用Java技术基于Tomcat来部署应用服务器,数据层则使用了MySQL数据库,ClickHouse数据库和Redis内存存储。

image.png

IICP项目主要有以下特点:

1)需要处理分布在广域网内的多个工业设备,工业设备分部的范围很广:有的在工厂里,比如:注塑机是在注塑的工厂里;有的在野外,比如:光伏发电设备的光伏板,逆变器,汇流箱;有的在城市的各的楼房里,比如:灯光控制设备。因此项目需要具备广域网络数据接入的能力。

2)允许操作的人员在智能手机和电脑上进行业务操作。出于操作的便利性,和24小时值班的要求,手机上的操作是需要发。同时出于对部分复杂业务操作的便捷性要求,电脑上的操作也是需要的。

3)对数据的安全性有很高的要求,工业设备的数据需要得到很好的保存,以便做好业务的支撑及后续的数据分析,因此数据对完整性有要求;工业数据有一部分也是公司的生机机密,因此数据对机密性有要求;为了不中断生产安排,数据对可用性也有要求。

4)应用功能需要持续的迭代和更新,工业生产会随着社会发展不断的产生变化,所以项目必须有较好的扩展性,以便于支持新的功能需求。

基于上述特点,我们采用了三层C/S结构风格,同时项目也包含了浏览器/服务器风格的特性。如果采用二层C/S结构,无法满足上面的第1,第2和第3点的要求。项目已于今年8月投产试用,就目前的运行情况来看,总体上达到了公司的预期目标,完成了一部分设备的数据接入和大屏查看,支持了操作人员使用手机和电脑完成相关业务操作。我相信在我们的持续更新努力下,一定能为工业生产持续的降本增效作出贡献。