Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「ウチも、gRPC使えますか?」

uhzz
October 10, 2021

 「ウチも、gRPC使えますか?」

uhzz

October 10, 2021
Tweet

More Decks by uhzz

Other Decks in Programming

Transcript

  1. 「ウチも、gRPC使えますか?」
    『dev合宿@トスラブ箱根 和奏林』
    2021/10/08 - 09
    @_uhzz_

    View Slide

  2. whoami🤔
    Reo Uehara / 株式会社フクロウラボ
    twitter: @_uhzz_
    github: uh-zz
    箱根は静岡だと思ってました🤔

    View Slide

  3. 箱根、楽しんでいますか〜
    ここに道中撮った写真を貼る

    View Slide

  4. 今日話すこと
    - gRPC is 何?
    - gRPCの何が嬉しいの?
    - サンプル実演会(Rails × Go)
    - まとめ

    View Slide

  5. gRPC is 何?

    View Slide

  6. こんなお悩みはないだろうか
    実装言語ごとに、似たような関数を新しく作ってるけど、、、うーん🤔
    # メッセージを暗号化
    def hash(message)
    return crypt(message)
    end
    // メッセージを暗号化
    func hash(message string) string {
    return crypt(message)
    }

    View Slide

  7. こんなお悩みはないだろうか
    実装言語ごとに、似たような関数を新しく作ってるけど、、、うーん🤔
    # メッセージを暗号化
    def hash(message)
    return crypt(message)
    end
    // メッセージを暗号化
    func hash(message string) string {
    return crypt(message)
    }
    そのお悩み、解決できるかもしれません

    View Slide

  8. RPC -Remote Procedure Call-
    // メッセージを暗号化
    func hash(message string) string {
    return crypt(message)
    }
    サーバーを超えた、リモートでの関数(手続き)呼び出しのこと!
    近年ではHTTP/HTTPSベースかつXML/JSON形式でやりとりするWeb API
    hash関数を呼び出し

    View Slide

  9. gRPC -GoogleによるRPC-
    特定の言語やプラットフォームに依存しない、
    サーバー/クライアントのコードを自動生成するフレームワーク
    https://grpc.io/docs/what-is-grpc/introduction/

    View Slide

  10. RESTなAPIとの違い
    どちらもWeb APIの一種です!
    gRPCには、
    プロトコル内部でHTTP/2を使って通信するけれど、実装する開発者には
    HTTPの存在を意識させない
    特徴があり、一方RESTには、
    「URL+HTTPメソッド」という制約がありつつも、gRPCよりも汎用的に使える
    ので外部/内部システム問わずに使える
    という特徴があってどちらも優劣をつけられるものではありません!

    View Slide

  11. gRPCの何が嬉しいの?

    View Slide

  12. gRPCの特徴
    - サーバー/クライアントのコードを端末間で分散できる
    →マイクロサービスに適している
    - APIの仕様をProtocol BuffersというIDLで作成
    →各言語やプラットフォーム向けのコードをIDLから自動生成
    - HTTP/2上で動作するため、高い通信効率を発揮
    また、通信経路上のコンポーネントすべてがHTTP/2である必要がある
    →システム内部(マイクロサービス)のAPIに最適

    View Slide

  13. マイクロサービス
    モジュール同士をAPI経由で組み合わせるアーキテクチャ
    https://www.ibm.com/blogs/solutions/jp-ja/what-is-microservices/

    View Slide

  14. Protocol Buffers
    Google社内で10年以上使われている構造化されたデータの独自シリアル方式
    言語やプラットフォームに依存しないデータのやり取りができる!!
    https://grpc.io/docs/what-is-grpc/introduction/

    View Slide

  15. コードの自動生成
    protoファイルのアウトプットをProtocol Buffers*でカスタム
    message Person {
    required string name = 1;
    required int32 id = 2;
    optional string email = 3;
    }
    .proto
    Person john = Person.newBuilder()
    .setId(1234)
    .setName("John Doe")
    .setEmail("[email protected]")
    .build();
    output = new FileOutputStream(args[0]);
    john.writeTo(output);
    .java
    Protocol Buffers*による自動生成
    ※生成されたコードからロジックを組み立て
    * `protoc`というProtocol Buffersコンパイラのこと
    https://developers.google.com/protocol-buffers

    View Slide

  16. HTTP/2
    ストリームを多重化させることで、従来のHTTP/1.1よりも高速
    https://blog.redbox.ne.jp/http2-cdn.html

    View Slide

  17. サンプル実演会(Rails × Go)

    View Slide

  18. サンプルを用意しました!
    スマートキャンプさん、ありがとう📛
    https://tech.smartcamp.co.jp/entry/2019/03/28/175137

    View Slide

  19. ピンときて、ポン
    /pingというパスにアクセス pongとレスポンスを返す
    RailsからGoをgRPC経由で
    呼び出します

    View Slide

  20. grpc-sample
    https://github.com/uh-zz/grpc-sample

    View Slide

  21. まとめ

    View Slide

  22. gRPC、、どうでしたか
    - RESTの撤廃ではなく、相乗りできる未来がある
    - protoファイルでAPI定義を一元化できるのは魅力的
    - マイクロサービス化にはもってこい
    - 言語の選択肢をなくさないソリューション
    なんかよさそう🤔

    View Slide

  23. 参考
    [OpenStindia](https://openstandia.jp/oss_info/grpc/)
    [Introduction to gRPC](https://grpc.io/docs/what-is-grpc/introduction/)
    [Protocol Buffers](https://developers.google.com/protocol-buffers)
    [HTTP/2の特徴HTTP/1.1との違いについて](https://blog.redbox.ne.jp/http2-cdn.html)
    [サービス間通信のための新技術「gRPC」入門](https://knowledge.sakura.ad.jp/24059/)
    [API設計:gRPC、OpenAPI、RESTの概要と、それらを使用するタイミングを理解す
    る](https://cloud.google.com/blog/ja/products/api-management/understanding-grpc-openapi-and-rest-and-when-to-use-them)
    [初めてのgRPC/ Starting gRPC](https://speakerdeck.com/line_developers/starting-grpc)
    [コピペでできるGoでgRPCサーバ立ててRailsからアクセスする方法](https://tech.smartcamp.co.jp/entry/2019/03/28/175137)
    [マイクロサービスとは何か -IBM Cloud Blog](https://www.ibm.com/blogs/solutions/jp-ja/what-is-microservices/)

    View Slide