软件设计开发
本栏目责任编辑:谢媛媛
一种分布式微服务架构系统缓存解决方案
李宁1,张轶昀2
(1.安徽财贸职业学院,安徽合肥230601;2.中国农业银行软件开发中心,北京100124)
摘要:该文叙述了一种基于微服务架构的分布式系统双缓存解决方案,经过实践,该方案对分布式系统中大数据量参数查
询交易产生了良好的性能提升作用。关键词:微服务;应用缓存;公共缓存中图分类号:TP393
文献标识码:A
文章编号:1009-3044(2020)36-0073-02
开放科学(资源服务)标识码(OSID):
A Cache Solution for Distributed Microservice Architecture System LI Ning 1,ZHANG Yi-yun 2
(1.Anhui Finance &Trade Vocational College,Hefei 230601,China;2.Software development center of Agricultural Bank of China,Beijing 100124,China)
Abstract:This article describes a distributed system double cache solution based on microservice architecture.Through practice,the scheme has a good performance improvement on the query transa
ction of a large amount of data in a distributed system.Key words:microservice;application cache;public cache
前后端分离的设计方案,有效提高了系统的开发效率,同时使得微服务架构中的服务共享成为可能,目前正在成为主流系统开发架构之一。本文基于银行财会综合管理系统,讨论一
种基于微服务架构的分布式系统缓存解决方案[1]
财会综合管理系统由公共应用、核算会计、管理会计、预算、估值、合同等十几个子系统构成。各个子系统均采用前后端分离架构,SpringBoot 开发,系统部署及数据库均相互独立。为使用户对分布式无感,所有子系统进行了统一的微服务发现中心地址配置。如图1所示:前端发起的交易,通过统一网关,交易码被转换为微服务识别码,经微服务发现中心转发到对应的后台服务器,后台响应报文原路反向回传前端。系统主要使用了扩展的Spring Cloud 注解,Eureka 服务注册发现组件(服务注册发现、服务续约、获取注册列表信息、服务下线、服务剔除)、Ribbon 负载均衡组件、Feign 面向接口调用组件、Zuul 微服务应用网关组件、Hystrix 断路器组件、Sleuth 全链路采集组件、Redis 缓存集以及接口描述组件Swagger 。应用系统镜像使用K8S 部署。
图1系统结构图
除公共应用外,其他子系统均有自己明确的业务属性及交易特点。公共应用为所有登录子系统的用户提供统一鉴权、会话保持、权限控制以及公共参数的取用。公共参数主要包括机构数据、员工数据、用户数据、财会产品、会计科目、汇率等适用于全平台的基础数据。各个子系统与公共应用间存在大量的参数查询交易。例如财会产品维护时,产品所属部门、所属科目数据在子系统仅保存ID 号,查询反显时需要从公共应用查询中文名称。
微服务架构,有效提高了交易的可复用性,但同时增加了网络损耗。由于财会系统数据量大,运算复杂的特点,大数据量的参数访问及需要控制用户权限的数据查询交易对整体系统的性能提出挑战。为了改善系统效率,本系统设计并应用了一种双缓存策略。
所有子系统分别配置应用缓存和公共缓存两组Redis 服务器集[2]的访问路径,每组服务器内部互为三-三主备。应用缓存用于存放子系统私有数据的缓存信息,由子系统自行搭建。公共缓存由公共应用系统搭建,并进行写入与更新,各子系统仅拥有读权限。如图2所示:子系统发起查询交易时,先访问应用缓存,如未命中,则访问公共缓存,仍未命中,才通过面向接口调用组件Feign ,发起交易,经微服务注册中心中转至公共应用后台服务。公共应用响应后,如该查询交易已配置缓存加载,则会将本次查询内容加载入公共缓存,缓存Key 通常使用逻辑数据库表主键或主键对。系统使用SpringBoot 注解类并进行了扩展,使得缓存加载配置仅需为指定的查询交易添加@Ca⁃cheable 注解,指定使用的缓存名以及缓存id 。
收稿日期:2020-06-30
作者简介:李宁(1981—),女,天津人,讲师,学士,研究方向为计算机应用技术与软件开发;张轶昀,女,高级工程师,中国农业银行
软件开发中心,应用开发一部。
73
本栏目责任编辑:谢媛媛
软件设计开发
Computer Knowledge and Technology 电脑知识与技术第16卷第36期(2020年12月
)
图2系统运行图
分布式和微服务的关系由于为查询类交易在缓存未被命中时添加缓存,缓存未被访问时间超过阈值才清除,可能导致动账类交易对数据的修改,在缓存失效前无法被重新加载。对于一些热表数据,可能存在全天驻留缓存的情况,可能产生以下现象:用户在公共应用系统对机构数据进行了修改,但由于缓存中存在原数据,子系统查询交易依然返回修改前数据,由此出现缓存脏读现象。以上情况可以通过两种方案解决:1)每日批量;2)实时刷新。
为提高缓存命中率,公共应用系统每日批量于每天早上5点进行参数预读入,先清空缓存,自动发起机构、员工、财会参数等常用数据的查询交易,进行缓存预加载。此举不仅可以在系统正式服务时拥有良好的缓存命中率,且可解决缓存脏读问题。经实测,系统每日8点正式对外提供联机服务,日常状态下,双缓存命中率可达到95%以上。此方法适用于可容忍T+1时效的系统数据。对于实时性要求很高的数据,如汇率,采用实时刷新方式。在修改了该数据的动账交易结束后强制刷新
缓存内容。出于对整体性能的考虑,本系统对交易进行分类,
综合运用了两种方法。
图3缓存效果图
为系统添加双缓存后,系统的整体性能有了显著提高。以4000条用户权限范围内的机构数据下载为例(机构视图表数据量约50万,每条记录约50个属性,大部分属性需要子表翻译),添加缓存前,测试环境响应时间约2分钟,添加缓存后同环境响应时间降至20s 以内。
参考文献:
[1]黄向平,彭明田,杨永凯.基于内存映射文件的高性能库存缓存系统[J].电子技术应用,2020,46(7):113-117,126.
[2]宁方美,贺雪梅,牟晋娟.SpringBoot 集成Redis 缓存技术在企业一卡通系统中的应用[J].电子技术与软件工程,2019(24):133-134.
【通联编辑:唐一东】
(上接第63页
图7实际实现效果
而且为了让用户体验更好,本系统采用了Ajax 技术,即通过JavaScript 语言与服务器进行少量数据交
换,可以让网页在不重新加载的前提下实现小部分内容的异步更新,从而提高系统的使用质量。4.3登录后的缓存设计
为了保存用户在注册或者登录后的缓存信息,本系统采用
的是cookie 的页面缓存技术。在用户进行页面登录后,后台通过cookie 保存了登录的账号与密码,但是保存的时长规定为1小时。使用者可通过这个缓存技术,在一小时内自由登录该网站而不需要进行二次登录。而且用户如果想删除这个cookie ,可通过退出按钮进行退出。实现的操作是通过获取比当前时间time()函数还要前的时间进行删除。
5测试
5.1测试环境
在Chrome 浏览器进行测试,通过WampServer 构建本地Apache 服务区,进入到本地域名进行网站登录测试。5.2测试步骤
在Chrome 浏览器输入网址,进入登录界面,进行注册/登录
操作。完成操作后,进入主界面,在主界面中有讨论区、娱乐游戏区、调换宿舍申请、宿舍报修申请的功能模块选择。完成既定的目标后,退出系统,完成此次操作。
6结束语
在这次的系统设计中,出现了几个难以解决的问题。比如学生端的讨论区中,如何实现讨论帖子中的楼中楼的逻辑思路。又或者是在管理员端中,如何通过Excel 文件上传,批量获取其中的。这些问题困扰了许久,最终通过团队成员的努力,最终实现了系统的设计,完成了预期的目标。
本次系统设计也将会应用于本校进行投入使用,让学校的宿舍管理更加方便、快捷。
参考文献:
[1]胡子豪.学生宿舍管理系统分析与设计[J].信息与电脑(理论版),2018(21):82-83.
[2]曾玉红.基于B/S 高校宿舍管理系统的设计与实现[J].电脑知识与技术,2018,14(36):60-62.
[3]桑一梅,汝心怡.基于ThinkPHP 的学生宿舍管理系统的开发[J].电脑知识与技术,2019,15(25):52-53.
[4]胡橙凤.基于B/S 架构高校宿舍管理系统设计与实现[J].电脑知识与技术,2020,16(6):61-62,69.
[5]欧畅.宿舍管理系统的前端设计与实现[J].湖北农机化,2020(2):186-187.
【通联编辑:谢媛媛】
74

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。