我想要使用微服务架构来开发一个项目。 我必须使用php/laravel和nodejs/nestjs。 在我的微服务之间,什么是最好的连接方式?我了解了RabbitMQ,NATS消息传递以及GRPC。 哪种选择更适合微服务? 为什么呢? 提前致谢。
我想要使用微服务架构来开发一个项目。 我必须使用php/laravel和nodejs/nestjs。 在我的微服务之间,什么是最好的连接方式?我了解了RabbitMQ,NATS消息传递以及GRPC。 哪种选择更适合微服务? 为什么呢? 提前致谢。
这些技术满足不同的需求。
gRPC 是一种机制,用于在客户端调用远程(虽然它们不一定是远程的)服务器上的方法。客户端和实现方法的服务器之间通常通过负载均衡器进行紧密耦合。
例如:我(客户端)打电话给星巴克(服务)并点了杯咖啡(方法)。
gRPC 是连接客户端与服务器的某种 API 的替代方案,如 REST、GraphQL 和其他机制。
消息代理(例如 NATS、Rabbit)提供了一种更高级别的抽象,在其中客户端向称为代理的中介服务发送消息(可以使用 gRPC 进行此操作),代理可以将消息排队,并直接将其发送到服务(推送)或等待服务检查其订阅(拉取)。
例如:我(客户端)在某个网站上发布了一则分类广告(代理)。多个人可能会看到我的广告(订阅者),并向我提出购买(方法)物品的要约。某些软件机器人也可能订阅并联系我,提供运输或保险的服务。其他人可能正在监视该网站上的小部件销售情况,以确定是否有市场开设商店销售这些小部件等。
使用代理,客户端可能永远不知道哪些服务器实现了功能(反之亦然)。这是一种松耦合机制,在其中服务可以独立于客户端添加和删除。
如果你需要1:1服务调用时 同步 响应,请使用 gRPC。
如果你不关心哪个服务消费消息(异步 & 服务之间没有紧密耦合),请使用 RabbitMQ。
如果你需要分布式系统来保留事件历史并在另一个服务上重复使用,请使用 Kafka。
基本上,这取决于您是否需要服务之间的异步通信。
那就是您可以在实时通信服务(同步)如 gRPC 或 RPC 和消息队列服务(异步)如 RabbitMQ、Kafka 或 Amazon SQS 之间进行选择。
以下也是其他用户提供的一些好答案: