为什么我们需要像PostMSQL这样的数据库上的RabbitMQ等消息代理?

前端之家收集整理的这篇文章主要介绍了为什么我们需要像PostMSQL这样的数据库上的RabbitMQ等消息代理?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是 RabbitMQ之类的消息代理的新手,我们可以使用它来为 Celery这样的调度系统创建任务/消息队列.

现在,问题是:

>我可以在PostgreSQL中创建一个表,该表可以附加新任务并由Celery等消费者程序使用.
>为什么我想为RabbitMQ设置一个全新的技术?

现在,我认为扩展不能成为答案,因为像Postgresql这样的数据库可以在分布式环境中工作.

搜索数据库为特定问题提出的问题,我发现:

>轮询保持数据库繁忙且性能低下
>锁定桌子 – >再次表现不佳
>数百万行任务 – >再次投票表现不佳

现在,RabbitMQ或其他任何类似的消息代理如何解决这些问题?

此外,我发现AMQP协议就是它所遵循的.那有什么好处的?

Redis也可以用作消息代理吗?我发现它更类似于memcache然后是RabbitMQ.

请注意这个!

解决方法

Rabbit的队列驻留在内存中,因此比在数据库中实现它要快得多. (好的)专用消息队列还应提供基本的排队相关功能,例如限制/流量控制,以及选择不同路由算法的能力,以命名一对(兔子提供这些和更多).根据项目的大小,您可能还希望将消息传递组件与数据库分开,这样,如果一个组件负载过重,则无需阻碍其他组件的操作.

至于你提到的问题:

>轮询保持数据库buzy和低性能:使用Rabbitmq,生产者可以将更新推送到消费者,这比轮询更高效.数据只需在需要时发送给消费者,无需进行浪费的检查.
>锁定桌子 – >再次表现不佳:没有桌子可以锁定:P
>数百万行任务 – >再次轮询是低性能的:如上所述,Rabbitmq将在RAM驻留时运行得更快,并提供流量控制.如果需要,它还可以使用磁盘临时存储消息(如果RAM用完).在2.0之后,Rabbit的RAM使用率显着提高.群集选项也可用.

关于AMQP,我会说一个非常酷的功能是“交换”,以及它能够路由到其他交易所.这为您提供了更大的灵活性,使您能够创建各种精细的路由类型,这些类型在扩展时非常方便.举个好例子,请看:

http://blog.springsource.com/wp-content/uploads/2011/04/routing-topology.png

并且:http://blog.springsource.org/2011/04/01/routing-topologies-for-performance-and-scalability-with-rabbitmq/

最后,关于redis,是的,它可以用作消息代理,并且可以做得很好.但是,Rabbitmq具有比redis更多的消息队列功能,因为rabbitmq是从头开始构建的,是一个功能齐全的企业级专用消息队列.另一方面,Redis主要被创建为一个内存中的键值存储(尽管它现在比它更多;它甚至被称为瑞士军刀).尽管如此,我已经阅读/听过很多人用Redis为小型项目取得了不错的成绩,但在大型应用程序中却没有听到太多关于它的信息.

以下是在长轮询聊天实现中使用redis的示例:http://eflorenzano.com/blog/2011/02/16/technology-behind-convore/

猜你在找的MsSQL相关文章