我想比较一下grpc与zeromq&的某些功能。它的模式:我想创建一些比较(功能集) - 不知何故 - 0mq是“更好”的套接字 - 但无论如何 - 如果我应用0mq模式 - 我得到可比的'框架'我认为 - 这里0mq似乎是更加灵活......
主要要求是:
任何想法?
谢谢!
答案 0 :(得分:41)
两个库都允许同步或异步通信,具体取决于如何实现通信。有关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 :(得分: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就绪。