系统架构设计师论文分享-论软件架构复用

我的软考历程

摘要

2023年2月,我所在的公司通过了研发纱线MES系统的立项,该项目为国内纱线工厂提供SAAS服务,旨在提升纱线工厂的数字化和智能化水平。我在该项目中担任架构设计师,负责该项目的架构设计工作。本文结合我在该项目中的实践,详细论述了软件架构复用的实现过程。软件架构复用可以有效降低成本,提高开发速度和质量属性,架构复用方法的步骤分为三个过程:可复用资产的获取、架构复用的管理、架构复用的使用。通过架构复用,我们有效地利用了之前的架构设计、建模分析、需求文档、详细设计、测试过程、人员等等。有效地保障了项目的进展,保证了项目的开发质量。最终在2023年12月,该项目正式上线对外提供服务,得到了客户工厂和公司领导的一致好评。

项目背景

随着我国从制造业大国升级为制造业强国以及工厂数字化和智能化的持续推进,我所在的某地某科技公司基于自研的物联网平台相继开发了染整一体化和织布一体化等系统,这些系统上线后,得到了工厂的追捧,也为公司带来了丰厚的经济回报。基于此,我司于2023年2月开始研发纱线MES系统,该系统总投资730万,开发周期10个月,涵盖纱线工厂从清花、梳棉、并条、精梳、粗纱、细纱到络筒的全流程工序,将为纱线工厂提供全面的生产管理解决方案以及基于数据的智能决策分析能力。该项目采用物联网层次架构,整体分为感知层、网络层和应用层。其中网络层为公司已有的物联网平台,这次重点建设内容为感知层和应用层,感知层使用Golang语言开发,作为联网网关部署在工厂侧,负责工厂数据的采集和云端指令的下发。应用层为纱线MES系统主体,采用Java语言开发,使用Spring Cloud微服务架构,数据库使用Mysql,缓存使用Redis,前端框架使用vue.js,日志、监控和链路追踪采用skywalking、prometheus、grafana和ELK,最终通过devops的方式部署在kubernetes集群中。系统上线后,将提供以下:基础管理、数据接入、工单排产、数字孪生、工资计算、智控中心和数据分析等等功能,通过以上功能,可以全面提升纱线工厂的数字化和智能化水平,使其运营水平和生产效率得到质的提升。

论述内容

该项目涉及参与者众多,业务逻辑和流程复杂,又由于我司以前有工厂数字化的积淀,所以采用架构复用可以显著提升开发速度和保障项目质量,基于此,我们团队一致决定采用软件架构复用的方式来开发该系统。软件架构复用主要有三个阶段:1、获取可复用的架构资产;2、管理可复用的架构资产;3、使用可复用的架构资产。我们基于这三个过程,有效地利用了之前积累的软件架构资产如:架构设计,架构需求,架构文档,基础组件,测试代码,功能代码、运维组件等等资产。我们通过架构复用的方式,提高了开发速度,降低了风险和项目成本,保障了项目的质量属性。下面就从这三个阶段来介绍我们是如何应用软件架构复用的。

一、获取可复用的架构资产

在开发纱线MES系统之前,我司已经基于物联网技术开发了染整一体化和织布一体化平台,它们分别针对染整工厂和织布工厂,基于此,我司已经积累了大量的可复用的架构资产,比如设计文档,可用的构件,架构的设计、经验丰富的开发人员,测试用例。这里面的大部分内容都是可以再次利用的,有些甚至不需要改造就可以拿来使用。比如,物联网平台就可以直接拿来使用,通过该平台可以为纱线MES系统提供稳定可靠的数据交互能力,又由于它经历过了生产环境检验,它能显著降低开发成本,提高项目的质量。又如公司自有的微服务基础架构:用户权限系统,短信系统,文件系统,这些系统都可以直接为纱线Mes所使用,不需要再次开发,并且这些系统也经过生产环境的检验,可靠性极强。同时纱线MES系统非常依赖物联网技术,公司所沉淀下来的物联网知识就提供了大量的可复用资产:物联网相关文档、MQTT协议文档、边端开发技术手册、设备破解方法、工厂网络配置等等,这些资产能有效地帮助开发人员迅速进入开发状态并解决相应的问题,同时之前那些有经验的开发人员,被我邀请加入到该纱线Mes系统的开发之中,强有力地保障了项目的进展。还有就是测试的复用,公司之前已经建立了一套可靠的测试流程和工具,所以我们在开发纱线MES系统时就可以完全使用原来的流程和工具。最后就是运维的复用,公司已经基于devops和kubernetes技术建立一整套完善的自动化运维流程,这套流程和工具也就完全地被我们采用。

二、管理可复用资产

当获取了可复用的架构资产之后,就需要对架构资产进行管理。对于技术文档类的资产,可以建立有效的文档库,知识库,方便让参与人员随时查询和学习。对于微服务类的组件,比如短信微服务、用户权限微服务,那么就可以建立微服务查询服务,主要借助Nacos的功能,方面公司内部人员检索所有的服务。对于测试和运维类的工具,就需要我们建立构件库,把各种组件和工具都放在统一的构件库中,构件库要使用层级的管理方式,让开发人员能方便查找到自己需要的工具,不止如此,我们还提供了基于关键字、刻面、超文本的三种方式来组织和管理我们的构件。通过该阶段后,我们有效地建立了可复用的资产库,有了这个资产库,以后所有的项目都可以方便地采用架构复用技术来开发自己的系统。

三、使用可复用的资产

在建立了资产库之后,就可以通过采用构件组装的方式来开发我们的系统了。首先,纱线MES系统要使用物联网平台,通过物联网平台,可以提供数据的路由和转发,可靠为边端和云端提供数据交互能力,集成物联网平台的方式也比较简单,物联网平台对外提供非常易用的接口和基于消息队列的方式,云端需要通过接口下发指令,并通过消息队列获取工厂的生产数据。边端采用MQTT协议与物联网平台对接,主要为了保障数据传输在复杂不稳定的网络下的可靠性,其次边端采用了之前公司的Golang脚手架,在原来的基础上做了改造和适配,主要是要适配纱线工厂的设备,对这些设备进行采集和控制。其他如测试和部署的方式都复用原来的,保证了测试和部署的连贯性。在微服务层面,纱线MES系统要使用已有的短信、用户权限、文件等服务,那就需要让已有的服务提供接口到Nacos中,这样纱线Mes系统的微服务就可以发现调用这些服务并使用这些服务的功能。在缓存层面,公司已经有了基于kubernetes管理的Redis服务,那么就可以直接通过kubernetes建立一个为纱线MES系统服务的Redis服务。对于测试人员来说,就可以利用现有的开发环境、测试环境和灰度环境,测试人员可以很容易地进行测试,降低了测试的成本,保证了测试的质量。

总结

通过以上三个过程,我们有效地实施了软件架构复用,降低了项目成本,提高了开发速度和项目质量,保障了项目地顺利进展。最终在2023年12月,该项目正式投产并对外提供服务,至今稳定运行,各项功能和性能指标均远远超过了客户的预期,得到了客户工厂和公司领导的一致赞扬。虽然项目取得了成功,但是也遇到过一些问题,在项目初期,由于产品经理对纱线业务的不熟悉,导致很多功能的调整和返工,这打击了开发人员的士气,基于此,我提出两个解决方式:1、派产品进入工厂一线,与工人交流,熟悉操作流程,彻底摸清纱线业务,保证需求质量;2、开发人员也要学习纱线业务,遇到问题反馈给产品,同时在做设计时,采用灵活的设计模式,为需求的变动留下可操作的空间。我们通过这两个方法解决了这个问题,保证了项目的进展。通过这次实践,我不仅学习到了架构复用的相关技术,也锻炼了自己的架构和管理能力,我意识到只有不断地学习和实践才能让知识融汇于自己的技术体系之中,才能在未来的工作中游刃有余、勇担大任,为祖国的信息化建设贡献自己的力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89864.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟主机与独立服务器如何选择

在搭建和维护网站时,选择合适的服务器套餐至关重要。虚拟主机和独立服务器是两种常见的选择,它们各有优缺点,适用于不同需求的用户。本文将深入探讨这两种服务器类型的特点,以帮助您为您的网站选择最合适的服务器解决方案。虚拟主…

NFC的安全技术体系

NFC(近场通信)技术因广泛应用于移动支付、身份认证、门禁控制等敏感场景,其安全技术体系是保障用户数据与交易安全的核心。该体系涵盖数据传输安全、存储安全、身份认证、防攻击机制等多个维度,通过硬件隔离、加密算法、协议规范等…

Echarts3D柱状图-圆柱体-文字在柱体上垂直显示的实现方法

全部代码 <!DOCTYPE html> <html lang"en" style"height: 100%"> <head><meta charset"utf-8"><title>3D柱状图-圆柱体-文字竖排</title> </head> <body style"height: 100%; margin: 0"…

【算法训练营Day08】字符串part2

文章目录 反转字符串里的单词右旋字符串KMP算法双指针法总结 反转字符串里的单词 题目链接&#xff1a;151. 反转字符串中的单词 双指针法解题逻辑 head指针遍历字符串遍历到单词首单词&#xff0c;生成end指针移动到单词尾部遇到完整单词收集&#xff0c;压入栈中head指针移动…

如何使用backtrace定位Linux程序的崩溃位置

在嵌入式Linux开发中&#xff0c;特别是复杂软件&#xff0c;多人协作开发时&#xff0c;当某人无意间写了一个代码bug导致程序崩溃&#xff0c;但又不知道崩溃的具体位置时&#xff0c;单纯靠走读代码&#xff0c;很难快速的定位问题。 本篇就来介绍一种方法&#xff0c;使用…

十大排序算法汇总

好的&#xff0c;下面为你整理一篇面试全覆盖、极其深入的十大排序算法总结博客&#xff0c;涵盖算法原理、复杂度、稳定性、应用场景、工程实践、C与Python实现&#xff08;含详细注释&#xff09;&#xff0c;并对比分析各种排序的优缺点与适用情境。内容力求结构清晰、讲解透…

零基础 “入坑” Java--- 七、数组(二)

文章目录 一、数组转字符串二、数组的拷贝三、求数组中元素的平均值四、查找数组中指定元素&#xff08;顺序查找&#xff09;五、数组排序&#xff08;冒泡排序&#xff09;六、查找数组中指定元素&#xff08;二分查找&#xff09;七、判断两个数组中的元素是否相等八、填充数…

【C++ 真题】P1104 生日

P1104 生日 题目描述 cjf 君想调查学校 OI 组每个同学的生日&#xff0c;并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多&#xff0c;没有时间&#xff0c;所以请你帮她排序。 输入格式 输入共有 n 1 n 1 n1 行&#xff0c; 第 1 1 1 行为 OI 组总人数 n n n&…

Oracle DB和PostgreSQL,OpenGauss主外键一致性的区别

针对于unique索引在主外键上的表现&#xff0c;o和PG的行为确实不一致&#xff0c;测试样例&#xff1a;PG:测试1&#xff1a;test# CREATE TABLE gdb_editingtemplates ( objectid INTEGER NOT NULL, globalid VARCHAR(38) DEFAULT {00000000-0000-0000-0000-000000000000} …

06.自动化测试概念

自动化测试概念 1. 自动化1.1 回归测试1.2 自动化分类 1.3 自动化测试金字塔2. web自动化测试3.Selenium 1. 自动化 ​ **自动化测试&#xff08;Automated Testing&#xff09;&#xff1a;**是指使用软件工具或脚本来自动执行测试任务&#xff0c;代替人工进行重复性、繁琐的…

页面登录数据的加密(前端+后端)

本加密过程使用的 AESRSA概要1.使用AES对传输数据进行加密AES为对称加密,加密和解决所需要的key是一样的,所以拦截到AES key就可以直接解密,所以需要结果RSA进行加密2.对AES的key进行RSA加密RSA为非对称加密,客户端只能获取到publicKey(公钥),而解密只能使用服务器的privateKey…

PC端基于SpringBoot架构控制无人机(一):初识无人机控制

一、无人机飞控系统的概述飞控&#xff08;Flight Controller&#xff09;是无人机最为核心的组成部分之一&#xff0c;负责实现无人机的自主飞行控制和稳定飞行。飞控系统的功能决定了无人机的飞行性能&#xff0c;包括飞行的稳定性、操控的响应速度、导航的精确度等。通过飞控…

QT6 源(154)模型视图架构里的列表视图 QListView:先学习属性部分,

&#xff08;1&#xff09;属性总图&#xff0c;以及测试程序的框架 &#xff1a; 开始属性的学习 &#xff1a; &#xff08;2&#xff09; 继续属性学习 &#xff1a; &#xff08;3&#xff09; 谢谢

MySQL——9、事务管理

事务管理 1、什么是事务&#xff1f;2、事务常见操作方式3、事务隔离级别4、数据库并发场景4.1、读-写4.2、RR与RC的本质区别 1、什么是事务&#xff1f; mysql是基于CS模式的&#xff0c;是一套网络服务&#xff0c;所以我们是可以在本地连接上远程服务器的mysql服务端的。my…

Python之面向对象详解(一篇足矣)

目录 一、初阶面向对象 1. 初识面向对象 1.1 对象和self 1.2 常见成员 1.3 应用示例 将数据封装到一个对象&#xff0c;便于以后使用。 将数据封装到对象中&#xff0c;在方法中对原始数据进行加工处理。 根据类创建多个对象&#xff0c;在方法中对对象中的数据进行修改…

【Qt】qml组件对象怎么传递给c++

将QML组件对象传递给C的方法 在QML和C之间传递完整的组件对象需要特殊处理&#xff0c;因为QML组件是动态创建的JavaScript对象。以下是几种有效的方法&#xff1a; 1. 使用QObject指针传递 C端设置 // MyClass.h #include <QObject> #include <QQuickItem>cla…

Java基础 集合框架 List框架

list架构 list接口list 核心特性以及扩展Collection的体现 抽象类 AbstractList抽象类 AbstractSequentialList (简化链表的顺序访问)AbstractSequentialList 核心特点自定义实现示例代码讲解其实现原理AbstractSequentialList 总结与AbstractList的对比 List 实现类 ArrayList…

2025年6月28和29日复习和预习(C++)

学习笔记大纲​一、预习部分&#xff1a;数组基础​&#xff08;一&#xff09;核心知识点​数组的创建&#xff1a;掌握一维数组的声明方式&#xff0c;如int arr[5];&#xff08;创建一个包含 5 个整数的数组&#xff09;。重点在于理解数组长度需为常量&#xff0c;且在声明…

【centos8服务如何给服务器开发3306端口】

在 CentOS 8 中开放 MySQL 默认端口 3306&#xff0c;需要配置防火墙和 SELinux。以下是详细步骤&#xff1a; 1. 开放防火墙端口&#xff08;Firewalld&#xff09; CentOS 8 默认使用 firewalld 管理防火墙&#xff0c;执行以下命令开放 3306 端口&#xff1a; # 开放 TCP 33…

python系列之:使用md5和sha256完成签名认证,调用接口

python系列之:使用md5和sha256完成签名认证,调用接口 MD5签名和sha256签名认证md5认证代码sha256认证代码拼接签名生成签名拼接url调用接口MD5签名和sha256签名认证 MD5签名认证 算法特性: 生成128位(16字节)的哈希值计算速度快已被证明存在碰撞漏洞(不同输入可能产生相同…