主要需求:
- 节点之间异步请求/响应通信(本地或远程) - 灵活的消息路由 - 负载均衡支持 - 有良好的文档记录
有什么建议吗?
谢谢!
“路由”本质上意味着一条消息通过某个代理从A到B。在0mq中,这很容易实现,并且有几种支持这种功能的拓扑结构(http://zguide.zeromq.org/page:all#Basic-Reliable-Queuing-Simple-Pirate-Pattern)。在gRPC中,可以通过流式pub-sub连接创建相同类型的拓扑结构。gRPC支持将元数据放入消息中(https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md),这将允许您将消息'路由'到一个'pub-sub'连接可以提取的队列中。
gRPC支持健康检查 (https://github.com/grpc/grpc/blob/master/doc/health-checking.md) 但因为它是HTTP/2,所以需要一个HTTP/2负载均衡器来支持健康检查。不过这并不是个大问题,因为你可以将健康检查与一个HTTP/1.1服务绑定,然后由负载均衡器调用。0mq是一个tcp连接,这意味着负载均衡器可能会在tcp模式下检查“socket connect”以验证连接。虽然这样也能正常工作,但不太理想。同样地,你可以通过在0mq服务前端添加一个HTTP/1.1 web服务器来使负载均衡器从中读取。
两者的文档都很完善。要深入了解0mq技术必须仔细阅读其文档,这需要更多的学习成本。
以下是它们之间的主要区别:
奖励(离题):如果gRPC有像ØMQ这样的可替换传输方式就好了(ØMQ本身也支持UNIX套接字、TCP、PGM和inproc),因为HTTP/2在所有语言中都不稳定,而且比ØMQ慢。此外,在HFT领域,值得关注nanomsg,因为它可以扩展RDMA/SDP/MPI,并实现超低延迟/零拷贝/Infiniband准备。