1、 摘要(300)
2021年4月,我参与了某轻化工产品生产制造公司的离型膜生产管理系统项目的建设,并担任系统架构设计师,负责系统架构设计工作。该系统包括原膜追溯、涂布追溯、分切追溯、品质检测、报表信息查看等功能,能够完整管理离型膜生产的全流程及记录产生的相关数据,实现了对离型膜生产全过程的数据化和智能化,从而在提升工厂的生产效率的同时也增加了公司的经济收益。该项目共投入565万元人民币,历时14个月,于2022年6月正式交付运行至今,受到了客户的一致好评。
本文结合笔者的实际工作情况首先介绍该项目的项目背景,然后分析了微服务技术架构对于该项目的重要性,并以离型膜生产制造执行系统为例,结合微服务架构的特性与实际情况,分别讨论了微服务架构技术的应用情况。实践证明,在大型的应用系统构建过程中,使用微服务架构技术,能够实现各应用分区自治、自动化部署,具有弹性、强韧性及安全性等特点。(373)
2、项目背景(500-600)
离型膜是一种具有特殊粘性表面的薄膜,广泛应用于电子产品、汽车泡棉、印刷等领域。离型膜在制作过程中需要将不同类型的有机化学混合剂涂至原膜表面,以产生不同的粘性而满足使用需求。因此,在生产过程中,需要对配料试剂及其各比例进行严格把控,以达到生产物料的准确性。离型膜生产具有客户多、产量大、单产品利润低的特点,工厂为提高收益需采用薄利多销的方式,但人工管控存在难度大、原料配比复杂、客诉率高、生产过程混乱等问题,故公司管理层决策开发使用离型膜生产制造执行系统(以下简称“离型膜MES”)解决以上问题。2021年4月到2022年6月,我参与了离型膜MES开发的工作,负责项目架构设计,系统主要分为三大流程:一、根据公司已有企业资源管理系统(ERP系统)中的数据,获取到当日需生产的订单并下发车间。二、车间根据订单信息进行配料并涂布生产,如果客户有特殊规格需求,则对涂布成品进行分切操作,生产完成后通过品质检测记录相关数据。三、品质检测合格后需与公司已有仓库管理系统(WMS)进行对接,完成成品入库操作,仓库后续再与物流联系发货,最终完成生产全部步骤。四、生产主管及部门领导可以查看生产从原膜到涂布再到分切及最终是否入库的全工程信息。在本项目中,我担任系统架构师的职务,主要负责系统的架构设计相关工作。(532)
3、正文(200+1000)
微服务架构作为目前IT领域主流的技术,有服务化、强韧性、可观测性和自动化四类设计原则。通过服务化的设计原则,应用被分解为多个服务,可分别选择不同的技术,单个服务模块很容易开发、理解和维护,无需协调其他服务对本服务的影响;通过强韧性的设计原则,微服务可以分布式云化部署,负载均衡管理请求的分发,避免单机失败对整体服务的影响,以及弹性调整资源容量:通过可观测性的设计原则,能够对系统进行健康检查、指标监控、日志管理和链路追踪,提高系统运维、管理和排错能力;通过自动化的设计原则,可实现系统的自动化部署、自动化扩展伸缩、自动化运维、持续交付和集成,有效减少人工操作的工作量。(283)
离型膜MES基于Spring Cloud框架开发,并结合了云原生技术框架。前端采用Vue框架,通过Nginx实现前端负载均衡与反向代理功能。采用该设计方法有众多优势,下面结合其特点、开发工程遇到的问题及目前系统运行情况说明采用微服务架构设计的好处及优势。
1.服务化架构原则
每个服务都是独立的一个项目,可以独立部署,不依赖与其他项目,耦合性低。在系统架构过程中,我结合业务需求将应用系统划分为多个微服务。按照业务流程划分,包含生产中涉及到的原膜信息、涂布信息和分切信息。按生产资源划分,包含人员管理、设备管理、能耗管理等。按统计信息划分,包含报表信息统计、车间大屏看板、各类信息导出生成月度年度报表等。经过细化分切后,各模块任务需求明确,可以独立开发及同步开发,大大提升了开发效率。如模块间需要通信,只需要基于微服务的通信标准,最终通过Rest API实现各业务之间通信调用返回。在后期的应用中,如果按照实际生产需求,需要开发新的功能,只需单独开发新的微服务模块,而无需对原有的模块进行改动,即可完成服务系统的更新扩展。
2.弹性原则
随着业务量的增大,工厂规模的扩大,生活车间、车间工作人员、生产设备数量也水涨船高,当某个服务的访问量增大时,我们只需简单地增加服务申请资源或者增加服务实例总量,即可实现零成本的扩容。在应用系统部署的早期,我们将所有的服务实例均部署为三个,并使用Nginx实现负载均衡,此时负载均衡算法使用轮询的方式。在服务实际运用过程中,我们发现每周末晚上7点左右,原膜信息录入业务使用频繁,原因是在下周生产开始之前需提前录入生产所需原材料,多个车间及工作人员同时访问录入数据,导致出现了性能瓶颈。面对此问题时,我们只需修改配置文件,将原来的三个镜像实例扩展为六个便可缓解此类问题。当然我们也对负载均衡算法进行了调优,为防止用户使用完成后连接大量失效的情况,我们由原来的轮询方法改为了最小连接数查询算法,保证了服务连接时能够平滑的连接到空闲资源最多的服务器上。
3.韧性原则
因工厂实际生产几乎全天24小时都需要运行,所以对应用服务的韧性提出了一定要求,尤其是晚上没有信息管理人员时,就需要软件系统本身有应对突发情况的能力。采用微服务架构及多实例化负载均衡,可以保证部分服务出现问题时,仍然保证系统整体服务可用。实际开发中,采用了断路器模式,当某个微服务调用失败时,会先启动重试机制,当失败次数达到一定阈值时,断路器会打开,阻止后续的调用请求,直到服务恢复。
4.可观测原则
在工厂生产过程中,需要录入的数据及其庞大,有部分数据是由车间工人手动录入的,这就不可避免导致了部分数据出错或者认为操作失误导致整个系统崩溃。因此我们引入了观察记录机制,其中使用Logging记录系统使用人员的各种业务操作,视同Tracing链路检测服务调用及数据传输情况,如果碰到预期之外的情况,可以根据日志或者记录追踪具体操作查看问题来源及产生情况,对系统的持续性运行和维护起到了关键的作用。(1084)
4、结尾(400)
经过14个月的开发,该离型膜生产管理系统顺利投入使用,协助客户对软件进行全面的功能和性能上的测试,运行至今反馈良好。该系统由于保密性高、性能要求高、技术难度高,项目建设周期长等原因,建设过程中遇到了一些麻烦,例如在测评阶段,客户输入了大量不符合预期的数据和代码,造成了测评机宕机的情况,我们对此引入了心跳机制、快照回滚机制等,可以使系统在一分钟内恢复到正常工作状态,最终解决了该问题,并没有对项目正常开发及上线产生太大影响。由于笔者及项目团队成员十分重视项目的框架技术选型及搭建,最终保证了项目按质按量顺利交付。
通过此次未付架构的设计及开发后,我也看到了自己身上的不足之处,在后续的学习和工作中,我将不断地充电学习,和同行进行交流,提升自己的专业技能水平,并对MES进行不断地更新机优化,更好地帮助公司生产提高效率。(356)