微服务化二维码防伪溯源系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微服务化二维码防伪溯源系统作者:张展鸿,徐海蛟,何佳蕾,苏艺航
来源:《电脑知识与技术》2021年第20期
摘要:擬设计并实现一个微服务化的二维码防伪溯源系统。
系统采用微服务的架构实现,每个服务责任单一,能够独立部署。
在此架构设计的基础上,结合大部分厂商对防伪溯源的实际需求进行服务的划分与实现,并采用AES对称加密算法增加造假成本,采用二维码技术来存储商品防伪溯源信息、优化消费者的防伪查询体验。
从而实现一个有效打击造假、准确统计数据的高可用防伪溯源系统。
消费者可以追溯商品从标签生成、到出货、到销售等各个生命周期的相关数据。
关键词:微服务;QR码;防伪;溯源
中图分类号:TP399 文献标识码:A
文章编号:1009-3044(2021)20-0001-04
Micro-service-based Two-dimensional Code Anti-Counterfeiting Traceability System
ZHANG Zhan-hong, XU Hai-jiao*, HE Jia-lei, SU Yi-hang
(School of Computer, Guangdong University of Education, Guangzhou 510303, China)
Abstract : This design intends to design and implement a micro-service-based two-dimensional code anti-counterfeiting traceability system. The system is implemented using a microservices architecture. Each service has a single responsibility and can be deployed independently. Based on the design of this architecture, combined with the actual requirements of anti-counterfeiting and traceability services of most manufacturers, the AES symmetrical encryption algorithm is used to increase the cost of counterfeiting. Two-dimensional code technology is used to store commodity anti-counterfeit traceability information and optimize consumers. Security query experience. Thus, a highly available anti-counterfeiting traceability system that effectively combats counterfeiting and accurate statistical data is realized. Consumers can trace the relevant data of each life cycle of a product from label generation, to shipment, to sales.
Key words: microservice; QR Code; anti-counterfeiting; headword
1引言
长期以来,假冒伪劣的产品都是市场经济的一大毒瘤,并严重阻碍了我国的经济发展[1]。
我国每年都需要花费大量的人力、物力,用于打击假冒和伪造方面。
二维码防伪是目前可行度较高的防伪技术中的一种。
厂家可以通过二维码防伪溯源系统为其商品生成密文的、独一无二的二维码数据标签,然后将标签印刷或直接粘贴在商品的内包装。
消费者只需通过扫描该二维码,即可获取该产品所有被查询的次数与第一次被查询的时间来判断产品真伪,追溯商品相关数据,从而有力打击造假,建立品牌信任度等作用。
纵观国内外主流的防伪技术,当中最普遍、应用最广泛的有以下几类:纸张、印刷类防伪;全息镭射转移纸技术防伪;雕刻凹版印刷防伪;RFID射频技术防伪;二维码防伪系统。
综上所述,对于财力有限的企业来说,二维码防伪技术无论从成本上还是技术上都能接受,是目前主流防伪技术中性价比最高的技术方案。
虽然目前市场上实现的二维码防伪系统不少,但是它们的系统实现仍有许多的不足。
很多的后端架构都是典型的MVC模式单体架构应用,模块代码耦合度高、扩展性低。
另外系统在系统安全防护上存在不足,存在防伪二维码规则被破解,系统被恶意攻击的可能。
因此,虽然二维码防伪技术已十分成熟,市场应用也相当广泛。
但针对目前二维码防伪应用的防伪造能力差,系统架构落后。
本文提出基于微服务架构并辅以一定的加密、验证手段,
为企业和消费者提供一个更加完善的二维码防伪溯源系统,让我们的生产、生活能够得到更好的保障。
2研究方法
2.1技术介绍分析
(1)微服务,是一种应用开发的架构。
它区别于高耦合的传统单体架构方案,服务可以独立地按需部署。
每个服务可以各自采用不同的编程语言编写,最后通过规约好的调用协议进行相互调用。
(2)QR Code,全称为Quick Response Code,即快速响应码。
顾名思义,采用这个标准的二维码可以快速被解码,响应用户。
扫码时,无论从任意方向、任意旋转角度,扫码软件仍然可以正确地扫描到二维码,解码其中的数据。
图2展示了QR Code的结构。
(3)AES,全称Advanced Encryption Standard,是美国政府采用的一种区块加密标准。
目前为止,AES已经是对称加密算法标准中应用最多的之一。
而Counter mode(CTR)计数器模式(图4、图5分别展示了其加密、解密过程)具有可事先进行加密、解密的准备等优点。
因此二维码的加密算法将采用AES加密算法和CTR块加密模式的组合,防止二维码数据的生成规则被破解。
(4)Docker,是一个采用Golang开发的应用容器平台,可以有效地隔离容器的硬件资源使用。
本文项目中,就将为每一个服务构建一个镜像,使其可以运行在各自独立的容器内。
从而完成微服务架构的运行环境的构建。
2.2 详细设计与实现
(1)微服务划分
对于采用微服务架构的系统应用,服务的划分是设计阶段最关键的问题之一。
微服务的架构设计,一般首先考虑合理化、清晰化划分系统中各个模块的功能与职责,然后考虑系统模型的高内聚低耦合,最后再考虑服务间通讯、高可用、负载均衡、系统安全等问题。
本系统设计阶段采用的是领域驱动建模来进行系统模型的抽象,从业务需求中得到抽象模型,然后根据模型间的关系来划分出边界上下文。
最后完成边界上下文与微服务的转换,最终得出系统架构图如下。
(2)服务功能介绍与关键实现
接口认证与授权:
抽象出系统管理员、生产管理员与店铺用户的认证逻辑,定义Go Gin框架的中间件的生成函数,然后调用该函数,分别生成系统管理员、生产管理员与店铺用户的认证中间件。
在路由注册代码中,为需要认证功能的对应HTTP接口添加中间件,即实现该接口的用户认证功能。
HTTP跨域调用:
由于前端项目与后端项目的部署可能是分离的,此时前端项目调用后端项目提供的接口为跨域调用。
若不进行相应处理,大部分浏览器会禁止这种行为。
跨域调用的处理方案有很多种,本系统采用了通过中间件拦截请求的后端处理方案。
商品码服务:
生成批次的商品码,由自增序列经Base58编码后,进行AES-CTR加密并拼接上加密时生成的随机数。
系统服务:
发送短信验证码。
因为短信验证码是第三方提供需要付费的资源,所以发送短信验证码服务需要进行一定的限制,以抵御恶意攻击,耗尽资源。
本系统通过:手机号黑名单、固定发送间隔、固定验证码尝试失败次数和限制但手机号日接收量等手段来抵御恶意攻击。
短链服务:
即短网址服务,用于把冗长的链接缩短成较短的短链接,从而印刷、粘贴更小的二维码在商品、箱包装上。
在本系统中,为了杜绝哈希碰撞,短链生成使用的是自增序列号。
通过并发安全的发号器获得一个系统唯一的序列号,然后对序列号进行编码。
长链去重:
在本系统中,若不假如去重逻辑,多次利用同一个长链作为参数请求短链生成服务,系统中会生成多个该长链对应的短链。
本系统采用了Redis中的布隆过滤器这种数据结构提高去重的性能。
3系统测试
3.1测试目标
软件测试是开发软件应用流程中重要的一个环节。
对于微服务框架来说,服务间不可避免地会跨服务调用。
所以每个服务在发布部署前,都需要进行相应的测试,以保证服务的可靠性以及系统整体的集成质量。
软件测试的策略有很多种,如单元测试、系统测试。
其中,单元测试可以测试单个系统服务的正确性,严格地定义服务规约,使系统问题能够在系统开发过程的就被发现。
同时单元测试可以消除系统的局部不可靠,采用自下而上的方式确保系统整体质量。
而系统测试则是针对整个系统进行测试,通过将系统与系统的需求定义進行比较,从而发现问题、解决问题。
综上所述,本章主要通过介绍本系统的开发过程中,如何通过对系统代码进行单元测试,来保证各个服务的可靠性。
3.2 原始样本数据的采集
本节将通过对系统中较为关键的两个函数——商品码加密编码函数与解码函数进行单元测试演示,介绍Golang中如何对代码进行单元测试。
另外,单元测试有一个重要指标:代码覆盖率。
代码覆盖率越高,表示测试得越全面。
在Golang中,官方推荐使用一种叫作表组测试得方法。
它与传统的单元测试思路基本相同,只是它将同类的输入和预期组合成一个表组,在同一个函数中完成测试。
本节将使用表组测试的方法完成对上述两个函数的单元测试。
首先,定义表组测试的“表”结构与编写测试用例。
分别定义加密编码函数表组测试的相关表结构与测试用例代码、解密编码函数表组测试的相关表结构与测试用例代码。
编写测试逻辑。
定义加密编码函数表组测试的测试逻辑代码、解码函数表组测试的测试逻辑代码。
查看单元测试结果。
通过运行测试命令并通过Goland的测试功能可视化测试结果,得到商品码加密编码函数与解码函数的单元测试结果。
查看代码覆盖率。
3.3系统测试过程
(1)定义测试用例
本节主要定义用户登录界面与后台管理界面的系统测试用例,用于验证系统设计与需求分析是否一致。
(2)典型用例测试结果展示
以下仅展示表2用户登录界面测试用例中,用例1、2、3的测试结果:
4 结束语
本系统采用了微服务架构,代码耦合低,故具有高扩展性。
开发者可以通过新增新的服务或接口,轻松地根据实际业务需求扩展本系统。
本设计关注严峻的伪劣商品问题,从计算机软件角度出发,通过总结市场上常用防伪手段,最终采用了成本低、效果好的二维码防伪技术,设计并实现了二维码防伪溯源系统。
同时本设计还针对目前现有的系统设计存在的问题,如系统架构耦合度高,二维码数据加密不严谨,系统安全性不高等问题进行解决。
(3)AES,全称Advanced Encryption Standard,是美国政府采用的一种区块加密标准。
目前为止,AES已经是对称加密算法标准中应用最多的之一。
而Counter mode(CTR)计数器模式(图4、图5分别展示了其加密、解密过程)具有可事先进行加密、解密的准备等优点。
因此二维码的加密算法将采用AES加密算法和CTR块加密模式的组合,防止二维码数据的生成规则被破解。
(4)Docker,是一个采用Golang开发的应用容器平台,可以有效地隔离容器的硬件资源使用。
本文项目中,就将为每一个服务构建一个镜像,使其可以运行在各自独立的容器内。
从而完成微服务架构的运行环境的构建。
2.2 详细设计与实现
(1)微服务划分
对于采用微服务架构的系统应用,服务的划分是设计阶段最关键的问题之一。
微服务的架构设计,一般首先考虑合理化、清晰化划分系统中各个模块的功能与职责,然后考虑系统模型的高内聚低耦合,最后再考虑服务间通讯、高可用、负载均衡、系统安全等问题。
本系统设计阶段采用的是领域驱动建模来进行系统模型的抽象,从业务需求中得到抽象模型,然后根据模型间的关系来划分出边界上下文。
最后完成边界上下文与微服务的转换,最终得出系统架构图如下。
(2)服务功能介绍与关键实现
接口认证与授权:
抽象出系统管理员、生产管理员与店铺用户的认证逻辑,定义Go Gin框架的中间件的生成函数,然后调用该函数,分别生成系统管理员、生产管理员与店铺用户的认证中间件。
在路
由注册代码中,为需要认证功能的对应HTTP接口添加中间件,即实现该接口的用户认证功能。
HTTP跨域调用:
由于前端项目与后端项目的部署可能是分离的,此时前端项目调用后端项目提供的接口为跨域调用。
若不进行相应处理,大部分浏览器会禁止这种行为。
跨域调用的处理方案有很多种,本系统采用了通过中间件拦截请求的后端处理方案。
商品码服务:
生成批次的商品码,由自增序列经Base58编码后,进行AES-CTR加密并拼接上加密时生成的随机数。
系统服务:
发送短信验证码。
因为短信验证码是第三方提供需要付费的资源,所以发送短信验证码服务需要进行一定的限制,以抵御恶意攻击,耗尽资源。
本系统通过:手机号黑名单、固定发送间隔、固定验证码尝试失败次数和限制但手机号日接收量等手段来抵御恶意攻击。
短链服务:
即短网址服务,用于把冗长的链接缩短成较短的短链接,从而印刷、粘贴更小的二维码在商品、箱包装上。
在本系统中,为了杜绝哈希碰撞,短链生成使用的是自增序列号。
通过并发安全的发号器获得一个系统唯一的序列号,然后对序列号进行编码。
长链去重:
在本系统中,若不假如去重逻辑,多次利用同一个长链作为参数请求短链生成服务,系统中会生成多个该长链对应的短链。
本系统采用了Redis中的布隆过滤器这种数据结构提高去重的性能。
3系统测试
3.1测试目标
软件测试是开发软件应用流程中重要的一个环节。
对于微服务框架来说,服务间不可避免地会跨服务调用。
所以每个服务在发布部署前,都需要进行相应的测试,以保证服务的可靠性以及系统整体的集成质量。
软件测试的策略有很多种,如单元测试、系统测试。
其中,单元测试可以测试单个系统服务的正确性,严格地定义服务规约,使系统问题能够在系统开发过程的就被发现。
同时单元测试可以消除系统的局部不可靠,采用自下而上的方式确保系统整体质量。
而系统测试则是针对整个系统进行测试,通过将系统与系统的需求定义进行比较,从而发现问题、解决问题。
综上所述,本章主要通过介绍本系统的开发过程中,如何通过对系统代码进行单元测试,来保证各个服务的可靠性。
3.2 原始样本数据的采集
本节将通过对系统中较为关键的两个函数——商品码加密编码函数与解码函数进行单元测试演示,介绍Golang中如何对代码进行单元测试。
另外,单元测试有一个重要指标:代码覆盖率。
代码覆盖率越高,表示测试得越全面。
在Golang中,官方推薦使用一种叫作表组测试得方法。
它与传统的单元测试思路基本相同,只是它将同类的输入和预期组合成一个表组,在同一个函数中完成测试。
本节将使用表组测试的方法完成对上述两个函数的单元测试。
首先,定义表组测试的“表”结构与编写测试用例。
分别定义加密编码函数表组测试的相关表结构与测试用例代码、解密编码函数表组测试的相关表结构与测试用例代码。
编写测试逻辑。
定义加密编码函数表组测试的测试逻辑代码、解码函数表组测试的测试逻辑代码。
查看单元测试结果。
通过运行测试命令并通过Goland的测试功能可视化测试结果,得到商品码加密编码函数与解码函数的单元测试结果。
查看代码覆盖率。
3.3系统测试过程
(1)定义测试用例
本节主要定义用户登录界面与后台管理界面的系统测试用例,用于验证系统设计与需求分析是否一致。
(2)典型用例测试结果展示
以下仅展示表2用户登录界面测试用例中,用例1、2、3的测试结果:
4 结束语
本系统采用了微服务架构,代码耦合低,故具有高扩展性。
开发者可以通过新增新的服务或接口,轻松地根据实际业务需求扩展本系统。
本设计关注严峻的伪劣商品问题,从计算机软件角度出发,通过总结市场上常用防伪手段,最终采用了成本低、效果好的二维码防伪技术,设计并实现了二维码防伪溯源系统。
同时本设计还针对目前现有的系统设计存在的问题,如系统架构耦合度高,二维码数据加密不严谨,系统安全性不高等问题进行解决。