当前位置: 首页 > 知识库问答 >
问题:

将gRPC和/或GraphQL用于微服务体系结构

谢鸿羲
2023-03-14

gRPC以其性能和效率似乎成为微服务内部通信的热门选择。

然而,gRPC使得查询关系数据变得更加困难,并且需要更多的工作来挂接到我们的API网关。

另一个选择是每个微服务实现它们自己的GraphQL模式,这样它们就可以使用API网关中的Apollo Federation轻松地拼接在一起。

  1. 我们如何决定使用哪种方法?
  2. 有没有什么值得我们考虑的显著优势?例如。在易用性、可维护性、可伸缩性、性能等方面?
  3. 对于此用例,是否有更好的替代方案?

共有1个答案

苏星宇
2023-03-14

这取决于您正在实现的整体架构。

我建议同时使用GraphQL和GRPC:

>

  • 使用Apollo Federation作为边界节点,无缝地处理来自使用GraphQL进行对话的前端的请求。

    使用六边形架构(我们在我的公司使用显式架构)来实现DDD-领域驱动-设计。

    为了无缝集成Apollo,您必须将GraphQL层实现到所有后端服务的体系结构中。

    在读取模型中,实现GraphQL层。您将从联邦中受益(来自多个微服务的数据的并行读取将在联邦引擎中“加入”,而不需要您的API节点的任何参与)。

    为了在write模型(突变)中进行后端服务之间的通信,请使用GRPC。

    gRPC可以像本地一样远程调用CQRS命令。

    因此,远程微服务看起来就像是本地后端代码的一部分。

  •  类似资料:
    • 我最近开始使用Node.js,我必须构建一个应该使用多个Express.js服务的体系结构。其中一些服务必须位于一台服务器上,另一台则位于其他服务器上。我想构建一个基础服务(像API网关),但是我不知道在这个网关和微服务之间,或者在两个微服务之间进行通信的合适方式是什么。 目前我正在研究一个基于此的解决方案:

    • 我想知道每种方法的利弊是什么。例如,在graphQL中包含所有内容似乎有点多余,因为我们将在每个服务中复制模式的部分。另一方面,我们使用GraphQL来避免一些REST缺陷。我们担心拥有RESTendpoint会抵消从GQL获得的优势。 有人遇到过类似的困境吗?我们都没有使用GraphQL的经验,所以这里是否有一些明显的利弊我们可能会遗漏? 提前道谢!

    • 我有一个微服务体系结构,它的日志必须发送到远程Kafka主题。在它旁边,本主题的使用者将把日志发送到麋鹿堆栈(另一个团队) 我想要一个专用的微服务(fwk proxy elasticsearch),其职责是收集其他人的日志,并将其发送到远程Kafka主题。 将从我的微服务聚合的所有日志分派到fwk-代理-弹性搜索微服务的最佳协议是什么? 我希望这个模式不会重复远程Kafka主题的安全配置。我想把它

    • 我经常听说,在微服务架构中,对于每一个微服务,我们都必须创建单独的数据库。 但是,如果我必须在不同的数据库中维护外键约束,这是不可能的。就像我在身份验证微服务中有一个用户表,我想在我的目录服务中使用它(用户表中的用户 ID 列) 那么如何解决呢。 感谢提前

    • 我不清楚如何取回购买服务不保存的数据--例如:用户的全名。当试图通过购买用户名进行更复杂的搜索购买时,问题会变得更严重。 我认为,显然可以通过在两个服务之间同步用户来解决这个问题,方法是在用户创建时广播某种类型的事件(并在购买服务端只保存相关的用户属性)。在我看来,这远非理想。当你有数百万用户时,你如何处理这个问题?您会在每个使用用户数据的服务中创建数百万条记录吗? 另一个明显的选择是在用户服务端

    • 我正在开发具有微服务架构的后端。我对该架构不熟悉,目前我在一个容器中开发了3个微服务(RESTful Web服务,带有Spring Boot)。我想实现OAuth2和JWT Rest Prot和网关。使用授权服务器和资源服务器实现网关是正确的吗?我在架构上做错了什么吗? 谢谢你的回复