基于微服务架构的农产品溯源系统优化
2022-02-22邹春杰赵学健刘红帅
邹春杰,赵学健,朱 涛,刘红帅,江 婷
(1.南京邮电大学 现代邮政学院,江苏 南京 210003;2.南京航空航天大学 电子信息工程学院,江苏 南京 210016)
0 引 言
随着越来越多的消费者开始关注所购买的农产品质量安全,农产品质量安全追溯系统的用户量快速增加。基于SSM框架的溯源系统已经很难支撑当前的业务规模。如果并发量超过了服务器的负载,系统很有可能会出现服务器崩溃的现象,极大地影响用户使用。即使换成性能更先进的服务器,也无法彻底解决并发量过高的问题。必须改变系统的架构思路,提高系统的性能、实现服务组件化、提高系统的扩容能力、保证高可用。
1 研究现状
1.1 国内研究现状
文献[1]提出了一种基于区块链技术和物联网相关技术相结合的农产品溯源系统,与已有的农产品溯源系统相比,该系统具有分散、安全、可靠和防篡改的优点,特别适用于从农产品种植、生长、收割、物流、流通到销售的冷链物流的多阶段追溯管理。该系统通过使用区块链的智能合约、共识策略和数据链验证技术,可以明显提高对农产品质量安全追溯的安全性和准确性。但是该系统存在时间复杂度过高的缺点。文献[2]提出了一种基于区块链技术的农产品溯源系统。该系统主要通过“一环节一账本”的溯源系统模式来降低农产品溯源系统的存储结构,从而可以大大地降低农产品溯源系统的时间复杂度。该系统使用动态的农产品质量安全追溯机制使得系统可以非常灵活自由地适应不同的应用场景,并且对溯源系统的数据进行加密,以此极大程度地提升农产品质量安全追溯结果的准确性。文献[3]提出了一种基于二维码技术和物联网技术相结合的农产品质量安全追溯系统,该系统的主要用户是农产品消费者和农产品销售商,消费者和销售商可以通过该溯源系统清楚地查看农产品生产、种植、采摘和销售等一系列相关环节的详细信息。该溯源系统主要包含农产品信息查询、农产品二维码形成、农产品销售管理等功能。通过使用该系统可以很灵活地帮助消费者和销售商查询农产品的详细信息,保证了农产品相关信息数据查询的的准确性和可信性。文献[4]基于大数据技术开发了一款农产品溯源系统,该系统提出了通过粮食来源跟踪代码为主题,将粮食加工和物流链中的可追溯性信息进行关联,以便进行农产品的可追溯性查询,能够及时找回存在质量安全的农产品。文中基于大数据和物联网的三层架构研究了农产品质量安全追溯平台的功能体系和总结架构,并且受到了企业国家有相关部门的好评,对农产品质量安全追溯的准确性方面的提升起到了非常关键的作用,极大程度上提升了消费者的消费信心。文献[5]设计并提出了一种基于B/S架构的农产品溯源系统。该系统对农产品产地信息和各个主要的加工环节等重要信息进行登记注册。系统用户可以通过该系统查询到所有农产品的产地信息、经销商信息和农产品保质期等详细的农产品信息。当消费者发现所购买的农产品出现质量安全问题时,系统用户可以通过该溯源系统及时地联系到农产品销售商和政府相关管理部门,以便政府相关部门工作人员可以更好地使用该系统进行查证。因此该系统比其他的农产品溯源系统更具优势。
1.2 国外研究现状
文献[6]建立了一种基于NFC技术的农产品溯源系统。将农产品溯源系统分为物理层、逻辑层、持久层和应用层等几个层次。设计了企业管理、用户查询和政府监管等几个主要的领域来跟踪追溯信息流程。最后,对该系统进行测试,测试结果表明基于NFC技术的农产品溯源系统在实际应用中是有效的。文献[7]提出了可以嵌入谷物的小型、可编码的丸状示踪剂,用于存储谷物的历史信息和检索编码信息,以实现对谷物的可追溯性。鉴于样本大小和示踪剂数量是农产品溯源系统采样精确度的重要信息指标,所以该文旨在研究和开发一个统计抽样程序可以安全地收集样本的大小和示踪剂的数量。实践证明,改进后的溯源系统可以很好地保障农产品质量安全追溯的准确性和可靠性。文献[8]提出了一种基于关系数据模型的溯源系统。该系统可以存储所有与农产品批次相关的必要信息,包括产品和质量信息。此外,该溯源系统可以追溯给定批次的农产品来源,也可以用于跟踪先前批次的发货信息。
1.3 微服务的概念
微服务架构体系是一种与单体式架构相对应的架构概念,微服务将单体式架构拆分为若干个小的微服务功能模块,对每一个功能模块单独进行开发。不同的功能模块之间相互协调并且通过spring cloud框架将若干个小的功能模块集成到一起。
图1 微服务架构示意图
微服务架构系统具有开发相对简单、开发效率较高、扩展性高、响应速度较快,每个功能模块单独开发,一个功能模块出现问题不会影响其他功能模块正常运行等特点。微服务架构系统中如果某个微服务模块或者业务功能出现故障不能继续运行,微服务架构系统中的其他功能模块仍然可以继续为系统用户提供服务。
微服务架构系统所有的开发不需要集中到某一个单独的项目当中,且上传代码的时候可以单独进行上传,不需要等待其他开发人员,最大程度上避免了代码冲突。
本节主要介绍了农产品溯源系统国内学者的研究状况、微服务架构的概念以及微服务架构的优势,针对国内外溯源系统的研究现状和微服务架构的技术优势,文中决定采用微服务架构体系对农产品溯源系统进行重新开发,示意图见图1。
2 农产品溯源系统的用户角色分析
基于微服务架构的农产品溯源系统的用户主要是农产品消费者,各级农产品销售商,政府农产品安全管理部门工作人员,管理维护系统的系统管理员。
销售商:销售商可以查看自己各类农产品的用户信息、销售的农产品详细信息、剩余的农产品种类和剩余的各种农产品的数量,还可以同过溯源系统查看农产品生长的视频监控画面。
农产品安全管理部门工作人员:通过农产品溯源系统可以查看农产品的种类和各种农产品的产地信息并且可以查看农产品生长的视频监控画面,也可以同过系统查看各种农产品出现质量安全问题的详细情况。
农产品消费者:这类用户指的是农产品的个体购买者。消费者可以查看农产品的种类信息、数量信息、产地信息,也可以查看某种农产品生长的视频监控回放。
系统管理员:系统的开发和维护人员。
3 农产品溯源系统的需求分析
3.1 用户管理功能分析
(1)用户注册功能:主要包括新用户通过手机号和短信验证码并且通过选择一个用户角色来进行注册,或者通过邮箱账户和密码并且选择一个用户角色的方式来进行注册。
(2)用户登陆功能:用户要使用该系统必须通过注册获得的手机号或者邮箱账户密码来进行登陆。点击登陆以后系统会和后端数据库账户密码进行匹配,匹配成功以后才可以进行后续操作,否则提示登陆失败。
(3)密码修改功能:如果用户忘记了自己注册账户的密码,用户可以通过预留的手机号和邮箱对密码进行重置。
(4)用户管理功能:用户管理员对不同的用户进行综合的管理,该功能可以对基于微服务架构的农产品溯源系统的不同用户信息进行增加、删除、修改和查询。
3.2 农产品归属实体管理功能分析
(1)农产品销售商:提供了各种农产品信息的增加、删除、修改、查询功能和农产品成长视频监控回放功能。
(2)农产品消费者:提供了农产品消费者信息的增加、删除、修改和查询功能。
(3)农产品安全管理部门工作人员:提供了农产品安全管理部门工作人员信息的增加、删除、修改和添加功能。
3.3 农产品信息管理功能分析
农产品信息管理是基于微服务架构农产品溯源系统的最核心功能,主要包括相关农产品信息的删除、农产品信息增加、农产品信息修改和农产品信息查看等几个主要的核心功能模块。该功能主要用来帮助销售商、消费者和监察员通过溯源系统对各种农产品的详细信息进行查看,并且可以通过农产品溯源系统对农产品信息进行添加、删除和修改等一系列操作。
(1)农产品信息查询:用户可以对已经登记在系统中的农产品,通过编号或者名字等信息进行查询,查询的结果呈现包含编号、名字、买卖时间和农产品生长视频监控回放等信息。
(2)农产品购买者信息查询:可以通过农产品编号和名字准确查询出该产品的购买者的信息,包括名字、手机号和其他联系方式。当农产品出现安全问题时,保证能够快速地联系到农产品的购买者。
(3)农产品保质期查询:可以查询出农产品的售出时间、农产品的收割时间和保质期。
(4)农产品信息编辑:可以对农产品编号、名字、售出时间、保质期等信息和农产品生长视频监控等信息进行修改和编辑。
(5)农产品信息添加:可以向系统中添加已经出售的农产品信息。
(6)农产品信息删除:对信息错误的农产品信息进行删除操作。
3.4 农产品生长监控功能分析
该功能帮助农产品消费者和农产品安全管理部门工作人员对农产品的生长状态有个基本的掌握和了解。方便相关工作人员查看监控录像和录像的回放,统计分析农产品的质量安全状况。
3.5 农产品销售轨迹功能分析
消费者可以根据查询条件查询出农产品的销售轨迹,可以查询出农产品经过了几道中间商,在中间商手中保鲜的时间。
4 微服务划分
根据功能性需求将业务划分为以下几个微服务:用户管理、农产品归属实体管理、农产品信息管理、农产品生长监控管理、农产品销售轨迹管理。相关的功能划分如图2所示。
图2 农产品溯源系统的微服务划分
每个微服务定义成独立的微服务接口,和基于SSM框架的农产品溯源系统相比,基于微服务的农产品溯源系统由若干个相互独立且具有不同功能的微服务实例模块构成,每个微服务功能模块都只需要关注自己独立的业务功能。
每个服务可以单独部署,也可以根据服务把开发团队进行拆分,每个团队只负责自己开发的功能模块,不需要关心其他的服务。
5 微服务架构的设计和实现
基于微服务架构的农产品溯源系统在设计的时候实现了系统的并发性、扩展性、隔离性、高可用性。基于微服务的设计理念,对SSM框架的农产品溯源系统所实现的各种功能进行了重构,将系统中每一个小的功能单独构建成一个小的功能模块,并且将每一个小的功能模块链接到一起,构建成供外部访问的应用平台。
微服务架构的农产品溯源系统包含四层:
(1)视图层使用JavaScript、HTML、CSS技术给用户展示前端界面。
(2)网关层使用Zuul框架部署在服务器上,作为访问系统的入口。网关层在微服务架构系统当中是业务逻辑层和持久层之间的中间层,前端的用户请求首先经过网关层,其次通过网关层转发到业务逻辑层。经过网关层对前端的请求信息进行验证,然后再将前端用户的请求信息通过重定向的方式转发到业务逻辑层,从而不需要在每个微服务模块单独进行验证,降低了系统的时间复杂度。
(3)业务逻辑层的设计对于一个支持可扩展的架构尤为关键,对于持久层而言,业务逻辑层可以调用持久层的数据;对于网关层,业务逻辑层可以被网关层调用。
(4)持久层使用的是Mybatis框架,持久层的主要作用是和系统的数据库进行数据传递,并且使用Redis中间件来处理农产品溯源系统的缓存信息,以此来提高系统响应速度。
农产品溯源系统架构如图3所示。
图3 农产品溯源系统架构
5.1 用户注册接口实现
当用户使用系统时,他们首先需要注册。用户注册的过程实际上就是向系统中添加用户信息的过程。具体实现代码如下:
@RestMapping(“add”)
public RestResponse
userService.addAccount(user,user.getEnableUrl());
return RestResponse.success();
}
//注册:添加用户
public void addAccount(User user,String enableUrl){
user.setPassword(HashUtils.encryPassWd(user.getPasswd));
registerNotify(user.getEmail.enableUrl);
}
5.2 用户登陆接口实现
用户登陆接口主要是通过JWT的Token认证机制实现,从而保证系统的安全性与服务访问的高效性。具体代码实现如下所示:
@RequstMapping(“auth”)
Public RestResponse
User user=userService.auth(user.getEmain(),user.getPassword(){
Return RestResponse.success(finalUser);
}
@ResquestMapping(“get”)
Public RestRestponse
User user=userService.auth(user.getEmain(),user.getPassword(){
Return RestResponse.success(finalUser);
}
}
@RequestMapping(“logout”)
Public RestResponse
userService.invalidate(token);
return RestResponse.success(finalUser);
}
登陆和查询是系统中访问量比较多的功能,由于网关服务要根据请求,每次都会调用查询功能进行身份认证,所以在设计用户服务时要做好性能评估。
5.3 农产品信息管理接口实现
农产品信息管理模块是整个微服务架构溯源系统最主要的核心功能模块,主要提供农产品信息管理等相关服务。溯源系统其他的功能模块都需要依赖于农产品信息管理模块来具体实现。
当用户进入农产品信息管理界面,会根据用户的userId和农产品归属实体Id等调用查询接口来查询具体的农产品信息。也可以选中列表中的农产品信息进行修改、删除和添加等一系列相关操作。添加农产品信息的代码如下所示:
//农产品信息添加
@RequestMapping(“add”);
PublicRestponse
if(agricultural.getUserId==null){//获取农产品信息
return RestResponse.error(RestCode.ILLEGAL_PARAMS);
}//添加农产品信息到数据库
Service.addagricultural(agricultural,agricultural.getUserId());
Return RestResponse.success();
}
本章主要完成了对基于微服务架构的农产品溯源系统中几个主要功能的实现,实现了用户注册功能、用户登陆功能和农产品信息管理功能的开发,并且对农产品溯源系统中的关键功能的接口进行了详细描述。
6 集成spring cloud微服务
前面章节描述了微服务的概念。微服务架构的主要思想是利用多个具有相对独立的生命周期和运行在独立进程中的服务相互协作来完成搭建起微服务系统的功能。spring cloud框架为开发者提供了一个相对独立且完整的微服务架构解决方案。
6.1 系统划分
基于微服务架构的农产品溯源系统主要由下面几个微服务模块构成。
zuul-gateway:API网关,网关是基于微服务架构的农产品溯源系统唯一的外部请求入口。spring cloud提供了@Enable Proxy启动路由代理。API网关使用Feign调用相应的业务服务模块,且可以提供基于注解的负载均衡。
config-server:统一配置中心,为基于微服务架构的农产品溯源系统中相关的业务服务提供相应的外部配置管理功能。
eureka-server:基于微服务架构农产品溯源系统服务注册中心服务端,eureka-server为溯源系统中的微服务功能模块提供服务注册和发现功能。服务上线后首先会在eureka-server中注册自己的配置信息,其他微服务实例可以在注册中心的服务列表中查询调用。
6.2 项目构建
本节主要介绍构建项目的详细过程。eclipse中新建一个项目作为整个微服务架构溯源系统的父项目,该项目主要负责系统的版本控制、通用依赖包管理、模块管理等相关功能。
声明基于微服务架构的农产品溯源系统所使用的spring boot框架和spring cloud框架的相应的版本依赖。基于微服务架构的农产品溯源系统使用的spring boot版本是2.3.0 RELEASE,spring cloud版本是2.0.3RELEASE,具体的框架版本代码声明如下所示:
到现在为止,基于微服务架构的农产品溯源系统的总体框架已经完成。下面将重点描述构建子模块的详细过程。
服务与注册中心搭建:
项目中需要加入spring cloud提供的erueka-server依赖包,依赖包的版本已经在父项目中声明,子模块中的相关依赖不需要重新声明版本。
在构建农产品溯源系统项目的启动类上须要添加@Enable Eureka Server注解。
添加了相应的依赖和注解后,仍然需要在项目的配置文件中加入服务注册中心的相应的端口号、服务的具体名称和服务的详细地址等一系列重要的配置参数。以下是eureka-server的详细配置信息。
Server:
Port:8080
Spring:
Application:
Name:eureka-server
Eureka:
Server:
Enable-self-preservation:false
Client:
defaultZone:http//localhost:8080/eureka/
7 持久层架构设计
在持久层中增加缓存,提高溯源系统中MySQL数据库的读写速度,极大程度上提高溯源系统的响应时间。从农产品溯源系统的业务功能角度出发,在持久层中增加缓存需要保存系统用户的登录信息、购买的农产品信息等,多数用户的请求均为查询农产品相关信息,要求缓存系统必须具有较高的每秒查询率,不能因为部分节点故障从而导致数据不能正常查询,要求可以通过扩展节点来提升系统的缓存空间,即要实现高可用、高可扩展、吞吐量的特性。分布式缓存具有高可用的系统部署解决方案,因此考虑使用分布式缓存作为持久层处理缓存的工具。
分布式缓存是一种基于分布式节点的高吞吐量、可扩展、空间规模大的缓存解决方案。分布式缓存正是为了弥补应用程序缓存的不足。它解决了内存空间的限制,利用多个廉价的服务器组成一个分布式缓存系统,内存空间是多个服务器的内存空间之和。解决了数据同步和共享问题的同时还解决了单点故障问题,将相同的数据备份到若干个互不相同的机器上。如果一台机器出现故障,缓存的数据仍然可以被其他机器访问。因此分布式缓存更加适用于农产品溯源系统的实际业务场景。
8 系统测试与分析
8.1 测试环境
测试的软件环境为:MySQL5.7,window10操作系统,谷歌浏览器,jdk1.8的java环境,使用Git进行代码托管,使用Maven管理项目架包。
8.2 并发性测试
通过并发性能测试,可以有效地检测系统执行各模块功能的运行速度。并且通过不断增加系统用户数量,分别记录基于SSM框架的农产品溯源系统和基于微服务的农产品溯源系统的响应时间。
基于微服务架构的农产品溯源系统和单体架构的农产品溯源系统,在并发量不断增加的情况下响应时间的分析对比如图4所示。
图4 两种溯源系统响应时间对比
经过试验结果分析,在用户并发量明显增加的情况下,基于微服务架构的农产品溯源系统比原有的基于SSM框架的农产品溯源系统响应时间更短。基于微服务架构的农产品溯源系统提高了系统在高并发情况下的响应时间。
8.3 服务注册中心测试
作为服务发现组件,服务注册中心将在每个微服务启动后进行注册,服务注册中心将保存注册服务的访问地址,测试用例如表1所示。
表1 服务注册中心测试
8.4 服务网关测试
网关服务负责解耦前后端,前端通过先访问网关再转接到目标服务,测试用例如表2所示。
表2 网关服务测试
8.5 本章小结
本章主要进行基于微服务架构的农产品溯源系统的测试相关工作,通过设计测试用例测试相关的微服务组件能否正常运行,测试结果表明微服务环境搭建成功。对微服务架构溯源系统在用户数量不断增加的情况下进行系统并发性能测试,测试结果表明在用户并发量明显增加的情况下,基于微服务架构的农产品溯源系统比原有的基于SSM框架的农产品溯源系统响应时间更短。
9 结束语
该文详细阐述了微服务架构的概念和核心组件,并与传统的SSM框架的溯源系统作对比,并且使用微服务架构重新开发系统。克服了单体架构可扩展性差的缺点,当有新增且比较独立的功能需求时,完全可以将新功能封装成为一个新的服务。