2022幎11月10日·1分で読めたす

gRPCずは

gRPC は、API を蚭蚈するための埓来の RPC アプロヌチの曎新版です。gRPCの長所ず短所を知るには、こちらをお読みください。

gRPCずは

ほずんどの゜フトりェアアプリケヌションは、いく぀かの理由で他のコヌドず接続できる必芁がありたす。これは、統合から新機胜の远加たで、䜕でもありです。゜フトりェアが他のアプリケヌションずリンクできるように、たた他のプログラムずの統合を確実にするために、開発者は APIを 䜿甚したす。これが、ほずんどの゜フトりェアにApplication Programming Interfaceが必芁な理由です。APIは、システム間の橋枡しの圹割を果たすこずで、個人がさたざたなWebサヌビスにアクセスするこずを可胜にしたす。したがっお、プロゞェクトにAPIを提䟛するために適切な技術を遞ぶこずが重芁である。

アプリケヌションやプラットフォヌムをナヌザヌず共有したい組織は、APIを䜿甚する必芁がある。APIを開発し、アプリケヌションに最適なものにするために埮調敎する方法はたくさんある。プログラマがAPIを蚭蚈するために䜿甚しおいる最新の方法の1぀がgRPCです。ここでは、gRPCずは䜕か、たたその長所ず短所に぀いお芋おいきたしょう。

gRPC ずは

gRPC はGoogle Remote Procedure Call の略です。gRPC はオヌプン゜ヌスの RPC フレヌムワヌクで、スケヌラブルで迅速な API を䜜成するために䜿甚されたす。gRPC は、Google、IBM、 Netflix などのトップクラスの技術䌁業で採甚されおいたす。gRPCフレヌムワヌクは、HTTP/2、プロトコルバッファなどの最先端技術スタックに䟝存し、最適なAPI保護、高性胜なリモヌトプロシヌゞャコヌル、およびスケヌラビリティを実珟しおいたす。

RPCsずは䜕ですか

RPC ずREST は、歎史的にAPIを構築するための2぀の別個のアプロヌチであった。さらに、Representational State Transfer SOAPや GraphQL のようなプロトコルもこの目的のために䜿甚されおいたす。リモヌトプロシヌゞャコヌルは、異なるデバむス䞊で実行されるかもしれないが、ロヌカルで実行されるかのように゜フトりェアを曞くこずができたす。

APIを蚭蚈するためのフレヌムワヌクずしおは、最も慣甚的なものです。RPC は、やり取りがシンプルで内容が軜量なため、API を䜜成するための生産的な手法です。gRPC サヌビスもこの通信アヌキテクチャを暡倣しおいたす。RPC はIDL -Interface Definition Language でデヌタ型ず呌び出されるメ゜ッドを契玄しおいたす。RPCから採甚されたgRPCサヌビスは、近幎、非垞に人気がありたす。

なぜgRPCサヌビスが開発されたのでしょうか。

倚くの䌁業が統合のためのチャネルを開攟するに぀れ、そのような゜フトりェアをリンクするこずが困難になっおきおいたす。RPC APIは統合するのが難しく、配垃するにも内郚仕様が開瀺される可胜性があるためリスクが高い。たた、APIは倚くのプログラミング蚀語で開発され、その基盀ずなるフレヌムワヌクず密接に結び぀いおいたす。

この問題を解決し、APIぞのアクセス性を高めたのが、2000幎に登堎した REST API だ。具䜓的には、GET 、PUT 、 POST などの暙準的な HTTP 技術を䜿っお、アセットを介しお間接的に情報を取埗する䞀貫した方法をナヌザヌに提䟛したした。RPC ずREST API の䞻な違いは、RPC では、プロセスに察応しおいるが、様々なシステムにおけるプロセスがどのようなものでありうるかを予枬するこずは容易ではない。

REST API は、倚くのアプリケヌションを扱うための拡匵フォヌマットを提䟛しながらも、倧量のメタデヌタを生成するため、ストレヌトで軜量のRPC を完党に眮き換えるこずはできたせんでした。その結果、最終的にFacebookのGraphQL 、GoogleのgRPCサヌビスが登堎するこずになったのです。

Googleは2015幎に、様々な手法で䜜られた倚数のマむクロサヌビスアヌキテクチャを接続するためのRPCフレヌムワヌクの远加ずしおgRPCを構築したした。 gRPCはもずもずGoogleのコアむンフラず密接に関係しおいたしたが、最終的にはオヌプン゜ヌス化され、䞀般ナヌザヌによる利甚も暙準化されたした。

gRPCのコンセプトの抂芁

JSONやXMLよりも高性胜で、APIの敎合性が高いずいう最先端技術の掻甚が、gRPCの誕生ず普及に寄䞎しおいたす。gRPCの抂念ずしお知っおおくべきものをいく぀か玹介したす。

プロトコル・バッファ

Protobuf ずしお知られるプロトコル・バッファは、アプリケヌションの定矩ずクラむアント・ラむブラリのコヌド生成を自動的に行うこずを容易にするシリアラむズたたはデシリアラむズの暙準です。最新版であるproto3 は、よりシンプルに䜿甚でき、gRPC の最新機胜を提䟛したす。

.Proto ファむルは、gRPC サヌビスず、gRPC クラむアントずサヌバメッセヌゞ間の通信を可胜にしたす。.proto ファむルは、実行時にProtobuf コンパむラ -protoc によっおメモリにロヌドされたす。このコンパむラは、バむナリデヌタをシリアラむズ、デシリアラむズするためにメモリ内構造を採甚した gRPC クラむアントず gRPC サヌバアプリケヌションを構築したす。各通信は、gRPC のコヌド生成に続いお、ナヌザずリ モヌトサヌビス間で送受信されたす。

デヌタがバむナリ圢匏に倉換され、暗号化された信号が小さくなるため、Protobuf による解析は gRPC のCPU の䜿甚電力が少なくなりたす。そのため、携垯電話のようなCPU の匱いコンピュヌタでも、gRPC を䜿えばより速くメッセヌゞが送信されたす。

HTTP/2

gRPC サヌビスは、HTTP/1.1 の制限の少ないバヌゞョンである HTTP/2 で構築されおいたす。叀い HTTP プロトコルでも動䜜したすが、HTTP/2 は gRPC のためにいく぀かの高床な機胜を備えおいたす。これにはバむナリフレヌムレむダヌが含たれ、HTTP/2の各ク゚リず返信をより小さなメッセヌゞに分割し、バむナリ圢匏でフレヌム化するこずでメッセヌゞの配信を改善したす。さらに、gRPCは、クラむアントずgRPCサヌバヌからの双方向党二重ストリヌミングによる耇数のリク゚ストずレスポンスをサポヌトしたす。

HTTP/2は、飛行䞭のパケットをバッファリングするために必芁なRAM を正確に制埡するこずができるフロヌ制埡方匏を備えおいたす。たた、gRPCサヌビスのヘッダヌ圧瞮も可胜です。HTTP/2 では、ヘッダも含めおすべおが送信前に暗号化され、高性胜なリモヌトプロシヌゞャコヌルを提䟛したす。gRPC は HTTP/2 で非同期ず同期の䞡方の凊理を提䟛し、さたざたな察話型およびストリヌム型の RPC の実行を可胜にしたす。

これらのHTTP/2の特城を生かし、gRPCサヌビスはより少ないリ゜ヌスで利甚できるため、クラりドベヌスアプリケヌションずgRPCサヌビス間の応答時間の短瞮や、モバむルデバむスで動䜜するgRPCクラむアントのバッテリヌラむフの延長に぀ながりたす。

ストリヌミング

gRPC がサポヌトする重芁なアむデアは、単䞀のリク゚スト内で耇数のプロセスを実行できるストリヌミングです。gRPC は HTTP/2 の倚重化機胜によっおこれを実珟し、1 ぀のTCP -Transmission Control Protocol - 接続で耇数の応答たたはリク゚ストを同時に送信たたは受信するこずが可胜になりたす。䞻なストリヌミング圢匏は、サヌバストリヌミング RPC、クラむアントストリヌミングRPCs、および双方向ストリヌミングRPCs です。

チャンネル

HTTP/2ストリヌムが1぀のリク゚スト接続で倚数の同時ストリヌムを蚱可するのずは察照的に、gRPCのチャンネルは耇数のリク゚ストにたたがる耇数の連続したストリヌムをサポヌトしたす。チャネルは、クラむアントスタブを構築し、特定の IP ずポヌトにある gRPC サヌバにリンクするメカニズムを提䟛するために採甚されたす。

gRPCアヌキテクチャ

gRPC アヌキテクチャは gRPC クラむアントず gRPC サヌバから構成されたす。党おの gRPC クラむアントサヌビスはスタブたたは自動生成されたファむルを含んでおり、これはアクティブなリモヌトプロセスを含むむンタフェヌスに類䌌しおいたす。gRPCクラむアントは、gRPCサヌバのメッセヌゞに転送される匕数を含むスタブに察しおロヌカルプロシヌゞャコヌルを開始したす。gRPCクラむアントのスタブは、Protobuf マヌシャリング手順を甚いお匕数をシリアラむズした埌、ロヌカルコンピュヌタ䞊のロヌカルクラむアント時間ナニットにク゚リを送信したす。

OSはHTTP/2プロトコルを甚いお遠方のサヌバヌコンピュヌタず通信する。サヌバヌのOSはメッセヌゞを受け取り、サヌバヌスタブプロセスを呌び出す。サヌバヌスタブプロセスは、受信したパラメヌタヌをデコヌドした埌、Protobuf を䜿甚しお適切なオペレヌションを呌び出す。その埌、クラむアントのトランスポヌト局は、サヌバスタブから暗号化された応答を受信する。gRPCクラむアントスタブが応答メッセヌゞを受け取り、提䟛された匕数をアンラップした埌、実行は呌び出し元に戻されたす。

gRPCの長所

gRPC は他の API 蚭蚈メカニズムに比べ、いく぀かの利点がありたす。たた、gRPC はRPC の構造を改良しおいたす。以䞋は、gRPC サヌビスの最も顕著な利点です。

  • 高性胜なリモヌトプロシヌゞャコヌル

Protobuf ず HTTP/2 を䜿甚するこずで、gRPC サヌビスは REST+JSON むンタラクションの最倧 10 倍のハむパフォヌマンスず API プロテクションを提䟛したす。サヌバヌプッシュ、マルチプレクシング、ヘッダヌ圧瞮の䜿甚により、HTTP/2はgRPCサヌビスに高性胜なランキングを提䟛したす。倚重化によっお行頭の遅延をなくす䞀方で、サヌバヌプッシュによっお、HTTP/2は必芁な前にサヌバヌからクラむアントに資料をプッシュするこずができたす。メッセヌゞは HTTP/2 によっおより効果的に圧瞮され、その結果 gRPC サヌビスでより速い読み蟌みを実珟したす。

  • ストリヌミング

ストリヌミングgRPCサヌビスのサヌビス蚘述には、クラむアントたたはサヌバヌ偎のストリヌミングの原則が既に含たれおいたす。その結果、gRPCクラむアントやストリヌミング・サヌビスの構築が非垞に容易になりたす。

  • コヌド生成

gRPC クラむアントおよび gRPC サヌバプロ グラムのコヌド生成は、gRPC web アプロヌチの 重芁なコンポヌネントです。.proto ファむルからのコヌド生成のために、gRPC モゞュヌルは.protoc コンパむラを採甚しおいたす。Protobuf 圢匏は、gRPC のコヌド生成を通じお制埡され、デヌタ圢匏ずアプリケヌション゚ンドポむントの䞡方を定矩するために䜿甚されたす。クラむアント偎のネットワヌクスタブやサヌバ偎のスケルトンを䜜成するこずができ、gRPCサヌビスにおける様々なサヌビスを利甚したプログラムの蚭蚈に必芁な時間を短瞮するこずができたす。

  • 盞互運甚性

Java、Ruby.、C# など、数倚くのシステムや プログラミング蚀語がありたす。 GoC# など、数倚くのシステムずプログラミング蚀語が、gRPC のリ゜ヌスずラむブラリによっおサポヌトされおいたす。これらのプログラミング蚀語により、開発者は gRPC の完党なクロスプラットフォヌム互換性を利甚しながら、パフォヌマン トなアプリケヌションを䜜成するこずができたす。これは、Protobuf バむナリ配線圢匏ず、ほがすべおのシステムに察する効果的なコヌド生成のおかげです。

  • セキュリティ

gRPCは、サヌバヌずgRPCクラむアント間のデヌタ暗号化および認蚌にSSL/TLSを採甚するこずを掚奚しおおり、TLS゚ンドツヌ゚ンド暗号化セッション䞊でHTTP/2を甚いおAPIセキュリティを確保しおいたす。

  • 生産性ずナヌザビリティ

gRPC はRPC の完党な代替であるため、幅広いシステム や蚀語で問題なく動䜜したす。たた gRPC には優れたツヌルがあり、必芁な定型 コヌドの倚くは手動で生成されたす。gRPC を䜿甚するこずで倧幅に時間を節玄できるため、゚ンゞニアはコア機胜により集䞭するこずができたす。

gRPC の短所

瀟内ツヌルを玠早く提䟛
既存システムやAPIず統合する管理パネルやポヌタルを䜜成したす。
アプリを構築

gRPCの欠点がいずれ解決されるこずを期埅するこずはできたすが、珟圚、その䜿甚にはいく぀かの問題がありたす。gRPCの短所ずしおは、以䞋のようなものがありたす。

  • 成熟床の䜎さ

技術の発展は、採甚の倧きな障壁ずなり埗たす。これは gRPC を䜿甚する際にも明らかです。GraphQLgRPC の同業者の䞀぀である、株匏䌚瀟゚ヌ・ティ・ティ・ドコモは、StackOverflow で 14k 以䞊のク゚リを持っおいたすが、gRPC は珟圚 4k を少し䞋回るだけです。gRPC コミュニティは、HTTP/2 やプロトコ ルバッファに察するプログラマの支揎が Google 以 倖にはあたりないため、ベストプラクティスや解 決策、成功䟋に関する知識に欠けおいたす。しかし、gRPCコミュニティが拡倧し、新しい開発者を匕き蟌むに぀れお、これは最終的に進化するでしょう。

  • 限られたブラりザのサポヌト

珟圚のgRPC WebブラりザはHTTP/2フレヌムを凊理できないため、ブラりザからgRPCサヌビスを効果的に呌び出すこずができたせん。その結果、gRPCでプロキシを利甚する必芁がありたすが、これにはいく぀かの欠点がありたす。

  • 人間には読めない

XML や JSON ずは異なり、Protobuf ファむルはデヌタがバむナリ圢匏に圧瞮されおいるため、人間が読むこずはできたせん。開発者は、ペむロヌドの評䟡、トラブルシュヌティング、手動ク゚リの䜜成に、server reflection protocol や gRPC command prompt などの远加ツヌルを䜿甚する必芁がありたす。

  • 深い孊習曲線

RESTやGraphQLが䞻にJSONを䜿甚するのずは察照的に、プロトコル・バッファに慣れ、HTTP/2の摩擊に察凊する方法を発芋するのに時間がかかるだろう。

AppMaster はどのように圹立぀のか

APIをアプリに倉える
手䜜業で党おコヌディングせずに、APIに接続するWebやモバむルアプリを䜜成したす。
AppMasterを詊す

ノヌコヌド 生成は、人々のプログラミングに察する芋方を倉え぀぀ある。ノヌコヌド生成によっお、人々は コヌド生成で より速く゜フトりェアを孊び、䜜成するこずができるようになりたす。AppMasterのようなノヌコヌド生成プラットフォヌムを䜿えば、アプリケヌションのコヌド生成はよりシンプルになりたす。コヌド生成は保護されおおり、䜜成されたコヌドはあなただけに垰属するため、所有暩の問題もありたせん。AppMasterを䜿甚するこずで、クラむアントおよびサヌバ・アプリケヌションをより速く、より簡単に䜜成するこずができたす。

AppMasterのコヌド生成䞍芁のプラットフォヌムにより、開発者はgRPCプロトコルを䜿甚しお、バック゚ンドのマむクロサヌビス・アヌキテクチャ間でリク゚ストを行うこずができたす。来幎は、gRPC WebずgRPC Mobileアプリケヌションの䞡方ぞのAPIを含めるこずで、gRPCサポヌトを拡匵する予定です。

たずめ

gRPC サヌビスには、䌁業や開発者にずっお魅力的ないく぀かの利点がありたすが、最終的に、REST や SOAP のような他のサヌビスではなく gRPC サヌビスを䜿甚するかどうかは、アプリケヌションに䟝存したす。ある゜フトりェアは gRPC を䜿甚するこずで高いパフォヌマンスを埗るこずができたすが、他の゜フトりェアはその代甚品に適しおいるかもしれたせん。gRPC サヌビスの欠点ず利点を理解した䞊で、自分にずっお有効かどうかを刀断する必芁がありたす。

始めやすい
䜕かを䜜成する 玠晎らしい

無料プランで AppMaster を詊しおみおください。
準備が敎ったら、適切なサブスクリプションを遞択できたす。

始める
gRPCずは | AppMaster