当前位置: 首页 > news >正文

数据同步实战篇

文章目录

  • 数据同步实战篇
    • 1. mysql数据同步
      • 1.1 mysql集群部署
      • 1.2 数据同步
        • 1.2.1 同步复制
        • 1.2.2 异步复制
        • 1.2.3 半同步复制
    • 2. redis数据同步
      • 2.1 redis集群部署
      • 2.2 数据同步
    • 3. mq数据同步
      • 3.1 mq集群部署
      • 3.2 数据同步
    • 4. es数据同步
      • 4.1 es集群部署
      • 4.2 数据同步

数据同步实战篇

  • 数据作为系统运行的核心资产,数据同步则是保障数据一致性、可用性的关键纽带。无论是mysql关系型数据库的结构化数据迁移,还是redis缓存数据的高效同步;无论是mq消息队列中数据的可靠流转,亦或是es搜索引擎数据的实时更新,每一种数据同步场景都蕴涵了丰富的经验。从解决数据延迟、冲突,到保障数据完整性与实时性,不同类型的数据同步各有其道。

1. mysql数据同步

1.1 mysql集群部署

在这里插入图片描述

  • 如上图所示,mysql集群式部署,一般采用分片库,对于不需要分片的数据表,使用其中的单个分片即可。
  • 使用分片表时,根据分片字段路由到不同的分片,然后执行对应的读写逻辑。

1.2 数据同步

mysql数据同步,如上图,一般分为同步复制、半同步复制、异步复制。主要依赖于binlog,relay log。

1.2.1 同步复制

原理:在同步复制模式下,主服务器在执行完客户端提交的事务后,会等待至少一个从服务器确认已经接收并将该事务的二进制日志写入到中继日志(relay log)中,才会将结果返回给客户端。只有当从服务器确认后,主服务器才会认为事务提交成功。
优点:数据一致性高。由于主服务器会等待从服务器的确认,因此可以确保在主服务器提交事务时,至少有一个从服务器已经拥有了该事务的数据,大大降低了数据丢失的风险。
缺点:性能较低。因为主服务器需要等待从服务器的响应,这会增加事务的提交时间,尤其是在网络延迟较高的情况下,性能影响更为明显。
适用场景:对数据一致性要求极高的场景,如金融交易系统、核心业务系统等。

1.2.2 异步复制

原理:在异步复制模式下,主服务器(Master)在执行完客户端提交的事务后,会立即将结果返回给客户端,而不会等待从服务器(Slave)确认是否已经接收并处理了该事务的二进制日志(binlog)。主服务器会将二进制日志发送给从服务器,从服务器会在后台异步地接收和执行这些日志。
优点:由于主服务器不需要等待从服务器的响应,因此可以显著提高主服务器的性能,尤其是在高并发写入的场景下。
缺点:数据一致性较差。如果主服务器在从服务器还未接收或执行完二进制日志时发生故障,那么这些未同步的数据将会丢失。
适用场景:对数据实时一致性要求不高,但对性能要求较高的场景,如一些统计分析系统、日志记录系统等。

1.2.3 半同步复制

原理:半同步复制是异步复制和同步复制的折中方案。在半同步复制模式下,主服务器在执行完客户端提交的事务后,会等待至少一个从服务器确认已经接收并将该事务的二进制日志写入到中继日志中,但这个等待有一个时间限制。如果在规定的时间内没有收到从服务器的确认,主服务器会自动切换到异步复制模式,继续处理后续的事务,直到有从服务器恢复并确认接收日志后,再切换回半同步复制模式。
优点:在一定程度上保证了数据的一致性,同时也能在从服务器响应较慢时保证系统的性能。
缺点:需要额外的配置和管理,以确保时间限制的设置合理。如果时间限制设置过短,可能会频繁切换到异步复制模式,影响数据一致性;如果时间限制设置过长,可能会影响系统的性能。
适用场景:对数据一致性有一定要求,同时也需要保证一定性能的场景,如大多数企业的业务系统。

2. redis数据同步

2.1 redis集群部署

在这里插入图片描述

  • 如上图所示redis集群一般以redis cluster方式部署,每个分片(节点)负责一部分slots。key先路由到对应的槽位,然后分发到对应的分片处理。
  • 同时通过redis 哨兵来监控集群,对 Redis 主节点和从节点进行监控,在主节点出现故障时实施自动故障转移。通常会部署多个哨兵来构成一个哨兵集群,以此增强可靠性。它们相互协作,通过投票机制来决定是否进行故障转移以及选择新的主节点。

2.2 数据同步

  • Redis 主从复制是一种异步复制机制。主节点(Master)负责处理写操作,从节点(Slave)则从主节点复制数据。当主节点接收到写命令时,会将这些命令记录在内存缓冲区中,并异步地将其发送给从节点。从节点接收到这些命令后,会在本地执行,从而实现数据的同步。

3. mq数据同步

3.1 mq集群部署

在这里插入图片描述

  • 如上图所示,一个topic下存在多个分区,每个分区中都有自己的leader和其他分区的floower。分片 + 副本的方式保障了mq集群高可用。

3.2 数据同步

这里以kafka为例说明:

  • 消息写入 Leader:生产者将消息发送到分区的 Leader 副本。Leader 接收到消息后,会将消息追加到本地的日志文件中。
  • Follower 发起拉取请求:Follower 副本会定期向 Leader 副本发送 Fetch 请求,请求中包含了 Follower 当前的日志偏移量(offset),用于告知 Leader 它已经同步到了哪个位置。
  • Leader 响应请求:Leader 接收到 Follower 的 Fetch 请求后,会根据 Follower 的偏移量,从本地日志中读取相应的消息,并将消息作为响应返回给 Follower。
  • Follower 写入本地日志:Follower 接收到 Leader 返回的消息后,将这些消息追加到自己的本地日志中,并向 Leader 发送 ACK(确认),告知 Leader 自己已经成功同步了这些消息。
  • 高水位标记:Leader 会维护一个高水位(High Watermark)标记,它表示所有副本都已经成功同步的消息偏移量。只有高水位之前的消息才被认为是已提交的消息,消费者只能消费已提交的消息。

4. es数据同步

4.1 es集群部署

4.2 数据同步

更多内容,详见:《系统频繁故障?让我来带你搭建坚不可摧的稳定性体系》
https://blog.csdn.net/for62/article/details/147673818

相关文章:

  • HTTP协议(一)
  • ios systeam introduction
  • 【SimSession】1:将视频发送逻辑与 libuv 事件循环集成是一个典型的并发设计问题
  • Android第三次面试总结之activity和线程池篇(补充)
  • 软件架构之旅(6):浅析ATAM 在软件技术架构评估中的应用
  • Webug4.0通关笔记12- 第17关 文件上传之前端拦截(3种方法)
  • OpenHarmony平台驱动开发(一),ADC
  • 人工智能(AI)未来会产生意识吗?
  • Flink基础整理
  • Python速成系列二
  • React hooks详解
  • 新能源实验室电磁兼容设计优化方案论述
  • HTML02:网页基本信息
  • 苍穹外卖部署到云服务器使用Docker
  • 软考 系统架构设计师系列知识点之杂项集萃(52)
  • 观察者模式(Observer Pattern)详解
  • 自由学习记录(58)
  • n8n工作流自动化平台的实操:利用本地嵌入模型,完成文件内容的向量化及入库
  • 从 0 到 1:使用 Jetpack Compose 和智能自动化实现高效 Android UI 开发
  • 2025 年如何使用 Pycharm、Vscode 进行树莓派 Respberry Pi Pico 编程开发详细教程(更新中)
  • 巴菲特股东大会十大金句:未来五年内可能有投资机会,快乐的人活得更久
  • 英国地方选举结果揭晓,工党保守党皆受挫
  • 华尔兹转岗与鲁比奥集权:特朗普政府人事震荡背后的深层危机
  • “国宝探索记”增强亲子连接,国宝成了生活想象的一部分
  • 阿根廷发生5.8级地震
  • 马上评丨上热搜的协和“4+4”模式,如何面对舆论审视