对于zeroMQ,我是一个完整的新手,如果这个问题不合情理,我会道歉。
据我所知,zeroMQ在不同的连接类型(即TCP)上提供了一组通信模式。是否可以使用负载均衡器(例如AWS ELB)使用zMQ在客户端和服务器之间传递请求?
这是一种可行的方法吗?它会带来什么好处吗? 提前谢谢!
答案 0 :(得分:5)
您使用ELB或其他通用负载均衡器确实无法描述的内容,但您可以直接在ZMQ中编写负载均衡器。
主要问题是ZMQ不是通用套接字协议 - 要使ZMQ成功连接,它需要知道它连接的每个插座。此外,像ELB 这样的通用负载均衡器不会说ZMQ,因此您无法直接将ZMQ连接到它 - 理论上您可以通过ELB传递连接,但它会启动分解你在另一边添加多个套接字的那一刻。
但是有很多技术可以创建自己的ZMQ负载均衡器,我建议你read this section of the ZMQ guide看一下他们描述的原型架构来处理这个问题。真的,我建议你阅读整本指南,里面有很多有价值的信息。
基本思想是你编写一个在前端接收消息的代理,而在后端有一个已经在代理注册的工作池。每个工人告诉经纪人它已准备好工作。当代理向工作人员发送工作时,它知道它正忙,并将新消息发送给不同的工作人员。当工人完成后,它会向经纪人发出警报并将任何结果传回。然后它可用于新工作。
根据您的需要,这是一种可能适合您的模式,如果您需要更多的循环方法,那么您可以使用其中一种使用该通信方法的套接字类型,即{ {1}}或PUSH
。
答案 1 :(得分:2)
ELB可以选择创建TCP负载均衡器。它不关心您运行的协议或加密与否。它只是将流量发送到接受正确端口上的TCP连接的服务器。
无论您使用自己的自定义二进制协议还是基于ZeroMQ的协议,都可以在前端使用ELB负载均衡器。
由于大多数ZeroMQ的模式都是通过TCP连接,所以一切都运行良好。