我的软考历程
摘要
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、开发人员也要学习纱线业务,遇到问题反馈给产品,同时在做设计时,采用灵活的设计模式,为需求的变动留下可操作的空间。我们通过这两个方法解决了这个问题,保证了项目的进展。通过这次实践,我不仅学习到了架构复用的相关技术,也锻炼了自己的架构和管理能力,我意识到只有不断地学习和实践才能让知识融汇于自己的技术体系之中,才能在未来的工作中游刃有余、勇担大任,为祖国的信息化建设贡献自己的力量。