延迟队列,数据库选型,以及rocksDB

1,034 阅读2分钟
存储
延迟队列消费者拉取到消息之后,要怎么存储?第三方存储,其需要满足以下几个条件:

高性能:写入延迟要低,MQ的一个重要作用是削峰填谷,在选择临时存储时,写入性能必须要高,关系型数据库(如Mysql)通常不满足需求。
高可靠:延迟消息写入后,不能丢失,需要进行持久化,并进行备份
存储成本低:可以支持大量消息存储,(Redis存储成本太高)。
支持排序: 支持按照某个字段对消息进行排序,对于延迟消息需要按照时间进行排序。普通消息通常先发送的会被先消费,延迟消息与普通消息不同,需要进行排序。例如先发一条延迟10s的消息,再发一条延迟5s的消息,那么后发送的消息需要被先消费。
支持长时间保存:一些业务的延迟消息,需要延迟几个月,甚至更长,所以延迟消息必须能长时间保留。不过通常不建议延迟太长时间,存储成本比较大,且业务逻辑可能已经发生变化,已经不需要消费这些消息。

基于以上条件,选择了RocksDB来存储数据:
高性能嵌入式KV存储引擎。
数据持久化到磁盘。
基于LMS存储,key自然排序,迭代器(Iterator)根据key顺序遍历。

RocksDB是什么

嵌入式的database,基于google的levelDB二次开发,极大减少传统的RPC数据访问

  1. 适用于多CPU场景
  2. 高效利用Storge(更高IOPS,压缩,更少的写磨损)
  3. 不是分布式DB,而是高效,高性能,单点的数据库引擎
  4. 按照keys顺序存储,后台Compaction会消除重复和已删除的key。
  5. 可插拔式架构,容易替换其中组件和调优