1、如何保证MySql到ES的数据一致性?

答:ES是一个开元分布式搜索和分析引擎、它提供了全文搜索、结构化搜索分析以及这些组合的能力。

  • 全文搜索能力:ES支持复杂的搜索能力,包括模糊匹配、短语查询、布尔查询等,并且可以快速的返回结果
  • 实时数据分析:实时数据分析,支持对数据进行复杂的统计分析,如计数、求和、平均值、最大值、最小值等,这对于业务的分析非常有作用
  • 扩展性强:ES的分布式架构可以轻松的横向扩展到数白甚至数千台服务器节点,处理PB级的数据量;通过设置副本分片,确保数据沉淀、避免单点故障;
  • 灵活的数据模型:Es使用Json格式来存储数据,这种格式对于现代应用程序来说,非常的友好,易于理解和操作,你可以自定义映射来规范文档结构;同样也允许你自由的添加新字段,无需预先定义模式;
  • 强大的插件生态系统:最熟悉的可能就是Kibana,它是官方提供的可视化界面,提供了一个友好的用户界面,用于搜索可视化和管理ES中的数据;还有其它的一些插件(如Logstash),它们可以帮助收集解析和传输数据到ES;
  • 使用多种应用场景:日志和事件数据分析;电子商务中的相关搜索;安全信息和事务管理等各种大数据量的情况下的使用。

所以ES这个中间件非常适合在“数据量特别大”的情况下,特别还设计到“分库分表”的这种业务场景下的使用。但是引入新的中间件也有需要注意的挑战;

  • 写入性能:当面对极高的写入速度时ES可能会遇到瓶颈,那么就需要对配置进行优化,并且合理的设计索引策略,如使用时间分区索引,或者基于业务逻辑的一些分区(表分区);
  • 存储成本:ES对硬件资源的要求还是比较高的,尤其是内存,由于他依赖倒排序索引来加速搜索过程,这可能会导致较大的存储开销;
  • 数据一致性:在分布式环境中,确保数据一致是一个挑战,在高并发环境中,如何平衡性能和数据一致性依然是一个需要仔细权衡的问题。

MySql到ES数据一致性同步方案

  • 1、同步双写(硬编码写入MySql的同时,写入ES)
    适用场景:适用于逻辑相对来说比较简单,时效性也很高;适用于对数据实时性要求极高,且业务逻辑相对简单的场景,就比如金融交易的记录同步。
    优点:
    逻辑简单
    实时性高

缺点:
硬编码:所有涉及数据库变更操作的地方都需要加上同时对ES的变更操作
性能下降(性能瓶颈):双写操作导致事务的时间延长,整体的处理时间也大大的加长了。
补偿机制:需要有补偿机制,在操作ES失败的情况下怎么处理呢,回滚MqSql的数据吗?还是补偿ES的操作?

  • 2、定时同步(分布式任务调度)
    适用场景:定时同步业务服务只处理MySql的数据,不管ES的数据操作。通过一个同步服务,并且引入分布式任务调度服务(常见分布式任务调度服务有:Quartz Scheduler、XXL-JOB、SchedulerX、ElasticJob),触发进行定时的数据库同步到ES的操作

    优点:
    逻辑简单
    服务间解耦

    缺点:
    时效性差:数据一致的延迟高
    全表扫描:并且对数据库的压力也是比较大的,要优化查询索引,可能会全表扫描。

    虽然分布式调度任务支持分片,但是在分库分表的情况下,依然要对多个表进行处理。

  • 3、MQ消息队列+同步服务异步同步方案
    业务服务操作数据库变更后,向MQ发送一条数据库变更消息,由同步服务消费MQ,获取消息后处理对ES数据的操作。

    优点:
    性能高:保证了对业务数据处理的性能,同时MQ的削峰填谷功能也照顾到了ES在高写入情况下的性能瓶颈
    业务隔离:通过MQ将业务主流程和ES数据的处理完全解耦,故障也完全隔离了。

    缺点:
    硬编码:对MySql数据的业务处理都要加上消息队列的发送。
    系统复杂度:由于引入了新的中间件,系统的复杂度大大提升了;要保证MQ的高可用,要保证消息的有效投递,这些都需要考虑。

  • 4、监听Binlog方案
    MySql有个Binlog日志,不管什么存储引擎,只要发生了表数据的更新,都会产生Binlog日志,MySql数据库的主备组成等这些都离不开Binlog日志,需要依靠Binlog来同步数据,保证数据的一致性,那么我们就可以通过监听Binlog日志的方式来进行数据同步。

Canal(阿里云中间件):支持通过监听Binlog日志,将数据同步到ES功能,,这样大大简化了数据一致性的难度。

要是担心数据量过大的这种情况,频繁的写入影响ES的性能,那么可以考虑先通过Canal Server获取Binglog发送到MQ,再通过Canal Adapter将数据同步到ES。

(1)、Canal Server 获取binlog发送MQ
(2)、MQ
(3)、Canal Adapter(或者自定义同步服务) 将数据同步到ES

优点:
无代码侵入:业务服务完全不用新增任何代码
性能高:Canal处理能力完全不用担心,毕竟有阿里的背书
业务隔离:服务间完全解耦,业务服务完全不用考虑业务以外的功能;ES的任何数据同步引发的问题,都不会影响到主业务。

缺点:
系统复杂度:系统业务复杂度显著提升了,毕竟引入了Canal和MQ两个中间件,这些中间件的高可用和异常处理都需要考虑的。

Flink:不仅可以对增量数据进行同步,还可以对存量数据进行同步。

2、什么是Redis的穿透、击穿和雪崩?

Redis崩溃之后会怎么样?系统该如何应对这种情况呢?
答:缓存穿透、击穿和雪崩是缓存中最大的三个问题,要么不出现,一旦出现就是致命性的问题。
Redis是一个开源的,基于内存的数据结构存储系统,使用最多的就是它的缓存功能了,用户的请求到达应用服务后,先到Redis中查找是否有对应的数据,要是存在就直接返回给用户了;若是不存在则从数据库中获取数据返回给用户,同时在Redis中建立一份缓存,这样在一定时间内要是再有获取这份数据,就不用再去请求数据库了。

我们就是利用Redis的高性能来支撑应用服务的高并发,大量的数据请求让Redis挡在数据库之前,大大降低了数据库的读压力,特别是在分布式系统环境下,统一的缓存管理,降低了缓存维护的难度。

缓存穿透、击穿和雪崩是Redis缓存系统中常见的三种问题,它们都可能导致数据库负载突然增加,甚至导致系统崩溃,所以我们要理解并知道他们的解决方案。

  • 缓存穿透
    突然有大量的请求来到服务器,在这些请求中,大部分是Redis中没有的数据,这就导致这些请求直接到了数据库上,其实这些数据在数据库中也没有,那自然也无法在Redis中建立缓存,这种恶意攻击请求,每次都视缓存于无物,直接查询数据库,严重的时候甚至会造成数据库直接宕机,这种大量的请求的Redis中没有,数据库中也没有的场景就是缓存穿透。

应对方案:
1、缓存空值:如果这些无效的请求的值变化不大,那么可以缓存这些无效的Key到Redis中,注意设置好过期时间,避免大量的无效的key占用内存(设置较短的过期时间);

2、布隆过滤器:还可以使用布隆过滤器提前预热,在请求一进来就进行筛选,虽然有一定的误判,但是可以挡住大部分的无效请求。

3、验证、限流、黑名单:还有了,自己的接口也要做好验证(IP、用户限流),对于明显不合理的请求直接返回。如果有预警机制还可以根据用户或者IP对接口进行限流。对于异常频繁的访问行为,甚至还可以采取黑名单的机制。

  • 缓存击穿(导致原因:某个热点数据不存在于缓存中)
    大量用户同时发起了对某个热点数据的请求,访问非常频繁,Redis缓存了这个热Key,帮助应用服务轻松抗住高并发,这个Key正处于集中式高并发访问的情况下突然失效,在这个瞬间,大量的请求就击穿了缓存直接请求在数据库,就像在一道屏障上凿开了一个洞,就数据来说,热点key失效数据在数据库中还是存在的。

应对方案:
1、设置永不更新:若缓存的数据基本不会发生更新,则可以尝试将该热点数据设置为永不更新,或者处于可预料的集中式高并发的这个时间段内不过期;

2、加锁:不管是用分布式互斥锁还是本地互斥锁,保证仅少量的请求能够到达数据库,并重新构建缓存,其余线程则在锁释放后能访问到新的缓存。

  • 缓存雪崩(导致原因:缓存中的大量或者所有数据失效)
    大量用户发起了对各类数据的请求,这各类数据在Redi

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《 慢 SQL 分析与 SQL 优化实战指南》

🔍 慢 SQL 分析与 SQL 优化实战指南、 🧠前言 在数据库性能调优中,慢 SQL 是性能瓶颈的常见元凶。 一次慢查询可能会拖垮整个业务线程池,甚至引发锁等待、雪崩效应。 对后端开发与 DBA 而言,快速定位并优化慢 SQL&am…

C#中如何运用JWT用户认证

一、JWT概述JSON Web Token(JWT)是一种轻量级的身份认证机制,广泛应用于分布式系统中的用户认证。它通过紧凑的JSON格式存储用户身份信息,并使用数字签名确保信息的完整性和真实性。与传统的基于Session的认证相比,JWT…

Hibernate 使用详解

在现代的Java开发中,数据持久化是一个至关重要的环节。而在众多持久化框架中,Hibernate以其强大的功能和灵活性,成为了开发者们的首选工具。本文将详细介绍Hibernate的原理、实现过程以及其使用方法,希望能为广大开发者提供一些有…

【图像算法 - 13】基于 YOLO12 与 OpenCV 的实时目标点击跟踪系统(系统介绍 + 源码详细)

基于 YOLO12 与 OpenCV 的实时点击目标跟踪系统 在计算机视觉领域,目标检测与跟踪是两个核心任务。本文将介绍一个结合 YOLO 目标检测模型与 OpenCV 跟踪算法的实时目标跟踪系统,该系统允许用户通过鼠标交互选择特定目标进行持续跟踪,支持多…

【数据库】 MySQL 表的操作详解

在 MySQL 数据库的日常开发与维护中,表的操作是最基础且最常用的部分。本文将从 创建表、查看表结构、修改表 以及 删除表 等方面进行详细讲解,并附上对应的 SQL 语句示例,方便在实际项目中直接应用。一、创建表 1.1 创建表语法 CREATE TABLE…

DiT: Transformer上的扩散模型

论文(ICCV 2023):Scalable Diffusion Models with Transformers 代码和工程网页:https://www.wpeebles.com/DiT.html DiTs(Diffusion Transformers)是首个基于Transformer架构的扩散模型!它在…

MySQL 索引:索引为什么使用 B+树?(详解B树、B+树)

文章目录一、二叉查找树(BST):不平衡二、平衡二叉树(AVL):旋转耗时三、红黑树:树太高由一个例子总结索引的特点基于哈希表实现的哈希索引高效的查找方式:二分查找基于二分查找思想的二叉查找树升级版的BST树:AVL 树四、…

ESP32入门开发·VScode空白项目搭建·点亮一颗LED灯

目录 1. 环境搭建 2. 创建项目 3. 调试相关介绍 4. 代码编写 4.1 包含头文件 4.2 引脚配置 4.3 设置输出电平 4.4 延时函数 4.5 调试 1. 环境搭建 默认已经搭建好环境,如果未搭建好可参考: ESP32入门开发Windows平台下开发环境的搭建…

ONLYOFFICE AI 智能体上线!与编辑器、新的 AI 提供商等进行智能交互

ONLYOFFICE AI 插件​迎来重要更新,带来了新功能和更智能的交互体验。随着 AI 智能体(现为测试版)的上线、带来更多 AI 提供商支持以及其他新功能,AI 插件已经成为功能强大的文档智能助理。 关于 ONLYOFFICE ONLYOFFICE 文档是多…

【C++进阶学习】第十一弹——C++11(上)——右值引用和移动语义

前言: 前面我们已经将C的重点语法讲的大差不差了,但是在C11版本之后,又出来了很多新的语法,其中有一些作用还是非常大的,今天我们就先来学习其中一个很重要的点——右值引用以及它所扩展的移动定义 目录 一、左值引用和…

【IoTDB】363万点/秒写入!IoTDB凭何领跑工业时序数据库赛道?

【作者主页】Francek Chen 【专栏介绍】⌈⌈⌈大数据与数据库应用⌋⌋⌋ 大数据是规模庞大、类型多样且增长迅速的数据集合,需特殊技术处理分析以挖掘价值。数据库作为数据管理的关键工具,具备高效存储、精准查询与安全维护能力。二者紧密结合&#xff0…

IEEE 2025 | 重磅开源!SLAM框架用“法向量+LRU缓存”,将三维重建效率飙升72%!

一、前言 当前研究领域在基于扩散模型的文本到图像生成技术方面取得了显著进展,尤其在视觉条件控制方面。然而,现有方法(如ControlNet)在组合多个视觉条件时存在明显不足,主要表现为独立控制分支在去噪过程中容易引入…

无人机遥控器教练模式技术要点

一、技术要点1.控制权仲裁机制:核心功能:清晰定义主控权归属逻辑(默认为学员,但教练随时可接管)。切换方式:通常通过教练遥控器上的物理开关(瞬时或锁定型)或软件按钮触发。切换逻辑…

【跨服务器的数据自动化下载--安装公钥,免密下载】

跨服务器的数据自动化下载功能介绍:上代码:发现好久没写csdn了,说多了都是泪~~ 以后会更新一些自动化工作的脚本or 小tricks,欢迎交流。分享一个最近在业务上写的较为实用的自动化脚本,可以批量从远端服务器下载指定数…

C++-->stl: list的使用

前言list的认识list是可以在固定时间(O(1))内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中&#xff0…

本地WSL部署接入 whisper + ollama qwen3:14b 总结字幕

1. 实现功能 M4-1 接入 whisper ollama qwen3:14b 总结字幕 自动下载视频元数据如果有字幕,只下载字幕使用 ollama 的 qwen3:14b 对字幕内容进行总结 2.运行效果 source /root/anaconda3/bin/activate ytdlp 🔍 正在提取视频元数据… 📝 正在…

《Linux运维总结:Shell脚本高级特性之变量间接调用》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:Linux运维实战总结 一、变量间接调用 在Shell脚本中,变量间接调用是一种高级特性,它允许你通过另一个变量的值来动态地访问…

ABP VNext + Akka.NET:高并发处理与分布式计算

ABP VNext Akka.NET:高并发处理与分布式计算 🚀 用 Actor 模型把高并发写入“分片→串行化”,把锁与竞态压力转回到代码层面的可控顺序处理;依托 Cluster.Sharding 横向扩容,Persistence 宕机可恢复,Strea…

[激光原理与应用-250]:理论 - 几何光学 - 透镜成像的优缺点,以及如克服缺点

透镜成像是光学系统中应用最广泛的技术,其通过折射原理将物体信息转换为图像,但存在像差、环境敏感等固有缺陷。以下是透镜成像的优缺点及针对性改进方案:一、透镜成像的核心优点高效集光能力透镜通过曲面设计将分散光线聚焦到一点&#xff0…

测试匠谈 | AI语音合成之大模型性能优化实践

「测试匠谈」是优测云服务平台倾心打造的内容专栏,汇集腾讯各大产品的顶尖技术大咖,为大家倾囊相授开发测试领域的知识技能与实践,让测试工作变得更加轻松高效。 本期嘉宾介绍 Soren,腾讯TEG技术事业群质量工程师,负责…