Dun*_*Luk 4 architecture rpc microservices grpc graphql
在我的公司,我们即将建立一个新的微服务架构,但我们仍在尝试决定哪种协议最适合我们的用例。
在我们的例子中,我们有一些服务被其他服务内部调用,但也通过 GraphQL API 网关向我们的客户端公开。
由于其性能和效率,gRPC 似乎是微服务内部通信的流行选择。
然而,gRPC 使得查询关系数据变得更加困难,并且需要更多的工作来连接到我们的 API 网关。
另一种选择是让每个微服务实现自己的 GraphQL 模式,以便在 API 网关中使用 Apollo Federation 轻松地将它们拼接在一起。
这种方法将使查询更加灵活,但由于缺乏协议缓冲区,内部请求的性能会降低。
也许另一种选择是通过在 gRPC 中实现突变和在 GraphQL 中实现查询来利用两全其美。或者只是创建两个 API,一个面向网关客户端,一个用于服务之间的通信。
这取决于您正在实施的整体架构。
我建议同时使用 GraphQL 和 gRPC:
使用Apollo Federation作为边界节点来无缝处理来自前端使用 GraphQL 交谈的请求。
在您的 API 和微服务上使用CQRS模式,并将读取模型与写入模型严格分开。
使用六边形架构(我们在我公司使用显式架构)来实现DDD - Domain-driven-design。
为了无缝集成 Apollo,您必须将 GraphQL 层实现到所有后端服务的架构中。
在读取模型中,实现 GraphQL 层。您将从联合中受益(来自多个微服务的数据的并行读取将在联合引擎中“加入”,而无需您的 API 节点的任何参与)。
对于写入模型(突变)中的后端服务之间的通信,请使用gRPC。
gRPC 将使您可以像在本地一样远程调用您的 CQRS 命令。
因此,您的远程微服务看起来就像是本地后端代码的一部分。
归档时间: |
|
查看次数: |
1314 次 |
最近记录: |