我需要使用 某物 协调我的系统与多个消费者/生产者,每个消费者/生产者在具有不同操作系统的不同机器上运行。我一直在研究使用 MySql 来做到这一点,但这似乎非常困难。

我的要求很简单:我希望能够随时添加或删除消费者/生产者,因此他们根本不应该相互依赖。当然,数据库可以很好地将两者分开。

我一直在研究 MySql 的 Q4M 消息队列插件,但使用起来似乎很复杂。

我确实需要一些关于如何最好地构建我的系统的意见。

有帮助吗?

解决方案

  

我需要用的东西来协调   我与几个系统   消费者/生产者分别运行于   不同的机器有不同   操作系统

这是一个消息队列中。不要追求其他的替代品。其他一切(即,使用一个数据库具有插入和删除)是可怕缓慢和麻烦的。

建立一个大的,慢消息队列与数据库往往变得严重在实践中,因为(1)数据库是缓慢的,(2)数据库是庞大而复杂的,(3)已锁定和争用问题,使每个事务潜在慢,(4)这是一个很大更多的开销比问题值得。

有许多消息队列的解决方案。

如果你不能让Q4M工作,你应该移动到另一个。

http://en.wikipedia.org/wiki/Message_queue

http://linux.die.net/man/7/mq_overview

http://qpid.apache.org/

http://code.google.com/p/httpsqs/

其他提示

它实际上(相当)复杂建立这样的系统。 (我说相当,因为它是当然可行的)。

如果您有多个制片人和的一个的消费者来说,这很容易。所有的制片人同时写入,而单个消费者只要它们是可见的(提交)。

读取数据

但是,如果你想与可扩展性的若干的消费者,你需要创建一个锁定方案是不平凡的。 (你必须确保没有行被分派给两位消费者,这是不容易实现与数据库事务和锁。天真的解决方案,导致所有的消息传送的序列,像你只有一个消费者,这是我们不想要的。 )。

我会建议使用内置的解决方案。您还可以阅读的这个问题了解一个类似的问题。

我觉得不用第三方软件也是可行的。

我的第一个设计看起来像这样:

  • 生产者将数据写入数据库
  • 为了保证一致性,必须使用事务
  • 消费者也使用事务处理数据(读取和删除)。

由于事务需求,InnoDB 是存储引擎的合理选择。您还必须仔细选择隔离级别。我的第一个猜测是“可序列化”以避免幻读,但也许更弱的级别也是可能的。

如果性能和可扩展性是一个问题,您应该考虑使用“真正的”消息传递解决方案。推出您的产品很可能会导致性能和/或可扩展性问题。

这取决于情况。

在我的情况下,唯一一个生产者使每天数千消息,并且几个消费者在接下来的24小时,其中每一个需要几个minites完成消耗这些消息。所以,我认为MySQL的能满足我的要求,我可以使用的交易,以确保消费者之间的一致性。

希望这将有助于。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top