邵毅 陈春 彭华
关键词:SpringCloud微服务;SpringBoot框架;山羊孕测
随着社会对软件系统的需求逐渐扩增,增加对事物多样化以及提高便捷的管理方式,许多企业开放自身部分产品线独立出来允许开发者的调用或维护工作之中,使得软件开发效率的提升、软件开发生态不断完善。
对孕山羊管理方面,项目组在毕节威宁山羊养殖场(艾家坪、卢虹养殖场)调研,了解到养殖场山羊信息管理相对落后,对孕山羊的管理更是处于人工管理的粗放模式,这增加了山羊养殖员工作的社会劳动必要时间。在数量大的山羊群管理上,对山羊的怀孕信息的人工管理显而易见不是完好解决方案。如今软件开发生态的不断完善,提高了各项业务功能的开发与整合,更多精细化程度的管理与流程化。鉴于以上情况,本文提出设计并实现一款基于SpringCloud的微服务山羊孕测管理系统,以保证对养殖场山羊群的孕山羊的数量和质量进行分析和管理,从而改变养殖场孕山羊信息的人工管理的粗放的状态,技术上增加一体化DevOps自动化部署的方式,实现保证系统的稳健与可动态升级维护性。
1 山羊孕测管理信息化管理概况
项目组调研5家以上毕节威宁养殖场,了解它们目前只能靠人工方式对孕山羊的数量、种类、体温、位置和事件记录进行粗放管理,无法便捷地将以往至现在的数据进行查找与分析,更不用说实现孕羊信息的智能化的报警和辅助决策。通过文献查阅,项目组发现畜牧业已开展了不少信息化管理模式的创新。项目组通过专家访谈等方式,针对试验地养殖场孕山羊的实际情况,整理试验地孕山羊管理的业务流程,以实现对孕羊关键数据统一收集和信息管理、智能报警为目的,根据孕山羊重要指标进行系统整体设计。本系统利用的技术知识领域有物联网、信息管理、大屏数据展示等。最终改善养殖场孕山羊粗放的人工管理,实现孕山羊的智慧养殖和管理。
2 SpringCloud的微服务山羊孕测管理系统架构
设计并实现基于SpringCloud的微服务山羊孕测管理系统,该系统采用服务器与浏览器(Server/Browser) 模式开发方式[1],通过maven对第三方jar包版本引入进行管理,将后端业务模块化后,开发出权限管理、山羊管理、大屏管理、文件管理、监控管理5个微服务功能模块与一个前端UI,各个模块之间通过Feign远程调用,在前端UI访问接口时候经过Spring?CloudGatway网关中心处理与Oauth2进行路由管理与授权认证。前端采用Vuejs技术[2]配合ArcoDesign(字节跳动出品)企业级设计系统进行编程实现调用后端接口,后端采用SpringBoot 编程实现接口的开发,因考虑高并发情况,将内置的Tomcat 移除替换为Un?dertow。系统数据库使用开源MySQL8.0.12利用MyBatisPlus的无侵入、损耗小特性一定程度保护操作各个模块数据的增删改查的安全性特点,通过MyBatisPlus对数据库数据的读写操作[3]。使用腾讯开源的服务治理平台北极星(简称Polar?isMesh) 将所有业务模块注册到Po?larisMesh注册中心中统一进行服务的发现管理,并对单个微服务模块进行版本标识,通过请求头标识版本进行版本访问限流负载均衡等管理。将可变配置数据放到Polaris?Mesh的配置管理功能进行管理在业务模块可动态加载配置内容变更。部署方案中使用DevOps 自动化的部署,使用KubeSphere构建的面向云原生应用的分布式操作系统,可管理Kubernetes 与内置的DevOps(Development和Operations的组合词,是一组过程、方法与系统的统称)进行自动化开发与部署[4],在KubeSphere 中监听Git仓库的代码提交后触发DevOps进行CI/CD(CI持续集成、CD持续交付)代码拉取、测试、构建和部署直至生产阶段。管理者可通过各类浏览器访问山羊孕测管理系统UI与后端所提供的功能进行交互,同时接入SpringBootAdmin在内部网络中查看各个微服务模块的运行情况。如图1所示。
2.1 SpringBoot 框架
当前使用Java进行Web开发大部分采用Spring框架进行开发,由于起初Spring+SpirngMVC+MyBatis方案開发导致需要大量的配置,因此为了简化开发,山羊孕测管理系统选择Spring旗下发出SpringBoot框架自动装配,减少配置文件的建立,带来极大方便是对各类生态组件的接入便捷,更加便于开发者专注在业务功能开发和功能的调试。
2.2 SpringCloud 微服务
微服务中每个业务模块都有一个清楚的功能边界,通常说微服务是一种架构模式或风格。每个服务都紧扣一个大业务主题来实施开发,每个服务都能够单独地部署安排到生产的实际环境,通过Gateway网关来统一管理接口的暴露。微服务可以选择独立部署方式和弹性的资源配置。每个子系统服务之间采用轻量的通信机制(HTTP) 互相沟通,进行调用完成服务模块间的通信[5]。本山羊孕测管理系统正是使用了SpringCloud微服务技术。
2.3 PolarisMesh 治理平台
山羊孕测管理系统用到了PolarisMesh治理平台,北极星(PolarisMesh治理平台)是腾讯开源的服务治理平台,内部协同共建的新一代服务发现和治理平台,已整合和替代L5 等名字服务和负载均衡系统。截至2021年底,超过90%的业务部门使用北极星,接入节点数量超过千万。主要解决了分布式架构、微服务架构中的各项管理(服务、流量、配置、故障容错和可观测性等)的问题,针对不同的技术栈和环境提供服务治理的标准方案和最佳实践。
3 基于SpringCloud的微服务山羊孕测管理系统设计
3.1 系统需求分析
基于调研分析,山羊孕测管理系统的主要业务包括5项“管理”(权限、山羊、文件、监控、大屏)。1) 权限管理,可对用户信息、权限、角色等进行管理,主要涉及用户登录状态、角色配置、登录终端类型以及登录状态是否过期;2) 山羊管理,对山羊的各项数据如体温、运动量、专家意见内容、位置、名称、编号、监控视频流以及事件记录进行管理;3) 文件管理,通过OSS存储将所有以上传媒体资源进行单独存放管理;4) 监控管理,通过对服务、缓存等数据进行监控查看服务的状态;5) 大屏管理,调用部分系统公共开放接口获取到数据,统一展示到可视化大屏[6]。
3.2 数据库设计
数据库采用MySQL关系型数据库建立高可用的集群数据库并对每个服务模块进行建库建表,所有主键均采用分布式ID生成,有效避免不同节点上数据库出现重复ID,为保障数据的可恢复性,所有数据均采用逻辑删除方式有效降低误操作带来数据不可逆。图2为部分代表性的E-R建模关系图。
3.2.1 权限管理微服务数据库设计
权限管理微服务中涉及的实体包括用户、部门、角色、日志、终端和Token令牌以及用户角色、角色权限关联表,其中E-R建模关系见图2(a) 所示。
3.2.2 山羊管理微服务数据库设计
山羊管理微服务中涉及的实体包括山羊、专家意见、事件记录以及用户的E-R建模关系见图2(b) 所示。
3.2.3 文件管理微服务数据库设计
文件管理微服务仅使用单表存储文件信息(信息主要包括:原文件名、创建时间、随机文件名称、文件格式、文件大小),这样做的目的是便于各个微服务调用。
4 SpringCloud的微服务山羊孕测管理系统实现
本山羊孕测管理系统,在权限管理、山羊管理、文件系统、大屏管理、监控管理都得到了实现,图3为部分具有代表性的用例和系统实现UI图。
4.1 权限管理实现
权限管理主要包含5项子管理(用户、角色、部门、终端、令牌),如图3(a) 所示。
1) 用户管理:用户实体的属性主要有6种(名称、角色、昵称、性别、手机号、邮箱),可根据用户实体的属性新增以及修改已有的用户信息,相关代表性代码如下:
2) 角色管理:针对每个微服务模块细粒度的功能进行权限的分配是否具备新增、编辑、修改及删除权限。实现效果如图3(d) 所示。相关代表性代码如下:
3) 部门管理:可进行新增部门、修改已有的部门数据和逻辑删除,针对每个用户进行用户的划分。
4) 终端管理:使用设计方式中策略模式开发,增加不同终端类型,如App、Web、小程序等进行区分管理,控制终端设备是否支持密码模式、刷新模式、授权码模式、客户端模式、移动端模式以及刷新时效以及令牌时效。终端每次请求经过核心客户端处理逻辑校验后请求相应资源接口,相关终端请求处理代码如下:
5) 令牌管理:可查询所有用户登录的令牌信息,其中包含Token值、终端类型、用户名、过期时间,并可强制踢出用户登录。
4.2 山羊管理实现
山羊管理功能包括山羊基本信息管理、事件记录管理、专家意见管理等。如图3(b) 所示。
1) 山羊基本信息管理:针对每只山羊的编号、昵称、性别、传感器编号、监控地址、运动量、体温等信息进行管理,可新增以及修改已有信息并,并通过Socket订阅实时广播数据变更通知[7]。
2) 事件记录管理:对每只山羊每天由传感器所得到关键的数据进行记录并可自定义当日的事件进行人工录入记录以及删除事件记录。
3) 专家意见管理:专家可进行每只山羊的情况进行内容的编写、修改建议。
4.3 文件系统实现
文件系统针对各个微服务所上传的媒体数据,进行编号记录文件原名、类型、大小、上传时间等信息进行管理,考虑到功能的单獨维护和扩展,针对文件系统功能抽离独立做成一个子系统,并集成AWS-S3(是Amazon提供一款对象级存储)SDK包,兼容其他厂商OSS以及开源MinIO对象存储系统,其关键上传代码如下:
4.4 大屏管理实现
通过Vuejs技术制作大屏显示模板,通过Axios发起数据请求从已有各个微服务中获取可公开数据呈现到大屏显示模板中。
4.5 监控管理实现
监控管理功能包括服务监控、流量监控、缓存监控等。如图3(c) 所示。
1) 服务监控:将各个服务接入到Spring Boot Ad?min监控功能中,进行可视化的针对每个服务的Jvm、CPU、内存、网络状况、健康度、运行指标、日志信息、线程状况等一系列信息的实时查看。
2) 缓存监控:通过集成Radis缓存提高系统的高速缓存能力[8],并获取Radis信息,将其进行可视化展现出来查询内存的占用、key数量、已连接客户等各项指标。
3) 流量监控:通过PolarisMesh流量管理对限流策略、鉴权策略、负载均衡策略等进行统一管理。
5 结论
项目组设计与实现了一款基于SpringCloud微服务的山羊孕测管理系统,将各个功能划分为5个服务管理模块(权限、山羊、文件、监控、大屏),并将每个模块统一使用PolarisMesh治理平台进行注册、发现、配置等管理,系统采用IDEA与VSCode工具进行开发。有效地提高开发的便捷。通过KubeSphere的DevOps高效地提高了开发中部署测试到生成可用环境所需做的重复内容。本系统能提高对孕山羊多方面数据的收集管理,降低养殖场人力与时间的成本,最终实现了孕山羊的信息化管理,助力智慧畜牧。