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

gRPCを使ったメディアサービス2

mahiguch
September 11, 2019

 gRPCを使ったメディアサービス2

「グリーグループモバイルアプリ勉強会 Vol.1」でのLT資料です。
https://gree.connpass.com/event/142728/

mahiguch

September 11, 2019
Tweet

More Decks by mahiguch

Other Decks in Programming

Transcript

  1. Copyright © LIMIA, Inc. All Rights Reserved.
    gRPCを使った
    メディアサービス2

    View Slide

  2. Copyright © LIMIA, Inc. All Rights Reserved.
    ● グリーグループのリミア株式会社で、LIMIA という住まい領域のメディア
    を作っています。ゲーム会社ですが、最近はメディアに力を入れていま
    す。
    ● 機械学習のエンジニアですが、iOS, Android,JSなどもやっている何でも
    屋です。5歳の娘のパパ。twitter: @mahiguch1
    ● 部活動でグリー技術書典部というのを立ち上げました。
    ● https://limia.jp/
    ● https://arine.jp/
    ● https://aumo.jp/
    ● https://www.mine-3m.com/mine/
    Masahiro Higuchi/樋口雅拓 技術書典[email protected]い05C
    2

    View Slide

  3. Copyright © LIMIA, Inc. All Rights Reserved.
    背景と目的

    View Slide

  4. Copyright © LIMIA, Inc. All Rights Reserved.
    LIMIAとは?
    4
    ● メディアサービス
    ● Android, iOS, Web
    ● 記事一覧を表示し、タップすると
    記事詳細を閲覧できる。
    ● 記事一覧はパーソナライズ。
    ● 記事詳細読了後に関連記事を出
    している。
    ● AWS:90%、GCP:10%。
    ● PHP/EC2 → Go/ECS移行中
    ● コンテナ間はgRPC+NLB
    ● 偏りが激しいのでEnvoy使いたい

    View Slide

  5. Copyright © LIMIA, Inc. All Rights Reserved.
    興味があること
    5
    LIMIAに最も適したシステムは、何だろう?
    ● インフラ: Kubernetes/ECS/Lambda/EC2/CF/Firebase
    ● Backend FW: gin/Laravel/Django/Rails/gRPC/使わない
    選択肢が多すぎて、よくわからない! → とりあえず色々試してみよう。
    試した結果、gRPCが良さそう。 https://speakerdeck.com/mahiguch/grpcwoshi-tutamedeiasabisu
    もう一度、これを試してみます。

    View Slide

  6. Copyright © LIMIA, Inc. All Rights Reserved.
    【前回試したこと:とりあえず動くか】
    起動直後(MainFragment::onActivityCreated)、gRPC Serverにリクエ
    ストして、callbackでViewに追加。
    【今回試したこと:実際使おうとしたときの問題点】
    リストの末尾まで到達(PagedList::BoundaryCallback)したら、gRPC
    Serverにリクエスト、LiveDataでViewを更新。
    今回試すこと
    6

    View Slide

  7. Copyright © LIMIA, Inc. All Rights Reserved.
    今回試すことの図
    左図のRetrofitをgRPCに置き換えたのが右図
    7

    View Slide

  8. Copyright © LIMIA, Inc. All Rights Reserved.
    要素技術の説明

    View Slide

  9. Copyright © LIMIA, Inc. All Rights Reserved.
    gRPCとは?
    9
    ● RPCを実現する通信方式の一つ
    ● Googleが作っている
    ● Protocol buffersという形式で
    データをシリアライズして送受信
    している。

    View Slide

  10. Copyright © LIMIA, Inc. All Rights Reserved.
    Protocol Bufferとは?
    10
    ● Request/Responseのフォーマットを指定
    すると、それでシリアライズしてくれる。
    ● 通信部分のコードを自動生成してくれる
    ので、そこに時間を割かれるのを防げ
    る。
    ● ただし、エラー定義は書けないので、そこ
    はコメントで書いておくなど、チーム内で
    ルールを決めておく必要がある。

    View Slide

  11. Copyright © LIMIA, Inc. All Rights Reserved.
    AAC(Android Architecture Components)とは、便利なライブラリ集。使う
    と便利なのは分かっているが、既存アプリへの導入は工数がかかるため、みん
    な少しづつ入れている。今回利用するAACは、次の4つ。
    ● LiveData: 基盤となるデータベースが変更されたときにビューに通知する
    ● Paging: データソースからオンデマンドで情報を徐々に読み込む
    ● Room: SQLite データベースにスムーズにアクセスする
    ● ViewModel: ライフサイクルを意識した方法で UI 関連のデータを管理
    する
    AACの説明
    11

    View Slide

  12. Copyright © LIMIA, Inc. All Rights Reserved.
    本題

    View Slide

  13. Copyright © LIMIA, Inc. All Rights Reserved.
    ● 一覧を取ってきて表示するアプリ
    において、RetrofitをgRPCに置
    き換えてみた。
    ● ベースは、AACのサンプルアプ
    リ。見た目は同じ。
    https://github.com/googlesamples/android-architecture-co
    mponents/tree/88747993139224a4bb6dbe985adf652d557
    de621/PagingWithNetworkSample
    今回作った検証アプリについて
    13

    View Slide

  14. Copyright © LIMIA, Inc. All Rights Reserved.
    .proto files
    14
    RPC IFをserviceに、データのフォーマットを messageに記載する。
    エラーコードなど異常系は、ここでは管理できない。

    View Slide

  15. Copyright © LIMIA, Inc. All Rights Reserved.
    自動生成されたmethodを呼び出しているだけ。
    API call
    15

    View Slide

  16. Copyright © LIMIA, Inc. All Rights Reserved.
    AAC Pagingを使うと、リスト開始や末尾でcallbackが呼ばれる。そこで、API
    call methodを呼び出す。レスポンスの処理はRepositoryから渡された
    callbackで行う。
    BoundaryCallback
    16

    View Slide

  17. Copyright © LIMIA, Inc. All Rights Reserved.
    Server側は、Clientから呼び出したmethodをoverrideする形で実装する。
    Client/Server共にかなりシンプルに実装できる。
    Server
    17

    View Slide

  18. Copyright © LIMIA, Inc. All Rights Reserved.
    ● Retrofitに依存している部分が多く、思ったより大変だった。
    ● 今回はRetrofitからgRPCに切り替えたが、本番導入するなら共存する必
    要がある。つまり、結構工数がかかりそう。
    ● gRPC対応するとIFの型が保証されるが、大きな工数をかけてでも解決し
    たい問題かというと。。。
    ● RetrofitがgRPC対応してくれれば、全て解決だが。
    グリーグループの有志が集まって、技術書を書きました。
    技術書典7で頒布しますので、ぜひ遊びに来てください。
    https://techbookfest.org/event/tbf07/circle/5765683543539712
    まとめ
    18

    View Slide

  19. Copyright © LIMIA, Inc. All Rights Reserved.

    View Slide