为什么在rabbitmq中不应该对所有的 message 都使用持久化机制?

提问者:帅平 问题分类:面试刷题
为什么在rabbitmq中不应该对所有的 message 都使用持久化机制?
1 个回答
我就这样
我就这样
首先,必然导致性能的下降,因为写磁盘比写 RAM 慢的多,message 的吞吐量可能有 10 倍的差距。
其次,message 的持久化机制用在 RabbitMQ 的内置 cluster 方案时会出现“坑爹”问题。矛盾点在于若 message 设置了 persistent 属性,但 queue 未设置 durable 属性,那么当该 queue 的owner node 出现异常后,在未重建该 queue 前,发往该 queue 的 message 将被 blackholed;若 message 设置了 persistent 属性,同时 queue 也设置了 durable 属性,那么当 queue 的owner node 异常且无法重启的情况下,则该 queue 无法在其他 node 上重建,只能等待其owner node 重启后,才能恢复该 queue 的使用,而在这段时间内发送给该 queue 的 message将被 blackholed 。
所以,是否要对 message 进行持久化,需要综合考虑性能需要,以及可能遇到的问题。若想达到100,000 条/秒以上的消息吞吐量(单 RabbitMQ 服务器),则要么使用其他的方式来确保message 的可靠 delivery ,要么使用非常快速的存储系统以支持全持久化(例如使用 SSD)。另外一种处理原则是:仅对关键消息作持久化处理(根据业务重要程度),且应该保证关键消息的量不会导致性能瓶颈。
发布于:1周前 (04-21) IP属地:四川省
我来回答