我的软考历程

摘要

2023年2月,我所在的公司做了开发纱线MES系统的决定,该系统为国内纱线工厂提供SAAS服务,旨在提高纱线工厂的智能化和数字化水平。我在该项目中被任命为系统架构设计师,全面掌管该项目的架构设计工作。本文将结合我在该项目中的架构设计工作经验,详细介绍如何把基于架构的软件设计方法应用在项目中。ABSD方法把项目开发分为了六个阶段:架构需求、架构设计、架构文档化、架构复审、架构实现、架构演化,通过以上阶段,可以有效地保障系统的非功能属性和功能属性,有力地保障项目的开发进度和质量。最终在2023年10月,该系统正式上线并运行至今,目前已经有879家工厂接入了我们的系统,系统运行稳定,表现优异,得到了客户工厂和公司领导的一致赞扬。

项目背景

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

论述内容

由于该系统功能复杂,涉及工厂多,数据接入流程长,如何保证项目的正常开发和上线就成了一个大问题,在立项后,我作为该项目的架构设计师,和纱线业务专家、运维部门负责人、产品部门负责人以及公司业务线领导做了深入的讨论,最终决定使用基于ABSD的架构设计方式去构建我们的项目。ABSD分为六个阶段:架构需求阶段、架构设计阶段、架构文档化阶段、架构复审阶段、架构实现阶段、结构演化阶段。下面本文将详细介绍这六个阶段以及每个阶段的实践过程。

一、架构需求阶段

该阶段主要需要明确公司的战略需求以及纱线工厂的需求,需要确定在功能、行为、性能、设计约束等方面的期望,梳理项目的功能性需求、质量属性需求以及约束性需求。该阶段的主要活动是需求获取、标识构件和架构评审。根据之前我司建设染整一体化和织布一体化的经验,我们从领域模型的建设角度考虑,在需求阶段提取了一系列构件包括业务功能组件和通用功能组件,通用功能组件包括我司的物联网平台、Influxdb时序性数据库、XXL-JOB分布式任务、微服务架构脚手架、前端通用VUE脚手架等;业务功能组件包括文件上传下载、权限认证、工作流引擎、通用低代码等等。除此之外,我们团队还确定了一系统要满足的质量属性需求,比如性能方面要满足:1、从工厂上报数据到系统要保证在2秒内;2、各种数据分析页面展示要在1秒内出现。在可用性方面要满足:1、系统出现问题,在10分钟内要恢复正常;2、数据要采用冗余备份,当主库出现问题,从库要在1分钟内替换代替主库。在可调试性方面要满足:提供远程调试接口,当出现问题时可以远程调试排查。最后,工厂专家提了一些约束,比如传输过程必须要保证数据的机密性。通过以上过程,我们明确了架构需求。

二、架构设计阶段、架构文档化阶段

该阶段是一个迭代的过程,利用架构需求构建系统架构模型。这个阶段主要包括提出架构模型、将已经标识的构件映射到架构中,分析构件之间的相互作用,产生系统架构并进行架构评审。在这个阶段,我们采用面向对象的设计方法,对工厂的业务需求进行建模分析,分别提取出了以下关键领域:前置处理、细砂、络筒、工资、通用查询等领域,然后对各领域进行面向对象的设计,通过UML中的用例图、类图等描述架构模型。例如,我们对工资计算进行用例图的建立,识别参与者、用例、用例之间的关系,参与者包括定时任务、管理者、员工等,用例包括查看工资、工资计算、权限校验、各种方式的工资计算、工资确认等等,其中查看工资跟权限校验属于包含关系,跟工资确认属于扩展关系;工资计算跟各种方式的工资计算属于泛化关系。除此之外,我们还识别到其他一些组件,比如消息队列、分布式定时任务、分布式配置等,这些组件已经在公司内部存在,就可以直接利用并组装,如果存在不匹配的情况,就需要做适配操作。架构设计阶段之后,我们就形成了架构规格说明书和测试架构需求的质量设计说明书,以供后续流程使用,为项目参与者提供共识。

三、架构复审阶段、架构实现阶段、架构演化阶段

该阶段在架构设计阶段之后,团队已经进行了架构文档化整理,生成了架构规格说明书和测试架构需求的质量设计说明书,并通过4+1视图去描述架构。此时,我邀请纱线业务专家、运维部门负责人、测试部门负责人、产品部门负责人以及公司业务领导等,大家一起通过ATAM(架构权衡分析方法)对架构进行评估,去复审架构,去发现架构中的缺陷和隐患。该阶段包含以下步骤:介绍和描述、分析和评价、测试、报告四个阶段。首先,我向大家介绍了ATAM方法,并让产品负责人对业务需求进行介绍,同时我也指出了业务的质量属性和非功能性需求。然后,架构组对该架构进行了分析,得到了一系统需要满足的质量属性,并生成了效用树,之后对各质量属性进行了排序,取舍。在测试阶段,我们通过测试比较,得到结论,可用性、安全性、性能、可修改性是我们最重要的四种属性。由于项目复杂,涉及工厂众多,所以我们重点考虑性能、可用性、安全性。最终,我们生成了报告,报告包含效用树、需求说明书、架构规格说明书、质量设计说明书等等。基于架构需求和架构模型,我们采用瀑布模型进系统进行了实现,满足了功能和质量属性,后期会根据现实的情况再考虑是否进行架构演化。
通过基于ABSD的架构设计方法,我们满足了系统的质量属性和非功能性需求,同时按时按质量保证了系统的开发。

总结

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

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

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

相关文章

团结引擎发布纯鸿蒙应用

大家好,我是阿赵。   这里尝试一下用团结引擎发布纯鸿蒙系统的应用。 一、 安装鸿蒙系统发布需要的组件 在团结引擎的Hub里面找到Add modules: 然后找到OpenHarmony的支持选项,由于我已经安装过了,所以会显示Installed,如果没…

C++基础(FreeRDP编译)

安装 先安装openssl 保姆级OpenSSL下载及安装教程,OpenSSL下载及安装教程-CSDN博客 vcpkg integrate install 安装 vcpkg install zlib vcpkg install ffmpeg:x64-windows 编译指令 PS D:\freerdp\FreeRDP\build> cmake .. -G "Visual Studio 17 2022" -A x…

用celery作为信息中间件

要在 Django 的 settings.py 中设置 Redis 作为 Celery 的 broker 和(可选)backend,你需要添加如下配置: 安装依赖(如未安装): pip install celery redis在 settings.py 中添加 Celery 配置(推荐放在文件底部): # Celery 配置 CELERY_BROKER_URL = redis://127.0.0.1…

Postman介绍及使用

Postman 是一个强大的 API 开发、测试和文档化工具,广泛用于开发者、测试人员和 API 设计者。以下是 Postman 的核心使用指南,涵盖基础操作到进阶功能: 一、基础使用 安装与界面 下载:官网下载(支持 Windows/macOS/Lin…

Android14音频子系统-ASoC-ALSA之DAPM电源管理子系统

文章目录 概述1)codec对象-WM89602)ALSA下的kcontrol的构造与使用3)ASOC-ALSA下的kcontrol构造与使用1、通用寄存器对象 - kcontrol2、DAPM下的寄存器对象-widget3、如何构造widget?4、抽象对象widget、route与path1)r…

如何修改anaconda 创建新虚拟环境的路径(默认是C:\.conda\envs)

参考文章: 如何修改anaconda 创建新虚拟环境的路径(默认是C:\.conda\envs)_anaconda创建环境怎么改路径-CSDN博客

前缀和计算

前缀和 输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。 所用方法和基本原理 前缀和数组的构建: 首先定义了一个方法getPrefixSum来构建前缀和数组。前缀和数组…

BP神经网络支持向量机实现风机故障诊断

BP神经网络,支持向量机等用于风机故障诊断 BP神经网络,支持向量机等用于风机故障诊断/成功算法/bp20111202_FDD.m , 1580 BP神经网络,支持向量机等用于风机故障诊断/成功算法/BP_FDD.m , 6044 BP神经网络,支持向量机等用于风机故…

c++ std::initializer_list

测试代码&#xff1a; int sum(std::initializer_list<int> params) { // 传递若干同类型参数int total 0;for (auto num : params) {total num;}return total; }void testInitializer_list() {// 自定义类支持列表初始化class Demo {public:Demo(std::initializer_li…

Python 数据分析与机器学习入门 (五):Matplotlib 数据可视化基础

引言&#xff1a;为何可视化至关重要&#xff1f; 俗话说&#xff0c;“一图胜千言”。在数据分析领域&#xff0c;这句话尤其正确。原始的数据表格和统计摘要虽然精确&#xff0c;但往往难以揭示数据中隐藏的模式、趋势、异常值和关系。数据可视化通过将数据转换成图形&#…

AI基础1--线性代数(TODO)

1 前言 关于矩阵的运算&#xff0c;其实之前写过一篇&#xff1a;算法矩阵提速原理_矩阵分块计算速度会更快嘛-CSDN博客 还是那句话&#xff0c;计算机懂个毛的高等数学。只是矩阵运算的并行性和结构化特点与 SIMD/GPU 的执行模型非常一致。在实际硬件实现中&#xff0c;许多矩…

如何让宿主机完全看不到Wi-Fi?虚拟机独立联网隐匿上网实战!

“如何让宿主机完全看不到Wi-Fi&#xff1f;虚拟机独立联网隐匿上网实战&#xff01;” 一、前言 在某些特定环境&#xff08;如企业办公或信息安全测试&#xff09;中&#xff0c;我们可能有这样的需求&#xff1a; 让宿主机无法识别或使用某个USB网络设备&#xff0c;但虚拟…

Excel基础操作知识笔记

​ 学习视频链接&#xff1a; ​​​​​​【公开课】Excel基础大全&#xff08;1-66集&#xff09;【超高清版】_哔哩哔哩_bilibili 深圳则秀教育官方账号的个人空间-深圳则秀教育官方账号个人主页-哔哩哔哩视频 Excel技巧零基础入门公开课小白&#xff08;Excel表格制作|Exc…

【2025/06/30】GitHub 今日热门项目

GitHub 今日热门项目 &#x1f680; 每日精选优质开源项目 | 发现优质开源项目&#xff0c;跟上技术发展趋势 &#x1f4cb; 报告概览 &#x1f4ca; 统计项&#x1f4c8; 数值&#x1f4dd; 说明&#x1f4c5; 报告日期2025-06-30 (周一)GitHub Trending 每日快照&#x1f55…

Oracle 进阶语法实战:从多维分析到数据清洗的深度应用​(第四课)

在《Oracle 树形统计再进阶》(第三课)基础上&#xff0c;我们跳出传统 SQL 聚合框架&#xff0c;探索Oracle 特有的高级语法特性&#xff0c;包括多维分析神器MODEL子句、数据清洗利器正则表达式、PL/SQL 存储过程优化&#xff0c;以及基于执行计划的查询调优技巧。这些技术能解…

SpringBoot -- 自动配置原理

SpringBoot 自动配置原理 基础知识 Bean扫描 我们在学习 Spring 的时候&#xff0c;如果要把标注一下注解的类扫描进 IOC 容器 Controller&#xff0c;Service&#xff0c;Mapper&#xff0c;是需要通过一下两种方式实现的&#xff0c;但是我们在 SpringBoot 工程中并没有编写…

Kubernetes从入门到精通-服务发现Service

一、为什么需要 Service&#xff1f; Pod 的动态性&#xff1a; Pod 是 Kubernetes 调度的基本单位。它们可能因为故障、滚动更新、扩缩容等原因随时被创建或销毁。 Pod IP 的不稳定性&#xff1a; 每个 Pod 都有自己的 IP 地址&#xff0c;但当 Pod 重建时&#xff0c;IP 地址…

Milvus 资源调度系统的核心部分:「查询节点」「资源组」「数据库」

Milvus 的资源管理分为三层&#xff1a;查询节点、资源组和 数据库。 查询节点&#xff1a;处理查询任务的组件。它在物理机或容器&#xff08;如 Kubernetes 中的 pod&#xff09;上运行。 资源组&#xff1a;查询节点的集合&#xff0c;充当逻辑组件&#xff08;数据库和 C…

我的第一个开源项目:用Python搭建轻量级静态网页服务器—— 零基础也能实现的Web开发初体验

一、为什么选择静态服务器&#xff1f; 极简高效&#xff1a;无需数据库或复杂后端逻辑&#xff0c;适合展示简历、作品集等静态内容 学习曲线平缓&#xff1a;是理解HTTP协议和Web服务原理的最佳入门方式 资源消耗低&#xff1a;单文件Python脚本即可运行&#xff0c;内存占…

github 图床使用免费CDN加速(jsdelivr)

github做图床大部分人都知道&#xff0c;但是国内访问速度不稳定&#xff0c;所以使用jsdelivr加速。 jsdelivr是什么呢&#xff1f;它是一个免费、快速和可信赖的CDN加速服务&#xff0c;直接集成在github中的&#xff0c;无需额外操作即可使用。 本文分两部份&#xff0c;最…