基于电商场景的高并发RocketMQ实战-Broker写入读取流程性能优化总结、Broker基于Pull模式的主从复制原理

🌈🌈🌈🌈🌈🌈🌈🌈

【11来了】文章导读地址:点击查看文章导读!

🍁🍁🍁🍁🍁🍁🍁🍁

Broker 写入读取流程性能优化总结

Broker 的物理存储结构主要是为了优化三个方面:写入、存储、读取

写入优化:

  1. 将消息数据写入到 Commitlog 中默认就是写入到了操作系统的 page cache 中,通过 mapped file 机制来实现,将磁盘文件 Commitlog 映射成一块内存区域,将数据写入到内存的 page cache 中就算写入完成了,等待后台线程将内存数据 异步刷入磁盘 即可,这种情况下只有 Broker 所在的机器宕机了,才会导致几百毫秒内的内存数据丢失,这种概率是很小的
  2. Broker 存储数据是主要有三个结构的:Commitlog、ConsumeQueue、IndexFile,可参考文章,数据写入到 Commitlog 中的速度是很快的,再通过 异步 将 Commitlog 中的数据建立成索引写入到 ConsumeQueue、IndexFile,这个过程是异步,对写消息流程没有性能影响,即使写入到 ConsumeQueue、IndexFile 的过程中宕机了,只要 Commitlog 文件还在,Broker 重启之后,就会继续向 ConsumeQueue、IndexFile 中写入索引

存储结构:

  1. ConsumeQueue 存储结构经过了极大的优化设计的。每个消息在 ConsumeQueue 中存储的都是 定长的 20B ,每个 ConsumeQueue 文件可以存储 30w 个消息
  2. Commitlog 存储结构也是精心设计,每个文件 默认 1GB ,满了之后就存下一个文件,避免了某个文件过大,并且每一条消息在所有的 Commitlog 中 记录了有偏移量 ,Commielog 的文件名就是这个文件第一条消息的总物理偏移量

读取优化:

  1. 根据消息逻辑偏移量,来定位到 ConsumeQueue 的磁盘文件,在磁盘文件里就可以根据 逻辑偏移量 计算出 物理偏移量 ,可以直接定位到消息在 Commitlog 中的物理偏移量,通过两次定位就可以读取出数据
  2. 通过 transiendStorePoolEnabled 机制 解决了高并发读写场景下的 Broker busy 问题,实现了读写分离

Broker 基于 Pull 模式的主从复制原理

Broker 主从复制基于 Pull 模式实现的,即生产者将数据写入到 Broker 主节点之后,等待 Slave 向 Master 发送请求,主动拉取数据

Broker 的从节点需要拉取数据时,会向主节点发送请求建立连接,当建立连接之后,在主节点会建立一个 HAConnection 的数据结构,用于将与从节点之间的连接抽象出来,而在从节点会创建两个 HAClient,一个是主从请求线程,另一个是主从响应线程,HAClient 是从节点的核心类,负责与主节点创建连接与数据交互

那么当从节点向主节点发送连接建立,建立好连接之后,Slave 会向 Master 发送一个最大偏移量 Max Offset,那么主节点根据这个 Offset 偏移量去磁盘文件中读取数据,并将数据发送到 Slave,Slave 进行数据的保存,总体流程如下图:

相关推荐
William Dawson2 小时前
【React Native 性能优化:虚拟列表嵌套 ScrollView 问题全解析】
react native·react.js·性能优化
EndingCoder2 小时前
React Native 性能优化实践
react native·react.js·性能优化
Aniugel2 小时前
Lighthouse 前端性能优化:从一个DEMO项目入手,一步一步提升性能评分
性能优化
ZFJ_张福杰3 小时前
【Flutter】性能优化总结
flutter·性能优化
大熊猫侯佩4 小时前
Swift 初学者交心:在 Array 和 Set 之间我们该如何抉择?
数据结构·性能优化·swift
零叹13 小时前
篇章五 系统性能优化——资源优化——CPU优化(2)
性能优化·对象池·锁优化·java高并发编程·并发数据结构·缓存更新
异常君1 天前
Redis String 类型的底层实现与性能优化
java·redis·性能优化
异常君1 天前
用户态与内核态:Java 程序员必懂的两种执行状态
性能优化·操作系统·cpu
solo_991 天前
批处理实现:自动抓取perfetto日志 自动导出到当前文件夹 自动打开分析页面
性能优化
徐子竣2 天前
Unity性能优化-C#编码模块
unity·性能优化·游戏引擎