今日分享丨微服务架构下查询数据缓存策略

news2024/11/14 15:12:16

引言

随着企业业务规模的扩大和复杂度的提升,微服务架构因其高可用性、可扩展性和易于维护的特性,逐渐成为现代软件开发的首选架构模式。然而,微服务架构带来的分布式特性也增加了数据访问的复杂性和延迟。特别是业务查询领域,一方面存在跨微服务的查询需求,如MRP运算涉及销售、采购、库存、生产等不同微服务的数据查询,另一方面复杂的业务查询性能较慢,如包含未记账凭证的财务账表查询,同时,终端用户查看的查询结果需要分页显示,甚至随时对其进行排序、筛选、分组汇总等操作。为了提高系统性能,减少数据库压力,并加快用户响应速度,合理设计并实现查询数据缓存方案显得尤为重要。本文将探讨在微服务架构下,如何有效实施查询数据缓存策略。

微服务架构与缓存概述

微服务架构将大型应用程序拆分成一系列小的、自治的服务,每个服务运行在其独立的进程中,通过轻量级通信机制(如HTTP REST API)进行交互。这种架构模式有助于团队独立开发、测试和部署,但同时也增加了服务间数据共享和同步的复杂性。

缓存是一种存储数据以备将来请求快速访问的技术。在微服务架构中,缓存能够显著减少对数据库的直接查询,降低网络延迟,提高系统响应速度,并减轻数据库负担。

查询数据缓存策略选择

需要缓存的查询数据主要包括:查询的上下文、查询结果数据,其主要临时存储策略包括数据库存储、本地内存缓存、本地文件缓存、分布式缓存、关系型内存数据库缓存等几种方式。

数据库存储

在查询所属微服务对应的数据库中创建实表存储查询结果,在查询功能关闭或查询数据过时后清除数据/表,因异常退出等各种原因导致历史查询数据清除不是那么彻底,需要配套定时清除机制。该策略因与查询的业务数据在同一个数据库中,查询计算性能比较好,也能很好的支持分页、排序、筛选、分组汇总等二次加工场景。但因其对业务数据库干扰大,在大量并发查询下会造成数据库表数量以及数据库存储空间迅速膨胀,轻则造成业务阻塞,重则造成数据库崩溃,因而仅适用于查询并发量小、业务系统不大的场景。

本地内存缓存

在每个微服务实例内部使用内存作为缓存,该方案内存数据结构设计要求较高,需要通过代码实现查询结果的分页、排序、筛选、分组汇总等场景。该策略优点是数据移动少,访问速度快,适用于数据量不大、访问频率高的场景。缺点是实现有一定复杂度,对内存需求比较高,容易造成内存溢出,对业务系统造成重大影响,同时需要针对微服务集群部署做处理,如保持应用访问粘性或路由处理。

本地文件缓存

在每个微服务实例内部使用本地存储作为缓存,该方案同本地内存缓存一样,需要编码实现查询结果的分页、排序、筛选、分组汇总等场景,对数据结构、文件存储结构设计要求较高。该方案一定程度上能够解决本地内存缓存的内存溢出问题,可以与其配合使用,比如根据可用内存情况,在内存和本地存储中协调数据缓存。该方案适用于数据量不大、访问频率较高的场景。该方案缺点是实现复杂,对存储读写性能要求高。

分布式缓存

使用分布式缓存中间件,如Redis、Memcached等,提供跨多个微服务实例的共享缓存服务,但对于查询结果的分页、排序、筛选、分组汇总等场景,仍需要编码实现。适用于高频次访问、小批量数据缓存场景,能够有效解决高可用性问题。缺点是增加了系统的复杂性和运维成本,且对大量缓存数据的分页、排序、筛选等场景性能较低。

关系型内存数据库

关系型内存数据库,是指提供关系型数据模型及SQL访问接口的内存数据库,如VoltDB、H2、TimesTen、Ignite等。使用关系型内存数据库存储查询结果,能够解决使用传统数据库表频繁删除、查询业务耦合资源冲突等问题,并且性能更优。适合大数据量、高并发等查询缓存场景。该方案实现相对简单,但是增加了内存数据库的运维成本。

查询数据缓存实践

浪潮inBuilder 查询平台,支持针对不同的查询场景,通过可配置的方式,支持数据库存储、本地内存缓存、分布式内存缓存、关系型内存数据库等多种缓存策略。

在关系型内存数据库策略下,采用分布式关系型内存数据库,有效提升了复杂、大数据量、高并发业务查询的性能,并大大减轻了业务库的压力。

结论

在微服务架构下,合理设计和实施查询数据缓存方案是提升系统性能、降低数据库压力的关键。通过选择合适的缓存策略、应用先进的缓存技术,并结合实际业务场景进行调优,可以显著提升系统的整体表现,为用户提供更加流畅、高效的服务体验。未来,随着技术的不断进步和业务的持续发展,缓存方案也将持续优化和完善,以适应更加复杂多变的业务需求。


欢迎大家积极留言共建,期待与各位技术大咖的深入交流!

此外,欢迎大家下载我们的inBuilder低代码平台开源社区版,可免费下载使用,加入我们,开启开发体验之旅!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HIS系统成品|HIS系统搭建|医院HIS系统开发

在医疗信息化的浪潮中,医院信息系统(HIS)的开发功能分析成为关键。本文将探讨如何通过功能分析构建一个高效、智能的HIS系统,以满足现代医院的需求,并提升医疗服务质量。 1、HIS系统功能分析的必要性 在医疗行业中&am…

基于java的进销存管理系统设计与实现

需求分析 进销存主要是帮助商业企业全面有效管理采购、销售和库存,软件适用于需要进行采购管理,销售管理以及库存管理的所有商业企业。 进销存系统的产生和发展情况 进销存软件是一款通用性极强的商业企业进销存管理系统,软件囊括了商业企业…

第六届机器人与智能制造技术国际会议 (ISRIMT 2024)

重要信息 大会官网:www.isrimt.org(点击了解大会,参会,投稿等信息) 大会时间:2024年9月20-22日 大会地点:中国-江苏常州 收录检索:IEEE Xplore, EI Compendex, Scopus 大会简介…

航空公司名字趣史:看看有趣又有意义的命名背后有什么玄机

上周“东海航空”事件引发了东方航空在社交媒体上的一系列被迫营业,因为媒体的乌龙报道误将“东海航空”简称为“东航”,甚至直接用错了图片。众号:标猿公司起名 给公司起个好名字 其实除了大部分以地域、国家命名的航空公司,还…

Java 8 Optional用法【总结记录】

一、前言 这里引用书中描述来介绍Optional类: Optional是为核心类库设计的一个数据类型,用来替换null值。人们对原有的null值有很多抱怨,甚至连发明这一概念的Tony Hoare也是如此,他曾说这是自己的一个“价值连城的错误”。作为一…

cad导出图片格式怎么导出?5个软件帮助你快速转换文件格式

cad导出图片格式怎么导出?5个软件帮助你快速转换文件格式 将CAD文件导出为图片格式可以帮助你更方便地展示、分享或打印设计图纸。CAD(Computer-Aided Design)文件通常以DWG或DXF格式保存,而要将它们转换为常见的图片格式&#x…

NodeJS “次元高校”社团管理系统 ---附源码94897

摘要 计算机科学技术的飞速发展也更好地促进了高校信息化建设。为了适应新形势下更好地培养人才,高校在发展的过程中开始推进信息系统的建设。随着我国教育模式的不断改革和发展,越来越多的高校正在开展校园信息工程建设,以更好地提高高校的各…

C / C++内存管理

内存分布 1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的。 2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共 享内存,做进程间通信,子进程堆区的开辟。 3. …

文心快码帮你解大厂面试题:TCP关闭连接的过程,为什么要4次挥手,为什么最大等待时间是2*MSL?

🔍【大厂面试真题】系列,带你攻克大厂面试真题,秒变offer收割机! ❓今日问题:在8g内存的机器,能否启动一个7G堆大小的java进程? ❤️一起看看文心快码Baidu Comate给出的答案吧!如…

Oracle RAC 修改系统时区避坑指南(深挖篇)

大家好,这里是 Lucifer三思而后行,专注于提升数据库运维效率。 目录 前言环境安装问题重现时区检查修改时区问题分析问题解决 深究根源问题一问题二问题三 写在最后往期精彩文章推荐 前言 昨天遇到一个问题,Oracle RAC 安装完之后&#xff0…

bitsandbytes使用错误:CUDA Setup failed despite GPU being available

参考:https://huggingface.co/docs/bitsandbytes/main/en/installation 报错信息 ======================

【JavaEE精炼宝库】网络原理基础——网络层 | IP协议

文章目录 一、IP 协议的格式二、IP 地址的数量限制三、私有 IP 地址和公网 IP 地址3.1 私有 IP 地址和公网 IP 地址的基本知识:3.2 内网 IP 设备访问外网 IP 设备的过程(NAT 机制): 四、地址管理4.1 网段划分:4.1.1 网…

npm、cnpm、pnpm、yarn包管理工具别傻傻分不清楚了

干啥的: nodejs的包管理工具。 用于自动化处理包的安装、更新、配置和管理。它们之间的主要区别在于它们各自的实现方式、性能优化、以及一些特有的功能。 怎么用: 1、npm 1.1、描述 Node Package Manager默认包管理器从 npm 公共仓库中安装、共享…

.net framework 4.8 开发windows系统服务

ps:旧技术了,有一点局限性,但好像网上记录并不多,或是很零散,比较坑人。故自己记录一下。 项目环境: win 10、.Net framework 4.8,Visual Studio 2019,oracle 12G,ORM是SqlSugar5.…

uniapp video标签无法播放视频

当video标签路径含有中文以及特殊字符视频就会无法播放 解决方法使用encodeURIComponent对路径进行加密处理 videoSrc data.coursewareFile? ${appConfig.apiUrl encodeURIComponent(data.coursewareFile)}: "";最后效果

GHA高质量seo文章怎么写?

撰写高质量SEO文章不仅仅是文字的堆砌,更是对内容的精心打磨,而GHA文章更是如此,想写出一篇GHA文章,首先就要保证以下几点,一定要原创,谷歌对于原创内容是极其看重的,哪怕是伪原创,在…

一种导出PPT到MP4的方法

需求 导出PPT到MP4,并记录每页,每个动作的时间线。通过 MP4时间线 就可以在页面上很方便的放映PPT的内容,并支持翻页点击。 代码 保存每一页的图像信息,用做播放器的缩略图 public void SaveThumbnail(string ppt_filepath, st…

【STL】红黑树的全面探索与红黑树的实现

ps:文章最后有完整的代码 1.红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路…

如何使用IDEA搭建Mybatis框架环境

文章目录 ☕前言为什么学习框架技术Mybatis框架简介 🍹一、如何配置Mybatis框架环境1.1下载需要MyBatis的jar文件1.2部署jar文件1.3创建MyBatis核心配置文件configuration.xml1.4.创建持久类(POJO)和SQL映射文件1.5.创建测试类 🧋二、 MyBatis框架的优缺…

前端性能优化:使用Vue3+TS+Canvas对图片进行压缩后再上传,优化带宽,减小服务器存储成本,减少流量损耗

在上传图片之前,对图片进行压缩。看到这里是不是有点懵,前端怎么压缩图片呢,这不应该是后端做的吗? 但是我在开发的时候接到了这样一个需求,要求对用户上传的图片进行一定的压缩,而且并且尽量还原图片的清…