哪种方案更适合微服务? GRPC 或像 RabbitMQ 这样的消息代理

问题描述 投票:0回答:4

我想开发一个微服务结构的项目。 我必须使用 php/laravel 和 nodejs/nestjs 我的微服务之间的最佳连接方法是什么?我读到了 RabbitMQ 和 NATS 消息传递 还有 GRPC 哪个选项更适合微服务? 为什么? 预先感谢

rabbitmq microservices grpc messagebroker nats.io
4个回答
34
投票

这些技术满足不同的需求。

gRPC 是一种客户端调用远程(尽管不一定是)服务器上的方法的机制。客户端与实现这些方法的服务器紧密耦合(通常通过负载均衡器)。

例如我(客户)打电话给星巴克(服务)并点(方法)一杯咖啡。

gRPC 是 REST、GraphQL 和其他用于通过某种形式的 API 连接客户端与服务器的机制的替代方案。

消息代理(例如 NATS、Rabbit)提供了更高级别的抽象,其中客户端将消息发送到称为代理的中间服务(这可以使用 gRPC 来完成),并且代理可以对消息进行排队并直接将它们发送到服务(推送)或等待服务检查其订阅(拉取)。

例如我(客户)在某个网站(经纪人)上发布了分类广告。多个人可能会看到我的广告(订阅者)并提出从我这里购买(方法)商品。一些软件机器人也可能会订阅并联系我,提供运输或为我销售的东西提供保险。其他人可能会监视网站上小部件的销售,以确定是否有开设商店来销售这些小部件的市场等。

使用代理,客户端可能永远不知道哪些服务器实现了该功能(反之亦然)。这是一种松散耦合的机制,可以独立于客户端添加和删除服务。


25
投票
  • 如果您需要 1:1 服务调用的同步响应,请使用 gRPC

  • 如果您不关心哪个服务将消费消息(异步且服务之间没有紧密耦合),请使用 RabbitMQ

  • 如果您需要分布式系统来保存事件历史记录并稍后在另一个服务上重用,请使用 Kafka


1
投票

基本上,这取决于您是否想要在服务之间进行异步通信。
此时,您可以在实时通信服务 (Sync)(例如 gRPCRPC)和消息队列服务 (Async)(例如 RabbitMQKafkaAmazon SQS)之间做出决定。

这里还有其他用户的一些很好的答案:


0
投票

微服务之间的最佳连接方法将取决于您项目的具体要求。以下是一些需要考虑的因素:

消息量:如果您需要处理大量消息,那么您将需要像 RabbitMQ 这样可靠且可扩展的消息代理。 延迟要求:如果您需要确保消息快速传递,那么您将需要像 NATS 这样的高性能消息代理。

如果您需要确保消息的安全,那么您将需要一个支持加密和身份验证的消息代理,例如 Kubemq。 易用性:如果您不熟悉消息代理,那么您可能需要选择易于设置和使用的解决方案,例如 NATS。

如果您仍然不确定哪个选项适合您,那么您可以尝试不同的消息代理,看看哪一个最适合您的项目。

以下是有关如何在项目中使用 Kubemq 的一些具体建议:

您可以使用 Kubemq 作为所有微服务的中央消息代理。这将使您能够解耦微服务,并使它们更具可扩展性和弹性。 您可以使用 Kubemq 来实现事件驱动架构。这将允许您的微服务彼此异步通信,从而提高性能和可扩展性。 您可以使用 Kubemq 来实现微服务通信模式,例如请求-响应、发布-订阅和即发即忘。

© www.soinside.com 2019 - 2024. All rights reserved.