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



推荐阅读
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 深入解析Dubbo:使用与源码分析
    本文详细介绍了Dubbo的使用方法和源码分析,涵盖其架构设计、核心特性和调用流程。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 深入探讨:Actor模型如何解决并发与分布式计算难题
    在现代软件开发中,高并发和分布式系统的设计面临着诸多挑战。本文基于Akka最新文档,详细探讨了Actor模型如何有效地解决这些挑战,并提供了对并发和分布式计算的新视角。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
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社区 版权所有