关于gRPC和GraphQL在微服务中的用法以及BFF技术选择的问题

gRPC和GraphQL

我以前就对gRPC这个词有所了解,只是认为它是一种新的Rest API,但并不太清楚。

作为一个工程师,
我认为在被使用过一次之后需要调查相关事项,
我看了Mercari的文章,稍微理解了一点,所以我写了这篇文章。

虽然下面的解释比较简略,但请多多关照。

首先,gRPC通常用于微服务之间的通信,
而GraphQL经常用于前端和后端之间的通信。

GraphQL是由Facebook开发的一种新的API通信规范。简单来说,它可以通过发送查询来只获取所需的数据,从而减少通信负荷。

 

关于在微服务中使用gRPC和GraphQL的方式,

最前端后台 (Front-end Backend)

最近似乎越来越常见以这种设计方式制作。

 

BFF采用企业

美丽加和佐佐某以及安卓平板等公司已被使用。

 


BFF在前端和后端(每个微服务)之间进行中转。

这是类似于路由的东西。

为了改善被认为很慢的微服务的速度,在那个时候,需要采取措施。

前台和BFF之间的通信是通过GraphQL进行的,而BFF与后端(使用微服务构建的)之间的通信则是通过gRPC进行的,这样可以保持速度不受影响。

スクリーンショット 2022-06-18 16.14.57.png

关于BFF技术选择

然而,BFF需要通过GraphQL与前端进行通信,并需要与后端进行gRPC交互,
因此BFF似乎需要同时使用GraphQL和gRPC。

因此,BFF通常使用Node.js框架NestJS。

 

スクリーンショット 2022-06-18 15.01.02.png

 

抽取一篇文章部分

──効率性と将来性を考えてGraphQLを採用されたのですね。

末田:ライブラリについても言及すると、BFFの実装にはNestJSのGraphQLのモジュールを使用しています。
コードを書いてデコレーターでスキーマ情報を定義し、自動的にスキーマを書き出すコードベースの方式を採用しています。

全体としては、BFFサーバーの中でgRPCクライアントを生成し、そこから各マイクロサービスにリクエストして、各フィールドに必要な情報を取得しています。

──なるほど。技術選定の際、NestJS以外の候補はありましたか?

名村:マイクロサービスに対するアクセスとGraphQLのインターフェースを両方カバーしているフレームワークは、NestJS以外にあまりないんですよ。

また、NestJSはJavaのようなDependency Injection(DI)の考えがあるので、DIの仕組みに乗っかっていれば、
マイクロサービスが肥大化してもコード量をたくさん増やさなくてもいい。必要なサービスをGraphQLのリゾルバーで呼び出すことができると思ったので、NestJSを採用しました。

使用する上での制約もありますが、DIのレイヤーで依存関係を構築できたので、NestJSを採用して良かったと思っています。

广告
将在 10 秒后关闭
bannerAds