哪个选项更适合微服务?GRPC还是像RabbitMQ这样的消息代理?

26

我想要使用微服务架构来开发一个项目。 我必须使用php/laravel和nodejs/nestjs。 在我的微服务之间,什么是最好的连接方式?我了解了RabbitMQ,NATS消息传递以及GRPC。 哪种选择更适合微服务? 为什么呢? 提前致谢。

3个回答

37

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

gRPC 是一种机制,用于在客户端调用远程(虽然它们不一定是远程的)服务器上的方法。客户端和实现方法的服务器之间通常通过负载均衡器进行紧密耦合。

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

gRPC 是连接客户端与服务器的某种 API 的替代方案,如 REST、GraphQL 和其他机制。

消息代理(例如 NATS、Rabbit)提供了一种更高级别的抽象,在其中客户端向称为代理的中介服务发送消息(可以使用 gRPC 进行此操作),代理可以将消息排队,并直接将其发送到服务(推送)或等待服务检查其订阅(拉取)。

例如:我(客户端)在某个网站上发布了一则分类广告(代理)。多个人可能会看到我的广告(订阅者),并向我提出购买(方法)物品的要约。某些软件机器人也可能订阅并联系我,提供运输或保险的服务。其他人可能正在监视该网站上的小部件销售情况,以确定是否有市场开设商店销售这些小部件等。

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


30
  • 如果你需要1:1服务调用时 同步 响应,请使用 gRPC。

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

  • 如果你需要分布式系统来保留事件历史并在另一个服务上重复使用,请使用 Kafka。


值得一提的是,gRPC支持类似于WebSocket的异步消息流。 - saolof

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接