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

Connect ZeroMQ endpoints over AWS Load balancers

我是 zeroMQ 的新手,如果这个问题不合理,我深表歉意。

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

这是一种可行的方法吗?它有什么好处吗? 提前致谢!

您所描述的使用 ELB 或其他通用负载均衡器实际上是不可能的,但是您可以直接在 ZMQ 中编写负载均衡器。

主要问题是 ZMQ 不是通用套接字协议——要使 ZMQ 成功连接,它需要知道它连接到的每个单独的套接字。此外,像 ELB 这样的通用负载均衡器不会 说 ZMQ,所以你不能将 ZMQ 直接连接到它 - 理论上你可以通过 ELB 传递连接,但它会开始在另一侧添加多个插座的那一刻就崩溃了。

但是有很多技术可以创建您自己的 ZMQ 负载均衡器,我建议您 read this section of the ZMQ guide 看看他们描述的用于处理此问题的原型架构。真的,我建议您阅读整个指南,其中有很多有价值的信息。

基本思想是编写一个在前端接收消息的代理,在后端有一个已向代理注册的工作人员池。每个工人都告诉经纪人它已准备好工作。当 broker 向 worker 发送工作时,它知道它很忙,并向另一个 worker 发送新消息。当 worker 完成后,它会提醒 broker 并传回任何结果。然后它可以用于新工作。

根据您的需要,这是一种适合您的模式,如果您需要更多的循环方法,那么您可以只使用一种使用该通信方法的套接字类型,即 PUSHDEALER.

ELB 可以选择创建 TCP 负载平衡器。它不关心你的 运行ning 是什么协议,或者它是否加密。它只是将流量发送到在正确端口上接受 TCP 连接的服务器。

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

由于 ZeroMQ 的大部分模式都通过 TCP 连接,所以一切都会 运行 正常。