Details
-
New Feature
-
Status: Open
-
Major
-
Resolution: Unresolved
-
4.3.0
-
None
Description
在去年rocketmq深圳会议中,看到rocketmq5.0会实现内存话.这是一个振奋人心的特性,解决内存占用的问题,无法优秀的使用一次性写的,一次性写大多人都没有事情,因为会出现网络阻塞。
5.0的出现可能需要很久,但是对这个特性,很需要。
做了如下分析。
mappedbytebuffer分析
mappedbytebuffer是调用底层mmap体系
- 优点
- 实现简单
- 维护由系统管理
- 内存使用灵活
- 缺点
- 占用大量的内存,造成资源浪费
- 因为系统管理,内存使用灵活 。在高峰随机读写情况,性能堪忧
- 容易出现未知的情况
- 在高并发情况下,一次写特性造成io堵塞
- 个个操作系统实现不一样,(这是一个神坑,一个月的努力,坑没了)
基于DirectBuffer实现,可以解决mappedbytebuffer的缺点,同时可以提升一定的性能。更加灵活。
实现大概细节
- 重写 mappedFile文件
- DirectBuffer基本管理模块
- 把文件读到内存,是一次把整个文件加载到内存,还是需要才加载
- 文件读取方式,是调用操作系统的api(整个坑多),还是自己实现异步加载
- 等等
欢迎各路大神,支出不足,遗漏,补充。