当前位置: 首页 > 网络应用技术

加深源代码以讨论RocketMQ刷牙机制

时间:2023-03-08 20:32:24 网络应用技术

  大家好,我是狮子座。

  谈论今天RocketMQ的三种刷牙机制。

  从微信的公共帐户[长大的道路]

  实现并实现了整个同步刷子策略。

  这是刷牙服务的父类。这是一个抽象类。它没有实施。这只是一个标记课。

  同步刷磁盘时,只有消息才真正持续到磁盘上响应ACK。可靠性很高,但是绩效将受到极大影响并适合金融业务。(参考图1)

  以下参数确定刷牙策略

  flushdiskType:sync_flush

  图将磁盘流到磁盘一起刷在一起

  收到消息后,经纪人将把消息移交给commitlog,并负责存储。Commitlog首先将最新的MappedFile定位,然后以固定格式添加消息。(请参阅图2)

  图2 COMMALLOG构造函数加载过程

  是一个构造函数

  代表刷牙请求

  图3组commitRequest函数

  通过锁定将每个写作请求添加到集合中

  图4 PutRequest功能

  每次提交后,您需要交换read -write请求数据。

  我为什么要在笔刷请求中阅读两个列表?这用于阅读和写作分离。产品发送的消息的请求非常大。GroupCommitservice的刷子操作已同步。在滚动期间,仍然会有大量的刷牙请求。阅读和写作清单,请求写作列表,处理刷牙时处理读取列表,刷新磁盘结束了交换列表,循环是往复的,并且两个可以同时进行。

  图5 SwapreQuests功能

  提交同步请求时,将唤醒线程,然后执行该方法。刷子磁盘的核心是调用映射filequeue方法。冲洗方法需要传递参数。它表示磁盘的最小页面数量。对于同步刷子,不允许丢失该消息。只要编写数据,就必须刷牙,因此页数为0。

  图6文档功能

  刷子函数。齐平方法将根据刷子的偏移定位相应的绘图文件,然后致电以启动刷子,最后更新刷子磁盘的偏移。

  图7冲洗功能

  计算是否要刷磁盘。只有新书面的数据超过了指定的页面,以避免频繁刷牙。

  刷牙的核心方法自然是绘图文件的方法。它将首先使用计算是否要刷。例如,最小笔刷页面为4,最小笔刷数据为16kb。如果书面数据小于16kb,则将跳过刷子磁盘

  图8 isabletoflush功能

  类的Group -Commitservice子 - 实施课程的入门函数

  图9运行功能

  它可以通过commitlog构造函数的构造函数结构图知道

  RockEtMQ默认情况下使用异步刷动的策略,因为异步刷磁盘同时考虑了性能和可靠性。

  在异步刷中,该消息用pagecache编写以响应ACK,然后PageCache的内容持续到磁盘上,从背景线程中,减少了读取和写作延迟,并改善了性能和吞吐量。服务停机时间为不会丢失,机器会丢失少量消息。

  以下参数确定刷牙策略

  flushdiskType:async_flush

  实现并实现了整个异步刷策略。

  它是Commitlog磁盘服务的父类。这是一个抽象类。它没有实施。这只是一个标记课。

  对于异步刷,没有要求提交刷子的请求。它不像同步刷盘。只要消息是在Commitlog中写的,就必须执行刷子操作,因为异步刷磁盘是定期执行的。

  刷盘时,您只需要调用该方法唤醒线程。因此,我们专注于其方法。

  图10异步刷板运行功能

  刷子函数。齐平方法将根据刷子的偏移定位相应的绘图文件,然后致电以启动刷子,最后更新刷子磁盘的偏移。

  图11冲洗功能

  计算是否要刷磁盘。只有新书面的数据超过了指定的页面,以避免频繁刷牙。

  刷牙的核心方法自然是绘图文件的方法。它将首先使用计算是否要刷。例如,最小笔刷页面为4,最小笔刷数据为16kb。如果书面数据小于16kb,则将跳过刷子磁盘

  图12 isabletoflush功能

  异步刷板+缓冲区,该消息写入直接的内存缓冲区中,然后缓冲区的内容从背景线程异步到磁盘不断持续到磁盘上,并且性能是最好的。服务停机时间和机器电源故障将丢失。

  实现并实现了整个异步刷策略。

  它是Commitlog磁盘服务的父类。这是一个抽象类。它没有实施。这只是一个标记课。

  这是最激进的刷子策略,最佳性能,但最不可靠的是。也没有要求说您只需要唤醒线程即可开始工作。

  与flushrealtimeservice过程类似,差异仅被替换。首先,将直接内存缓冲区的数据写入FILECHANNEL,然后唤醒FlushrealTimeservice以持续在Filechannel上。

  MAPPEFILEQUEUE方法中的关键点。它将根据社区偏移量放置MAPDFILE,然后将其称为“直接内存缓冲区”中的数据。目前,数据并不是真正持续存在的磁盘。

  2022文章目录完成

  RocketMQ性能改进

  RockEtMQ支持提交文件文件的三个持久性策略。

  打开缓冲区的用途是什么?类似于内存级别,读取和写入分离,通过直接记忆写入数据,读取数据以获取PageCache,以最大程度地消除Pagecache锁定竞争,避免使用PageCache切换到交换分区,导致服务响应时间发生。

  一些不理解或错误的地方,您指出您必须修改和优化!

  我们非常欢迎添加与个人微信相关的后端问题。我们将在小组中讨论!下次见!

  欢迎来到“喜欢”,“观看”,“前锋”连续三个支持,下次见到?

  原始:https://juejin.cn/post/709413237322727438