系统架构设计师论文分享-论软件脆弱性分析

发布于:2025-07-07 ⋅ 阅读:(19) ⋅ 点赞:(0)

我的软考历程

摘要

2023年2月,我所在的公司做了开发纱线MES系统的决定,该系统为国内纱线工厂提供SAAS服务,旨在提高纱线工厂的智能化和数字化水平。我在该项目中被任命为系统架构设计师,全面掌管该项目的架构设计工作。本文将结合我在该项目中的架构设计工作经验,详细论述了不同软件架构脆弱性的问题以及解决方案。常见的软件架构有层次型架构、MVC架构、微服务架构、单体架构等等,比如,层次型架构的脆弱性表现在:层次之间的复杂性、底层应用影响上层的功能,层次之间的通信效率问题等等。本项目采用了层次型和微服务架构,在解决了它们的脆弱性问题后,有效地保障了项目的开发和运行。最终在2023年12月上线,各项功能和性能均达到了客户的要求,得到了客户的一致好评。

项目背景

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

论述内容

由于该项目涉及参与者和模块众多,业务逻辑复杂,流程又长,所以必须要慎重选择合适的架构模式,经过多次会议的讨论,我们选择了层次型和微服务架构模式相结合的方式去实现我们的系统。层次型架构把系统分为多个层次,每个层次只需要关注自己的事情,有利于业务的解耦,降低业务的复杂度,提供系统的可维护性和开发的效率,但是层次型架构存在以下脆弱性:层次结构的复杂性、底层故障会影响上层应用、多层次之间的通信效率问题等等。微服务架构把项目分为一个个的微服务,每个微服务可以独立开发,独立部署,独立运行,这有利于微服务的管理和开发,提升项目的开发进度,但是,微服务架构存在以下脆弱性:分布式条件下的数据一致性问题、服务之间的依赖测试问题、服务的自动化运维问题。在确定了架构模式之后,我们在具体做架构设计时,就重点关注了这两种架构模式的脆弱性,并制定了相应的解决方案,最终取得了良好的效果,系统各项质量属性目标均达到了要求。

一、层次型架构模式

层次型架构模式能有效地降低系统开发的复杂度,让不同的层次做自己的事情,降低不同层次之间的耦合,提升并行开发的速度。基于此,层次型架构模式是目前最常用的架构模式之一,但是,层次型架构模式存在以下脆弱性问题:层架架构的复杂性、底层故障会影响上层业务、多层之间的通信效率问题。在本系统中,我们采用了层次型的架构设计,首先,纱线MES系统整体分三部分:边端、物联网平台和云端应用。边端部署在工厂侧,环境不稳定,网络状态也不好,基于此,为了解决边端与物联网之间的通信问题,我们采用了MQTT协议,MQTT协议是一个物联网协议,适合不稳定和网络差的环境,在这种环境下能保障通信的可靠性。同时,边端设备在部署的时候采用冗余的方式,当一台机器出现错误,备份设备就会替代工作,提高了边端的可靠性。在物联网层次,我们采用分布式的方式,以集群的方式来提供服务,在数据存储上也采用了冗余备份,在速度上,采用了零拷贝、顺序写硬盘、使用缓存等多种方式来保证物联网平台处理数据的速度。在云端应用层,我们使用vue.js技术开发页面,同时对外提供网页服务和微信小程序服务,在后端服务侧,我们在微服务架构的基础上采用层次分割,分成了API网关层、业务层、DAO层、数据层。API网关层负责请求路由、权限认证与安全、负载均衡、日志记录等功能,网关层是MES系统的总流量入口,我们采用了缓存技术、消息队列来保证性能。请求经过网关后,就进去后面的微服务中,微服务按照领域划分,每一个微服务又分为业务层、DAO层和数据层。业务层负责具体的功能实现,在实现的过程中需要调用DAO层提供的接口。DAO层提供了对于数据库的各种操作,实现业务层和数据层的解耦,提供系统的可维护性。数据层使用Mysql数据库,采用主从的方式部署,提高系统的读写并发能力。通过使用层次型架构模式,纱线mes系统有效降低了开发的复杂度,保证了项目的进度,提高了项目的质量。

二、微服务架构模式

微服务架构模式是现在常用的一种架构模式之一,微服务架构模式要求把项目分为一个个的微服务,每个微服务独立开发、独立部署、独立运行,它可以提供独立管理、技术异构型等多种优势。但是,它也具有以下脆弱性:分布式情况下的数据一致性问题、服务依赖的管理和测试问题、服务的自动化运维问题。我们在项目中使用了微服务架构模式,为了解决它的脆弱性问题,做了大量的工作。对于分布式情况下的数据一致性问题,我们针对不同的情况做了不同的处理,在一些对数据要求不严格的场景中(比如秒级的生产数据,少了一两个也没事),这时候就使用最终一致性,或者批量的方式来处理。对于一些对数据要求严格的场景(比如工单的排产),这时候就是用阿里开源的Seata框架,来保证数据的一致性。对于服务依赖的管理和测试问题,我们采用了nacos作为服务注册和配置中心,来统一作为服务注册与发现中心。对于测试难题,我们采用了skywalking、grafana、prometheus、Elk等技术,可以在页面上查到每一个请求的链路以及全系统的运行状态,有效地提升了测试的效率。对于自动化运维问题,我们采用了云原升架构技术,通过devops、docker、kubernetes实现了代码从提交到上线的一个完整的自动化流程,把人工的介入给剥离了出来,避免了人工部署容易产生的错误,提升了部署效率和质量。通过微服务架构模式,我们保证了项目开发的进度和项目的质量属性,保证了项目的按时上线。

总结

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


网站公告

今日签到

点亮在社区的每一天
去签到