Skip to content

2018 阿里巴巴中间件挑战赛 - 消息队列存储引擎 题目设计

Notifications You must be signed in to change notification settings

ousheobin/aliware_queue_race_storage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Aliware Queue Race 2018

这是阿里中间件性能挑战赛2018的复赛"消息队列存储引擎"的实现

题目传送门

使用的技术和环境

  • 100% 原生Java Api (官方就是这么要求的...)
  • Maven 管理依赖和构件
  • 运行环境在Linux系统下

赛时的想法

  • 使用mmap的方式读写数据文件
  • 尽可能降低锁的粒度,甚至实现无锁化
  • 鉴于测评程序产生的队列名前缀高度一致,采用了Trie字典树的修改版存储队列信息
  • 每隔一定的间隔或符合一定的条件,会创建索引,并在文件中实现一个类似于链表的机制,遍历寻找索引记录

Benchmark

运行环境:

  • 阿里云天池平台
  • 300GB SSD磁盘
  • Linux操作系统 Deadline磁盘调度算法
  • 每消息约 50 byte,累计约百万队列,20亿消息

运行成绩:

  • 线上跑分 63w TPS
  • 最高跑分 66w TPS (尝试了一下分bucket对数据进行操作,代码太乱,不放上来了)

赛后的反思

  • 其实可以使用ByteBuffer先把数据读入缓冲区,然后再刷入磁盘,按块写入的效率会相对高些(利用操作系统DMA)
  • 读的时候其实需要考虑预读等优化,现在使用的暴力遍历读写太差劲了
  • 索引做得不是很好,读索引时,随机读写太多,当队列增多时,读索引的时间会大幅增多
  • 还有好多好多的优化点和可以进步的地方~

P.S. start.sh是一个模拟测评程序的脚本,可以在Linux系统+SSD磁盘下测试使用

About

2018 阿里巴巴中间件挑战赛 - 消息队列存储引擎 题目设计

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages