热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

技术应用_Redis在复杂业务ERP产品中的技术应用

本文由编程笔记#小编为大家整理,主要介绍了Redis在复杂业务ERP产品中的技术应用相关的知识,希望对你有一定的参考价值。作者丨
本文由编程笔记#小编为大家整理,主要介绍了Redis在复杂业务ERP产品中的技术应用相关的知识,希望对你有一定的参考价值。



作者丨探求者大兵

文字丨2932字,阅读用时3分钟

   上一篇主要是讲了消息中间件MQ在实际项目中的具体应用,解决遇到的一些复杂问题。

   在实际的复杂业务ERP项目中,随着用户访问量和数据量变大,我们的系统架构变得越来复杂,导致系统难以正常运行,为了支撑复杂的系统正常运行,根据具体业务使用缓存数据库Redis是必不可少的。

   在做技术架构设计中,需要根据具体的业务,要解决遇到的非功能需求,才考虑引入缓存数据库Redis。

   下面我从已经上线的ERP系统中,来复盘总结引入Redis的必要性和具体如何应用的,希望对大家有一定的参考和启发意义。

    我主要从以下几个场景来进行阐述说明:

一、Redis缓存会话共享

(1)问题背景

    ERP系统为了支持用户的高并发和高可用访问,使用了硬件负载均衡器F5做应用负载均衡,应用服务器Tomcat集群做具体的业务并发处理。

    对于用户登录ERP系统的会话信息,采用了会话粘滞的方式保持会话。

Redis在复杂业务ERP产品中的技术应用

(2)问题描述

    ERP系统的集群部署,采用的F5负载均衡,虽然使用的会话粘滞这种方式,但是有时候会出现一些负载不均衡的问题。

    如果一个服务器节点压力过大,那么负载到这个节点的用户请求一直会访问这节点,而另一个节点服务器压力不是很大,资源没有得到充分利用。

    如果其中一个节点宕机了或网络不稳定,负载均衡器F5负载这个节点的用户会转移到另一个节点,会提示登录会话超时,用户需要重新登录一遍ERP系统。

   如果是主从模式的缓存同步架构,会进行缓存同步会话,那么即使请求转移到另一个节点,用户还是能正常访问的,没有违和感。

(3)问题分析

    由于负载采用的是会话粘滞方式,一旦一个节点出现压力过大时,这个节点的用户请求就会一直转发到这个节点,对于这部分用户来说系统就容易出现卡顿感。

    如果是服务器直接宕机或网络中断,那么下次该服务器节点的用户请求会转发到另一个服务器节点,这个新节点没有存储该用户的登录会话信息,就会出现登录失效或超时的提示,用户只能重新登录,在新的服务器上创建会话缓存信息。

    如果是主从缓存同步架构模式,虽然请求转移到另一个节点没有什么问题,但是对于网络来说开销会随着节点的扩展而变大。

(4)问题解决

    要根本解决会话粘滞带来的问题,就要采用会话共享的模式,在负载均衡端考虑采用轮询路由策略。

    可以考虑使用缓存数据库Redis或Memcache实现缓存会话共享,从而让各个节点都可以从该缓存里直接获取会话。

    缓存会话共享模式下,即使有一台服务器节点宕机了,这个节点的用户请求由负载均衡服务器转发到其他的节点,用户无需重新登录系统,影响体验无感。

     即使在主从缓存同步架构模式下,也不会存在各个节点会话不一致的情况出现,同时节点扩展越多,网络之间的缓存同步开销也就不复存在了。

Redis在复杂业务ERP产品中的技术应用

二、Redis缓存热点数据

(1)问题背景

    应用服务集群架构开始采用的是主从架构模式,ERP系统的元数据,配置参数,公用数据等,都是通过主节点的缓存同步功能实现各个从节点的缓存刷新,从而使各个节点缓存数据保持一致。

Redis在复杂业务ERP产品中的技术应用

(2)问题描述

    主从模式的缓存同步架构,主从节点之间会缓存同步通信,有时候网络会不稳定,ERP系统会出现个别节点缓存数据跟其他节点数据不一致的情况。

    比如,缓存的单据模板信息不一样,有的节点缓存的这个单据有职员字段,另一个节点没有职员这个字段,导致用户有时候看不到这个单据上某个字段数据。

(3)问题分析

    由于节点之间的缓存同步依赖于网络的稳定性,所以网络有时候跌宕不稳定会导致个别节点缓存数据同步不一致,有的节点同步了最新数据,有的节点依然没有同步数据。

    比如,上面问题描述的单据模板显示字段不一样,另外如果是缓存同步会话,那么可能会出现用户访问系统时提示用户重新登录系统或会话超时的问题。

(4)问题解决

    在主从模式的缓存同步架构下,如果采用Redis或Memcache缓存公用数据或热点数据,各个节点不再进行缓存数据同步,这样就不会存在数据不一致的情况出现。

    此时的主节点服务器相当于一个授权中心,只要从节点每次一启动,就要向主节点申请启动ERP系统服务的授权。

Redis在复杂业务ERP产品中的技术应用

三、Redis分布式缓存锁

(1)问题背景

    ERP系统架构如果开始采用单体架构模式,那么只用本地缓存锁来控制业务并发操作就可以了。

    比如,多组织模式下的结账或反结账,电子会计档案归档,共享系统的派单等操作都可以使用本地缓存锁控制业务并发重复操作。

Redis在复杂业务ERP产品中的技术应用

(2)问题描述

    在单体架构模式下,本地缓存锁是可以控制住某个组织某个账簿同时重复结账或反结账操作以及其他关联业务操作的。 

    如果ERP系统放在集群架构下,那么多用户可以同时对同一个组织和账簿进行结账或反结账并发操作,以及可以并发操作关联业务。

    比如,用户A进行A01组织下的A001账簿进行结账业务操作,可能需要花费稍微长的时间,此时用户B也可以进行A01组织下的A001账簿结账业务或者用户B可以进行反记账业务操作。

(3)问题分析

    由于ERP系统是集群部署的架构模式,本地缓存锁是控制不住在多个节点下并发操作同一项业务,因为各个节点都有本地缓存锁,只对本服务器并发操作有控制作用。

(4)问题解决

    ERP系统采用Redis或Memcache作为分布式架构下的缓存锁,可以控制住在各个服务器节点下多用户对同一业务的并发操作,从而实现业务并发防重操作。

    比如,结账或反结账,电子会计档案的防重归档操作和共享系统的防重派单操作。

ERP系统结账加锁防并发操作如图所示:

Redis在复杂业务ERP产品中的技术应用

共享系统的并发防重派单操作如图所示:

Redis在复杂业务ERP产品中的技术应用

电子档案归档防重操作跟上面的采用Redis分布式缓存锁处理都差不多,就不在列举了。

四、Redis异步缓存进度

(1)问题背景

    在ERP系统中,用户有时候会做些批量业务操作或计算业务操作,比如单据批量导入或导出,业务报表的计算,财务和业务子系统的月底结账等。

  Redis在复杂业务ERP产品中的技术应用

(2)问题描述

    用户进行单据大批量导入或者结账操作时,都要花费很多时间,由于界面没有进度提示,不清楚业务进行到什么情况,交互性比较差。

   特别是有时候单据或基础数据大批量导入时,页面直接就会卡死,有时候令用户很崩溃。

(3)问题分析

    由于单据批量导入或结账操作都是长事务操作,所以服务器响应时间过长,对于用户来说只能等待。

    由于在用户界面上没有业务执行进度提示,所以用户了解不到业务执行情况,用户体验感就比较差。

    用户经常用的导入页面卡死,主要是采用了同步提交和同步后台处理操作,浏览器端只能长时间等待响应,显示给用户的现象就是页面卡死不动

(4)问题解决

    ERP系统采用Redis或Memcache可以实现对各个长事务业务操作整个过程的进度记录保存,及时向用户展示业务执行的进度情况。

进度显示如下图所示:

Redis在复杂业务ERP产品中的技术应用

说明:单据在批量导入的时候,采用的是同步提交方式, 在服务器的后台程序里单独开了一个后台线程用于单据导入的处理,实现异步导入处理,然后同步提交的请求处理后立即响应给用户,这样用户就不会觉得页面卡死。

    同时,在用户当前页面定时的提交进度刷新请求,通过应用服务器后台从Redis缓存数据库里去获取当前单据数据导入的执行进度。

    这样用户就可以看到当前业务执行进度情况,用户体验性比原来好了很多,更具有交互感,减少了用户等待的忧虑。

如下图:

Redis在复杂业务ERP产品中的技术应用

    结账的操作也是类似,如果用户把当前操作的页面关掉后,再也看不到当前页面业务执行进度情况,但是用户可以从公用业务执行进度列表上查看到各个长事务业务执行进度。

    总之,redis可以在负载均衡时用来做缓存会话共享方便优雅扩容应用,分布式缓存锁实现并发防重操作,可以做公用数据和热点数据缓存提高系统性能,也可以做业务执行进度的中转站提高用户体验性。



推荐阅读
  • 分布式大型互联网企业架构!
    2019独角兽企业重金招聘Python工程师标准摘要:开发工具1.EclipseIDE:采用Maven项目管理,模块化。2.代码生成: ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 什么是网关服务器初学linux服务器开发时,我们的服务器是很简单的,只需要一个程序完成与客户端的连接,接收客户端数据,数据处理,向客户端发送数据。但是在处理量很大的情况下,一 ... [详细]
  • http:simple-is-better.comnews1047Firefly是免费、开源、稳定、快速扩展、能“热更新”的分布式游戏服务器端框架,采用Python编 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
  • 浅析对象 VO、DTO、DO、PO 概念
    作者|CatQi链接|cnblogs.comqixuejiap4390086.html前言由于此订阅号换了个皮肤,导致用户接受文章不及时。读者可以打开订阅号「Web项 ... [详细]
  • PartI:取经处: http:www.ramkitech.com201210tomcat-clustering ... [详细]
  • celery 爬虫使用
    简介celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。它由三部分组成,消息中间件, ... [详细]
  • 一,织梦后台后台设置进入系统后台,在[系统基本参数]下面的性能选项卡当中,关于memcache进行如下配置:cfg_memcache_enable:是否启用memcache缓存,如果为否(N) ... [详细]
author-avatar
ESC咻咻_973
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有