gRPCのお勉強
gRPCってよく聞くけど触れてこなかった。
ちょっとだけ調べて、こういうことなのかなという理解をまとめる。
そもそもgRPCとは
gRPCはRemote Procedure CallというもともとあったRPCというプログラムを
天下のGoogle様が改良したものらしい。
じゃあRPCとはなんぞ、となるが
RPCというのは、別の場所で動いているプログラムを
あたかも普通にメソッド呼び出しをするように、
実行することができるようにするためのプログラムらしい。
普通だったら外部で動いているプログラムを呼び出すときは、
そのためのREST APIを定義して、それをHTTPSで通信してってなるけど、
RPCは、呼び出す側は通信とかを意識することなく、
メソッドを呼び出す感覚で外部とやりとりができるらしい。
すでに「らしい」の連発だが、
この浅い理解度ですら、なにそれ便利そうやん。
だからmicroserviceとの相性がいい
流行りのmicroserviceとgRPCの相性がいいらしい。
このmicroservice感のやり取りを、
REST APIでやり取りしてたらたまったもんではないだろう。
microserviceを作ったことはないから知らんけど。
異なるservice感のやり取りを、gRPCで行うことで、
service感のやり取りを意識することなく、
モノリシックのように実装ができるのではないだろうか。
知らんけど。
実装の流れ
実装の概念だけでも理解しておこう。
gRPCでは、IDL(インターフェース定義言語)と呼ばれるものを作成し、
そこから好きなプログラミング言語の雛形を生成する。
IDLには、どういうRequestを受け取って、どういうResponseを返すのか、
というのを定義する。
そのIDLから雛形を生成すると、
呼び出す側のClient側のコードも、
受け取る側のServer側のコードも生成することができる。
受け取る側は、雛形をもとに、
Requestを受け取った結果、必要な処理を実装して、
決められたResponseを返す。
呼び出す側は、雛形をもとに、
Requestを作成して、雛形に実装されているメソッドを呼び出す。
すると、IDLに定義されている通りのResponseが返ってくる。
最初にちゃんとInterfaceを定義しないといけない制約は良い。
修正するときもInterfaceから修正しないといけないので、
IDLを見れば、どういうやり取りが発生しているのかを、
把握できて良さそう。
なぜBFFが必要なのか
BFF(Backend for Frontend)という概念がなぜ必要なのか、
完全に理解できていないのだが、
gRPCでは大きい意味があるのかな。
というのも、webブラウザ(JS)からサーバ間のgRPCのやり取りは
現状だとできないらしい。
なので、サーバ間のやり取りはgRPCでやれば良いけど、
フロント⇔サーバのやり取りは従来どおりREST APIにしないといけない。
そうなると、gRPCでやり取りしたデータを、
最終的にREST APIにするサーバが必要になり、
こいつのことをBFFと呼ぶのではないだろうか。
もちろん、それだけがBFFではないだろうけど。
ふんわりとした理解
だけど、
通信を意識せず
メソッドを呼び出すように
外部のプログラムを実行できる
というのが、gRPCの肝なんだなと理解したので、
必要なシーンというのは、なんとなくイメージできた。