Uploaded image for project: 'Apache RocketMQ'
  1. Apache RocketMQ
  2. ROCKETMQ-382

实现数据内存话,不用mappedbytebuffer

    Details

    • Type: New Feature
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 4.3.0
    • Fix Version/s: 4.3.0
    • Component/s: rocketmq-store
    • Labels:
      None

      Description

      在去年rocketmq深圳会议中,看到rocketmq5.0会实现内存话.这是一个振奋人心的特性,解决内存占用的问题,无法优秀的使用一次性写的,一次性写大多人都没有事情,因为会出现网络阻塞。

      5.0的出现可能需要很久,但是对这个特性,很需要。

      做了如下分析。

       

       mappedbytebuffer分析

         mappedbytebuffer是调用底层mmap体系

      1. 优点
        1. 实现简单
        2. 维护由系统管理
        3. 内存使用灵活
      2. 缺点
        1. 占用大量的内存,造成资源浪费
        2. 因为系统管理,内存使用灵活 。在高峰随机读写情况,性能堪忧
        3. 容易出现未知的情况
        4. 在高并发情况下,一次写特性造成io堵塞
        5. 个个操作系统实现不一样,(这是一个神坑,一个月的努力,坑没了)

      基于DirectBuffer实现,可以解决mappedbytebuffer的缺点,同时可以提升一定的性能。更加灵活。

      实现大概细节

      1. 重写 mappedFile文件
      2. DirectBuffer基本管理模块
      3. 把文件读到内存,是一次把整个文件加载到内存,还是需要才加载
      4. 文件读取方式,是调用操作系统的api(整个坑多),还是自己实现异步加载
      5. 等等

      欢迎各路大神,支出不足,遗漏,补充。

        Attachments

          Activity

            People

            • Assignee:
              Yukon yukon
              Reporter:
              laohu laohu
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated: