存储
延迟队列消费者拉取到消息之后,要怎么存储?第三方存储,其需要满足以下几个条件:
高性能:写入延迟要低,MQ的一个重要作用是削峰填谷,在选择临时存储时,写入性能必须要高,关系型数据库(如Mysql)通常不满足需求。
高可靠:延迟消息写入后,不能丢失,需要进行持久化,并进行备份
存储成本低:可以支持大量消息存储,(Redis存储成本太高)。
支持排序: 支持按照某个字段对消息进行排序,对于延迟消息需要按照时间进行排序。普通消息通常先发送的会被先消费,延迟消息与普通消息不同,需要进行排序。例如先发一条延迟10s的消息,再发一条延迟5s的消息,那么后发送的消息需要被先消费。
支持长时间保存:一些业务的延迟消息,需要延迟几个月,甚至更长,所以延迟消息必须能长时间保留。不过通常不建议延迟太长时间,存储成本比较大,且业务逻辑可能已经发生变化,已经不需要消费这些消息。
基于以上条件,选择了RocksDB来存储数据:
高性能嵌入式KV存储引擎。
数据持久化到磁盘。
基于LMS存储,key自然排序,迭代器(Iterator)根据key顺序遍历。
复制代码
RocksDB是什么
嵌入式的database,基于google的levelDB二次开发,极大减少传统的RPC数据访问
- 适用于多CPU场景
- 高效利用Storge(更高IOPS,压缩,更少的写磨损)
- 不是分布式DB,而是高效,高性能,单点的数据库引擎
- 按照keys顺序存储,后台Compaction会消除重复和已删除的key。
- 可插拔式架构,容易替换其中组件和调优
作者:PandaIP
链接:https://juejin.cn/post/6930418165759344654