分布式系统中的消息传递与 RPC(Openstack 与 K8s/Swarm)

Posted

技术标签:

【中文标题】分布式系统中的消息传递与 RPC(Openstack 与 K8s/Swarm)【英文标题】:Messaging vs RPC in a distributed system (Openstack vs K8s/Swarm) 【发布时间】:2018-05-16 02:20:45 【问题描述】:

OpenStack 使用消息传递(我认为默认情况下是 RabbitMQ?)在节点之间进行通信。另一方面,Kubernetes(谷歌内部 Borg 的血统)使用 RPC。 Docker 的 swarm 也使用 RPC。两者都是基于 gRPC/protofbuf 的,这似乎在 Google 内部也被大量使用。

我了解像 Kafka 这样的消息传递平台被广泛用于流数据和日志聚合。但是 OpenStack、Kubernetes、Docker Swarm 等系统需要节点之间的特定交互,而 RPC 似乎是一个自然的选择,因为它允许为特定操作定义 API。

OpenStack 在评估了消息传递与 RPC 的优缺点后是否选择了消息传递?有没有比较好的博客/系统评论比较使用消息传递与 RPC 的大型系统的成功?在可扩展的分布式系统中,消息传递是否比 RPC 更具优势?

【问题讨论】:

我会注意到有一点点错误的二分法。在 RPC 世界中,消息队列仍然有用,例如 gRPC 的 pubsub。但它们不是唯一的选择。 【参考方案1】:

在可扩展的分布式系统中,消息传递是否比 RPC 更具优势?

大多数情况下,持久性是消息传递系统的一大优势。还有一点是广播。您需要自己将其实现为gRPC。服务发现和安全性可能是另一个原因。在消息系统中,您只需要保持一个系统的高度安全,而在 gRPC 中,您可能会有很多人可以闯入系统的地方。消息队列系统通常已经实现了某种服务发现。使用 gRPC,您必须至少使用另一个库。

有没有优秀的人比较使用消息传递与 RPC 的大型系统的成功?

这不是对抗。有不同的用例。消息系统通常比 RPC 协议慢。不仅比 gRPC 慢。原因也很简单。您只需在两个或多个节点之间引入一个中间件。但它们提供持久性、广播、Pub/Sub 等。

Openstack 在评估了消息传递与 RPC 的优缺点后是否选择了消息传递? 可能

在可扩展的分布式系统中,消息传递是否比 RPC 更具优势?

    即用型解决方案,只需使用客户端 坚持 准备使用服务发现 发布/订阅模式 容错

大部分点需要自己用gRPC实现。

【讨论】:

以上是关于分布式系统中的消息传递与 RPC(Openstack 与 K8s/Swarm)的主要内容,如果未能解决你的问题,请参考以下文章

浅谈服务间通信MQ在分布式系统中的使用场景

Java进阶:分布式理论架构设计(自定义RPC)笔记

webservice restful rpc

Actor模型

分布式服务(RPC)+分布式消息队列(MQ)面试题精选

Dubbo3高级特性「框架与服务」RPC全链路调用追踪参数传递(OpenTracing)