通过 AWS 负载均衡器连接 ZeroMQ 端点
Posted
技术标签:
【中文标题】通过 AWS 负载均衡器连接 ZeroMQ 端点【英文标题】:Connect ZeroMQ endpoints over AWS Load balancers 【发布时间】:2016-03-14 13:24:58 【问题描述】:我是 zeroMQ 的新手,如果这个问题没有意义,我深表歉意。
我了解 zeroMQ 提供了一组基于不同连接类型(即 TCP)的通信模式。是否可以使用负载均衡器(例如 AWS ELB)在客户端和使用 zMQ 的服务器之间传递请求?
这是一种可行的方法吗?它有什么好处吗? 提前致谢!
【问题讨论】:
我也有同样的问题。我们有一个在 SSL 上运行的自定义二进制协议,它似乎可以在 TCP 模式下的 ELB 上通过 SSL 健康检查正常工作。我们正在考虑切换到 ZeroMQ .. 我想我们需要做一些测试。一般来说,我认为它会起作用,但健康检查将是一个问题,因为它们使用曲线加密而不是 SSL。我们会将它用于 REQ/REP 和 PUB/SUB。 【参考方案1】:您所描述的内容实际上无法使用 ELB 或其他通用负载均衡器,但您可以直接在 ZMQ 中编写负载均衡器。
主要问题是 ZMQ 不是通用套接字协议 - 要让 ZMQ 成功连接,它需要了解它所连接的每个单独的套接字。此外,像 ELB 这样的通用负载均衡器不说 ZMQ,所以你不能将 ZMQ 直接连接到它 - 理论上你可以通过 ELB 传递连接,但它会开始破坏当您在另一侧添加多个套接字时。
但是有很多技术可以创建您自己的 ZMQ 负载均衡器,我建议您 read this section of the ZMQ guide 查看他们描述的用于处理此问题的原型架构。真的,我建议你阅读整个指南,里面有很多有价值的信息。
基本思想是您编写一个在前端接收消息的代理,在后端有一个已向代理注册自己的工作人员池。每个工人都告诉经纪人它已经准备好工作了。当代理向工作人员发送工作时,它知道它很忙,并将新消息发送给不同的工作人员。当工作人员完成时,它会提醒代理并传回任何结果。然后它可以用于新的工作。
根据您的需要,这是一种适合您的模式,如果您需要更多的循环方法,那么您可以只使用一种使用该通信方法的套接字类型,即PUSH
或 @ 987654323@.
【讨论】:
您的评论很有见地。我显然明白了重点!谢谢:) 我对拥有自己的负载均衡器的主要担忧是管理负载均衡器并按需水平扩展(例如使用 Elastic Bean Stalk)有多难? 如果不确切知道您打算做什么、为什么需要负载平衡、您的通信架构是什么样的,或者老实说,您是 AWS 服务方面的专家,很难直接解决您的问题感兴趣的。一个适当设计的架构应该“免费”水平扩展,或者至少接近它。您是否有理由考虑 ZMQ 而不是 Amazon SQS,它可能会更自然地集成到您的生态系统中? 作为 zmq 的忠实粉丝 - 并且喜欢它的工作方式 - 很难硬着头皮将其拆除并替换它 - 但使用不会完全集中的 SQS 必须是卓越的解决方案。【参考方案2】:ELB 可以选择创建 TCP 负载平衡器。它不关心你运行什么协议或者它是否加密。它只是将流量发送到在正确端口上接受 TCP 连接的服务器。
无论您使用自己的自定义二进制协议,还是基于 ZeroMQ 的协议,您都可以在前端使用 ELB 负载均衡器。
由于 ZeroMQ 的大部分模式都是通过 TCP 连接,所以一切都会正常运行。
【讨论】:
以上是关于通过 AWS 负载均衡器连接 ZeroMQ 端点的主要内容,如果未能解决你的问题,请参考以下文章