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