grpc和zeromq比较

时间:2016-09-06 13:48:32

标签: zeromq messaging grpc

我想比较一下grpc与zeromq&的某些功能。它的模式:我想创建一些比较(功能集) - 不知何故 - 0mq是“更好”的套接字 - 但无论如何 - 如果我应用0mq模式 - 我得到可比的'框架'我认为 - 这里0mq似乎是更加灵活......

主要要求是:

  • 节点之间的异步请求/ res通信(inproc或远程)
  • 灵活的邮件路由
  • 负载均衡支持
  • 记录良好

任何想法?

谢谢!

2 个答案:

答案 0 :(得分:41)

  • 节点之间的异步请求/ res通信(inproc或远程)

两个库都允许同步或异步通信,具体取决于如何实现通信。有关gRPC,请参阅此页面:http://www.grpc.io/docs/guides/concepts.html。基本上,gRPC允许典型的HTTP同步请求/响应或“类似websocket”的双向流。对于0mq,您可以设置一个简单的REQ-REP连接,它基本上是一个同步通信路径,或者您可以创建异步ROUTER-DEALER类型类型。

  • 灵活的邮件路由

'路由'实质上意味着消息通过某个代理从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连接,这意味着负载均衡器可能会检查tcpmode中的“套接字连接”以验证连接。这可行,但它不是很好。再次,你可以通过负载均衡器读取的HTTP / 1.1网络服务器获得光滑的前端0mq服务。

  • 记录良好

两者都有很好的记录。必须阅读0mq的文档才能完全理解该技术,并且更具有更高的提升能力。

这是一个很大的不同之处:

  1. 0mq是tcp协议,而gRPC是具有二进制有效负载的HTTP。
  2. 0mq要求你设计一个成帧协议(第1帧= verison,第2帧=有效载荷等),而这项工作大部分是在gRPC中为你完成的
  3. gRPC透明地转换为REST(https://github.com/grpc-ecosystem/grpc-gateway),而0mq需要中间件应用程序,如果你想与它谈论REST。
  4. gRPC使用标准tls x509证书(想想网站),而0mq使用自定义加密/身份验证协议(http://curvezmq.org/)。在4.x之前,0mq中没有加密支持,如果你真的想要它,你必须深入研究这个废话:https://wiki.openssl.org/index.php/BIO。 (相信我不要这样做)
  5. 0mq可以创建一些非常恶心的类型(https://github.com/zeromq/majordomo)(https://rfc.zeromq.org/spec:7/MDP/),而gRPC基本上是客户端/服务器
  6. 0mq需要更多时间来构建和运行,而gRPC基本上是编译protobuf消息并将服务导入您的代码。

答案 1 :(得分:25)

不太一样。 gRPC主要用于异构服务互操作性,ZeroMQ(ZMQ / 0MQ /ØMQ)是一种较低级别的消息传递框架。 ØMQ除了传递二进制blob之外不指定有效负载序列化,而gRPC默认选择Protocol Buffers。 ØMQ几乎停留在数据中心/云之间的相同机器或机器上,而gRPC也可能在真实客户端上工作(即移动或网络,它已经支持iOS)。与http2请求/响应链的开销,延迟和复杂性相比,使用ØMQ的gRPC对云内/数据中心服务的速度更快,效率更高。我不确定(甚至是否)gRPC TLS security是否足以满足公共云和移动/网络的使用,但人们总是可以在路由器/控制器级别注入端到端的安全要求(即libsodium)应用程序/应用程序框架的运行并以纯文本模式运行(这也会因为上游漏洞而导致OpenSSL fork BoringSSL导致维护问题)。

对于非常高延迟/低带宽的服务(即火星任务),人们会考虑使用像SMTP(即Active Directory备用复制)或MQTT(即Facebook Messenger,ZigBee,SCADA)这样的传输的RPC

Bonus(off-topic):如果gRPC有像ØMQ这样的备用可插拔传输(它本身也支持UNIX套接字,TCP,PGM和inproc)会很好,因为HTTP / 2在所有语言中都不稳定,它比ØMQ慢。并且,值得关注nanomsg(特别是在HFT世界中),因为它可以通过RDMA / SDP / MPI进行扩展,并使疯狂的低延迟/零拷贝/ Infiniband就绪。

相关问题