grpc和zeromq比较

use*_*252 36 messaging zeromq grpc

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

主要要求是:

  • 节点之间的异步req/res通信(inproc或远程)
  • 灵活的消息路由
  • 负载均衡支持
  • 有据可查

有任何想法吗?

谢谢!

小智 46

  • 节点之间的异步req/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消息并将服务导入到您的代码中.


小智 29

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

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

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

  • 我设法在 iOS 和 Android 上构建 zmq 并在我的应用程序中使用它。 (3认同)