通过AWS负载均衡器连接ZeroMQ端点

4

我对zeroMQ完全是新手,如果这个问题不合理,请谅解。

我知道zeroMQ提供了一组不同连接类型的通信模式,即TCP。是否可以使用负载均衡器(如AWS ELB)来在zMQ之间传递客户端和服务器之间的请求?

这是否是可行的方法,有哪些好处呢? 谢谢!


我有同样的问题。我们有一个自定义的二进制协议,通过SSL运行,在TCP模式下使用SSL健康检查在ELB上似乎工作正常。我们正在考虑切换到ZeroMQ..我想我们需要进行一些测试。总的来说,我认为它会起作用,但是健康检查将是一个问题,因为它们使用curve加密而不是SSL。我们将使用它进行REQ/REP和PUB/SUB。 - Atif
2个回答

5
您所描述的无法使用ELB或其他通用负载均衡器实现,但是您可以直接在ZMQ中编写负载均衡器。主要问题在于ZMQ不是通用的套接字协议——为了成功连接ZMQ,它需要了解它连接到的每个单独的套接字。此外,像ELB这样的通用负载均衡器不支持ZMQ,因此不能直接连接ZMQ,理论上可以通过ELB传递连接,但是一旦在另一侧添加了多个套接字,它就会开始崩溃。但是有许多技术可以创建自己的ZMQ负载均衡器,建议您阅读ZMQ指南的此部分以了解他们描述的原型架构。真的,我建议您阅读整个指南,里面有很多有价值的信息。
基本思想是编写一个代理程序,在前端接收消息,在后端拥有一组已向代理注册的工作者。每个工作者告诉代理它准备好工作了。当代理将工作发送给工作者时,它知道该工作者正在忙碌,并将新消息发送给另一个工作者。当工作者完成时,它会通知代理并返回任何结果。然后它就可以接受新的工作。
根据您的需求,如果需要更多的轮询方法,则可以使用其中一种使用该通信方法的套接字类型,即PUSH或DEALER。

你的评论非常有见地。我明白了重点!谢谢 :) - user2035610
我对拥有自己的负载均衡器最关心的问题是,如何管理负载均衡器并根据需要进行水平扩展(例如使用 Elastic Bean Stalk)? - user2035610
1
不知道你具体想做什么、为什么需要负载均衡、通信架构是什么样子,或者说没有专业的了解你感兴趣的AWS服务,所以很难直接回答你的疑虑。一个适当设计的架构应该可以“免费”或者至少几乎“免费”地进行水平扩展。你为何要选择ZMQ而不是Amazon SQS呢?Amazon SQS更容易与你的生态系统集成。 - Jason
作为zmq的忠实粉丝,喜欢它一直以来的表现,很难下定决心拆除并替换它,但使用SQS不会完全集中化的优点必须是更好的解决方案。 - johndpope

1
ELB具有创建TCP负载均衡器的选项。它不关心您正在运行的协议或是否加密。它只是将流量发送到在正确端口上接受TCP连接的服务器。

无论您使用自己的自定义二进制协议还是基于ZeroMQ的协议,都可以在前端使用ELB负载均衡器。

由于大多数ZeroMQ模式都是通过TCP连接进行的,因此一切都会正常运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接