《工业控制计算机》2018年第31卷第11期
进销存管理系统是ERP(Enterprise Resource Planning)系统的重要组成部分,它主要涉及到企业的采购、销售和库存三个核心流程,并将其整合到一起。随着企业的发展壮大,企业可能会开展新的业务,这就需要为其配置相应的管理服务。同时,企业也可能需要对原有系统进行一些服务的升级和优化,这就需要原有系统具有高可扩展性、高灵活性。
传统的单体架构,由于逻辑过于耦合,在后续的改进中很有可能出现牵一发而动全身的窘境[1]。而微服务架构的出现,可以有效地解决此类问题。通过微服务架构,可以将复杂的系统拆分为多个相对简单的小问题,为每个小问题开发相应的小服务,每个小服务独立运行。以业务需求为中心,小服务之间可通过轻量级
通信机制来协调,从而实现了系统的高灵活性、高可扩展性[2]。本文提出了以微服务架构去解决企业进销存管理系统在后续的升级、扩展和维护方面的问题,研究了根据业务特点拆分微服务的细节,实现了Docker容器下的微服务的部署[3]。
1主要技术框架
SpringCloud是一系列框架的有序集合,这些框架致力于分布式服务治理,它本身不会提供具体功能的操
作,更专注于服务之间的通讯、熔断、监控,它有很多组件来支持一套功能。本文主要使用Eureka、RestTemplate+Ribbon和Hystrix。
1.1Eureka
SpringCloud Eureka使用Netflix Eureka来实现服务的注册和发现。Eureka使用的是Java程序语言编写的,所以它特别适合用Java实现的微服务系统。Eureka既是客户端组件也是服务端组件,在具体使用时通过注解来区分。此外,Eureka不仅仅适合Java实现的微服务,也支持非Java语言开发的微服务,这是因为Eureka的服务端组件向开发人员提供了较为完善的REST风格的API,这一特性给开发人员提供了多种技术栈的选择。Eureka的架构如图1所示。
Eureka服务端,即服务注册中心,它可通过多个注册中心的互相注册实现高可用配置,当注册中心的服务过低时,Eureka 会转入自我保护模式。Eureka客户端,即服务提供者,客户端通过配置注册中心的地址,在微服务启动时,Eureka客户端根据配置的地址向注册中心注册自身提供的服务,为避免注册中心的服务不可用的发生,客户端需要周期性地向注册中心发送心跳来表明自身服务正常。
1.2RestTemplate+Ribbon
1)RestTemplate是Spring提供的用于访问Rest服务的客户端,它提供了多种访问远程HTTP服务的快捷方法,大大提高了开发人员的效率。
2)Ribbon是一款云中间层服务的开源项目,由国外的Netflix发布和维护,主要的目的是提供客户端负载均衡算法, Ribbon组件提供了一系列完善的配置项,用户可根据需要自行选择。即Ribbon是一个客户端负载均衡器,可以很好地控制HTTP和TCP的一些行为。用户可通过开启@LoadBalanced 注解,Ribbon会自动根据某种规则(如简单轮询和随机连接)去访问服务提供者,此外用户还可以使用Ribbon实现自定义的负载均衡算法。
基于SpringCloud微服务架构的进销存管理系统的设计与实现
周永圣侯峰裕孙雯杨磊张小贝
(上海大学通信与信息工程学院,上海先进通信与数据科学研究院,上海200444) Invoicing Management System Based on SpringCloud Microservice Architecture
摘要:企业资源计划(Enterprise Resource Planning)是当前流行的企业信息化管理模式,其中整合采购、销售和库存的管理系统是其重要组成部分。然而,随着企业自身的发展壮大,进销存管理系统也会越来越笨重和庞大。为此,引入基于SpringCloud的微服务架构,对系统进行总体架构设计与子服务的拆分,最后使用Docker容器部署各个子服务,实现了系统的小型化和简单化,便于系统根据企业业务的发展进行扩展。为企业资源计划进程中遇到的问题提出了一种解决方案,有机会应用于未来企业信息系统的架构中。
关键词:企业资源计划,SpringCloud,微服务,Docker
Abstract押The microservices architecture based on SpringCloud is introduced to design the overall architecture of the system and the separate sub-services熏and uses Docker container to deploy sub-services熏to achieve the system's miniatur⁃ization熏simplification熏and facilitate the system according to the development of enterprise business to extend in this paper.A solution to the problems encountered in the enterprise resource planning process is proposed and has the opportunity to be applied to the architecture of future enterprise information systems.
Keywords押enterprise resource
planning熏SpringCloud熏microservice熏Docker
springcloud怎么读音图1Eureka架构
129
基于SpringCloud微服务架构的进销存管理系统的设计与实现1.3Hystrix
在微服务架构中,为了保证服务的高可用性,单个服务通常
会集部署。如果这些服务之间通信时由于网路问题或者自身
的不完善导致服务调用失败,那么调用这个服务就会出现线程
阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被
消耗完毕,导致服务瘫痪。由于服务之间的依赖性,故障会传播,
从而对整个微服务架构系统造成服务故障的“雪崩”效应。
Hystrix通过断路器机制解决上述问题。Hystrix是Netflix
的开源组件,SpringCloud对这一组件进行了整合,当较低层的
服务出现故障时,此时对其调用失败的频度达到一个阈值
(Hystrix是5s20次),断路器就会打开。为避免故障连锁反
应,使用fallback穴雪方法对其直接返回一个固定值。
圆系统设计与实现
针对进销存管理系统的特点,并结合微服务架构的拆分原
则,将其拆分为三个基础服务和一个接入层服务,三个基础服务
配有相应的数据库,最后使用Docker容器实现了服务的独立部
署运行[4]。
2.1整体架构
系统的整体架构如图2所示。系统整体分为用户服务、商品服务、客户服务和一个接入层服务。用户服务作为一个基础服务,主要关注于与用户相关的数据操作,主要提供用户管理、角管理、系统日志、修改密码和安全退出五个业务功能。其中系统日志存储了用户操作系统的相关记录,将其归为用户服务。
商品服务专注于商品流通数据的处理,提供进出货、商品报损、商品报溢、库存报警、采购统计、销售统计和进/退货单据查询业务功能。客户服务主要提供客户管理、供应商管理、销售出货、客户退货和客户进/退单据查询业务功能。用户直接操作的是接入层服务,接入层服务作数据聚合。
图2进销存管理系统的整体架构
2.2数据库设计
根据微服务架构的拆分,数据库的设计是与三个基础服务相匹配的。
1)用户服务设计的数据库如图3所示。用户表存储用户信息,角表存储角信息,用户角表通过外键关联存储用户的角信息,权限菜单表存储菜单信息,角菜单表通过外键关联存储角拥有的菜单权限。
2)商品类型表存储商品所属类别信息,商品表存储商品信息,通过外键关联于商品类别表;报损单表记录商品的报损信息,报损单商品表记录具体报损的是哪些商品,通过外键关联于报损单表;采购单表记录商品的采购信息,采购单商品表记录采购的具体商品,通过外键关联于采购单表;退货单表记录企业向供应商的退货信息,退货单商品表记录退货的具体商品,通过外键关联于退货单表;报溢表记录商品的溢出信息,报溢单商品表记录溢出的具体商品;商品单位表记录商品的单位信息。
3)客户数据库表如图4所示。客户表记录企业的客户信息,客户退货单表记录客户退货信息,通过外键关联于客户表,客户退货单商品表记录退货单的具体商品,通过外键关联于客户退货单表。
图4客户数据库表
2.3微服务的实现和部署
基础服务的实现使用的是SpringBoot+MyBatis,Spring⁃Boot的自动化配置可以帮助开发人员省去很多繁杂的配置,更为重要的是SpringCloud是基于SpringBoot的,使用它可以方便地使用SpringCloud的组件。每个服务采用MVC的设计模式,分为控制层、服务层和数据访问层[5]。其中基础服务的数据访问层直接与MySQL数据库相连,接入层的数据访问则通过
RestTemplate发起HTTP请求到三个基础服务。系统的访问流程如图5所示。(下转第133页
)
图3用户服务数据库表
130
《工业控制计算机》2018年第31卷第11期
(上接第130页)
图5
系统访问流程图
服务使用安装在阿里云中的Docker 容器进行部署,部署前需要修改每个服务的application.properties 配置文件,将配置文件中的注册地址改为Eureka 服务端的地址。修改完成后将它们打包成jar 文件上传至阿里云服务器,编辑Docker 容器的Dockerfile 文件,输入“docker build -t ”命令生成镜像,通过“docker run -d -p 8087押8087-name goodsService -link mymysql押mymysql 5f5ccdc8aedc (mysql 镜像Id )”命令在镜像生成的容器中运行服务,此时服务会根据配置文件中的Eu⁃
reka 的注册地址进行注册。
接入层服务以同样的方式使用Docker 部署,区别在于它本身不作为服务提供者向Eureka 注册中心注册自己。整个系统运行成功的效果如图6所示。
图6系统效果图
3结束语
微服务架构具有独立部署、独立技术栈、低复杂度等特性,十分适合今后越来越庞大的系统。对微服务的学习和研究还处于初级阶段,后续学习将对其进行进一步的优化,比如搭建一个ELK 日志系统,统一管理在不同服务器上的日志信息,以期系统更加完善。
参考文献
[1]洪华军,吴建波,冷文浩.一种基于微服务架构的业务系统设计与实
现[J ].计算机与数字工程,2018,46(1):149-154
[2]马雄.基于微服务架构的系统设计与开发[D ].南京:南京邮电大学,2017
[3]刘先纺.基于Dubbo 的网上订餐系统[D ].广州:华南理工大学,2016[4]李秋池.基于微服务架构的促销系统的设计与实现[D ].南京:南京大学,2017[5]李洋.SSM 框架在Web 应用开发中的设计与实现[J ].计算机技术与
发展,2016,26(12):190-194
[收稿日期:2018.6.20
]
穴lockKey熏timeSeconds熏
TimeUnit.SECONDS雪鸦
return true鸦妖
else 邀
return false鸦妖
妖
3结束语
本文主要设计和实现了自助结算餐台系统,实现了就餐者的高效就餐,还能让就餐者了解自己的饮食结构,更具针对性的搭配用餐。目前该平台的研发已经全部完成,正在调试改进中。
参考文献
[1]陈志辉,王颖纯,刘燕权.基于物联网环境的图书馆RFID 技术应用现状的研究[J ].情报杂志,2015,34(5):196-201,189
[2]杨柳.中国餐饮产业竞争力研究[D ].北京:北京交通大学,2007
[3]温晓丽,苏浩伟,陈欢,等.基于SpringBoot 微服务架构的城市一卡通手机充值支撑系统研究[J ].电子产品世界,2017,24(10):59-62[4]李代立,陈榕.WebSocket 在Web 实时通信领域的研究[J ].电脑知
识与技术,2010,6(28):7923-7925,7935
[5]朱亚兴,余爱民,王夷.基于Redis+MySQL+MongoDB 存储架构应用[J ].微型机与应用,2014,33(13):3-5,9[6]屈展,李婵.JSON 在Ajax 数据交换中的应用研究[J ].西安石油大学学报(自然科学版),2011,26(1):95-98,122[7]彭楠.基于Java 和webSocket 在线门诊系统设计与实现[D ].北京:
北京工业大学,2017
[收稿日期:2018.7.16
]
图4
Redis 数据库与各数据库之间的关系
133
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论