2011-12-08 122 views
1

我已经使用RabbitMQ(AMQP)与我的红宝石项目一段时间了,反正我刚刚听说过RabbitMQ集群,任何人都可以简单介绍一下这个简单的话,我需要知道运行普通RabbitMQ服务器和RabbitMQ集群,为什么我需要它,以及如何实现它。什么是RabbitMQ集群?

我需要我的解决方案具有可扩展性和处理这么多的要求,我想下面的实现的,我很想知道如何实现这样的事情:

HA proxy->3 Clustered RabbitMQ instances 

什么是最快的方法以及最好的ruby web服务器选择来处理请求,并简单地解析它并将其发送到适当的队列。

与我目前的实现我使用瘦服务器,并完成类似以下,但在寻找更好的架构,它是速度更快,更具可扩展性:

require "bunny" 
require "thin" 


@amqp ||= Bunny.new(:logging => false) 
@amqp.start 

@direct_exchange ||= @amqp.exchange('') 

app = Proc.new do |env| 
    req = Rack::Request.new(env).params 

    command = req['command'].strip rescue "no command" 
    number = req['number'].strip rescue "no number" 

    if command =~ /\A(create|c|r|register)\z/i  
    @direct_exchange.publish(number, :key => "create") 

    elsif command =~ /\A(update|u)\z/i 
    @direct_exchange.publish(number , :key => "refresh") 

    end  

    [200, {'Content-Type' => "text/plain"} , command ] 

end 

Rack::Handler::Thin.run(app, :Port => 4001) 

我敢肯定有更好的执行。

任何帮助/提示将不胜感激。

在此先感谢

回答

1

这一切都取决于您的真正的瓶颈,以及你所期望的可靠性级别。但作为一般的经验法则,你可以有:

  • HTTP负载平衡器均衡HTTP请求到多个Web服务器
  • N个Web服务器处理HTTP请求,解析他们最终发布命令到RabbitMQ的节点
  • 包括M兔节点
  • ķ工作节点,消耗来自兔簇消息和执行命令的RabbitMQ簇

现在HTTP服务器的数量可以是从不同的RabbitMQ节点。这取决于你的瓶颈将在哪里。也许你只需要一个RabbitMQ节点(所以不需要集群),或者其中的一些。例如,如果有两个http服务器连接到一个rabbitmq节点,而另一半则连接到另一个rabbitmq节点。不管它们与哪个连接,它们都可以发布到相同的amqp交换机,而rabbtimq集群将负责处理2个节点,并收集所有发布到该交换机上的所有内容,而不受节点http服务器连接的影响。

同样的逻辑适用于“工作人员”,即服务器使用来自rabbitmq的消息,并执行其中的命令。取决于他们需要做多少工作,可以从1到K。你也可以将它们均匀地连接到现有的rabbitMQ服务器上。

+0

感谢Davorin在这里的解释,但我没有得到有关RabbitMQ节点的部分,我应该为每个HTTP服务器获取新节点吗?有没有简单的演示或教程来显示?谢谢 –

+1

嗨,我已经扩大我的回答,澄清您的评论中提出的问题。 –