Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
gRPCを使ったメディアサービス2
Search
mahiguch
September 11, 2019
Programming
0
200
gRPCを使ったメディアサービス2
「グリーグループモバイルアプリ勉強会 Vol.1」でのLT資料です。
https://gree.connpass.com/event/142728/
mahiguch
September 11, 2019
Tweet
Share
More Decks by mahiguch
See All by mahiguch
爆速で成長する おでかけ情報サービスの成長を支えるデザインと開発の取り組みについて
mahiguch
0
41
WebView認証連携
mahiguch
0
61
メディアアプリLIMIAにおけるプッシュ通知配信システム
mahiguch
0
90
公式部活動技術書典部の活動紹介
mahiguch
0
100
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
mahiguch
1
1k
PHPからgoへの移行で分かったこと
mahiguch
2
4k
BigQueryを使った機械学習プロジェクトの分析とオフライン検証
mahiguch
2
1.2k
LIMIAでのBigQuery活用事例
mahiguch
0
200
機械学習輪講会資料
mahiguch
0
150
Other Decks in Programming
See All in Programming
データベースの技術選定を突き詰める ~複数事例から考える最適なデータベースの選び方~
nnaka2992
0
210
ComposeでのPicture in Picture
takathemax
0
130
エンジニア向けCursor勉強会 @ SmartHR
yukisnow1823
3
12k
CursorとDevinが仲間!?AI駆動で新規プロダクト開発に挑んだ3ヶ月を振り返る / A Story of New Product Development with Cursor and Devin
rkaga
1
370
By the way Google Cloud Next 2025に行ってみてどうだった
ymd65536
0
130
REALITY コマンド作成チュートリアル
nishiuriraku
0
120
generative-ai-use-cases(GenU)の推しポイント ~2025年4月版~
hideg
1
390
オープンソースコントリビュート入門
_katsuma
0
130
Bedrock × Confluenceで簡単(?)社内RAG
iharuoru
1
120
エンジニアが挑む、限界までの越境
nealle
1
330
Designing Your Organization's Test Pyramid ( #scrumniigata )
teyamagu
PRO
5
1.3k
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
160
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
76
9.4k
How STYLIGHT went responsive
nonsquared
100
5.5k
Done Done
chrislema
184
16k
Unsuck your backbone
ammeep
671
58k
The Pragmatic Product Professional
lauravandoore
33
6.6k
A designer walks into a library…
pauljervisheath
205
24k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
Producing Creativity
orderedlist
PRO
344
40k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Designing for Performance
lara
608
69k
Typedesign – Prime Four
hannesfritz
41
2.6k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Transcript
Copyright © LIMIA, Inc. All Rights Reserved. gRPCを使った メディアサービス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/樋口雅拓 技術書典7@い05C 2
Copyright © LIMIA, Inc. All Rights Reserved. 背景と目的
Copyright © LIMIA, Inc. All Rights Reserved. LIMIAとは? 4 •
メディアサービス • Android, iOS, Web • 記事一覧を表示し、タップすると 記事詳細を閲覧できる。 • 記事一覧はパーソナライズ。 • 記事詳細読了後に関連記事を出 している。 • AWS:90%、GCP:10%。 • PHP/EC2 → Go/ECS移行中 • コンテナ間はgRPC+NLB • 偏りが激しいのでEnvoy使いたい
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 もう一度、これを試してみます。
Copyright © LIMIA, Inc. All Rights Reserved. 【前回試したこと:とりあえず動くか】 起動直後(MainFragment::onActivityCreated)、gRPC Serverにリクエ
ストして、callbackでViewに追加。 【今回試したこと:実際使おうとしたときの問題点】 リストの末尾まで到達(PagedList::BoundaryCallback)したら、gRPC Serverにリクエスト、LiveDataでViewを更新。 今回試すこと 6
Copyright © LIMIA, Inc. All Rights Reserved. 今回試すことの図 左図のRetrofitをgRPCに置き換えたのが右図 7
Copyright © LIMIA, Inc. All Rights Reserved. 要素技術の説明
Copyright © LIMIA, Inc. All Rights Reserved. gRPCとは? 9 •
RPCを実現する通信方式の一つ • Googleが作っている • Protocol buffersという形式で データをシリアライズして送受信 している。
Copyright © LIMIA, Inc. All Rights Reserved. Protocol Bufferとは? 10
• Request/Responseのフォーマットを指定 すると、それでシリアライズしてくれる。 • 通信部分のコードを自動生成してくれる ので、そこに時間を割かれるのを防げ る。 • ただし、エラー定義は書けないので、そこ はコメントで書いておくなど、チーム内で ルールを決めておく必要がある。
Copyright © LIMIA, Inc. All Rights Reserved. AAC(Android Architecture Components)とは、便利なライブラリ集。使う
と便利なのは分かっているが、既存アプリへの導入は工数がかかるため、みん な少しづつ入れている。今回利用するAACは、次の4つ。 • LiveData: 基盤となるデータベースが変更されたときにビューに通知する • Paging: データソースからオンデマンドで情報を徐々に読み込む • Room: SQLite データベースにスムーズにアクセスする • ViewModel: ライフサイクルを意識した方法で UI 関連のデータを管理 する AACの説明 11
Copyright © LIMIA, Inc. All Rights Reserved. 本題
Copyright © LIMIA, Inc. All Rights Reserved. • 一覧を取ってきて表示するアプリ において、RetrofitをgRPCに置
き換えてみた。 • ベースは、AACのサンプルアプ リ。見た目は同じ。 https://github.com/googlesamples/android-architecture-co mponents/tree/88747993139224a4bb6dbe985adf652d557 de621/PagingWithNetworkSample 今回作った検証アプリについて 13
Copyright © LIMIA, Inc. All Rights Reserved. .proto files 14
RPC IFをserviceに、データのフォーマットを messageに記載する。 エラーコードなど異常系は、ここでは管理できない。
Copyright © LIMIA, Inc. All Rights Reserved. 自動生成されたmethodを呼び出しているだけ。 API call
15
Copyright © LIMIA, Inc. All Rights Reserved. AAC Pagingを使うと、リスト開始や末尾でcallbackが呼ばれる。そこで、API call
methodを呼び出す。レスポンスの処理はRepositoryから渡された callbackで行う。 BoundaryCallback 16
Copyright © LIMIA, Inc. All Rights Reserved. Server側は、Clientから呼び出したmethodをoverrideする形で実装する。 Client/Server共にかなりシンプルに実装できる。 Server
17
Copyright © LIMIA, Inc. All Rights Reserved. • Retrofitに依存している部分が多く、思ったより大変だった。 •
今回はRetrofitからgRPCに切り替えたが、本番導入するなら共存する必 要がある。つまり、結構工数がかかりそう。 • gRPC対応するとIFの型が保証されるが、大きな工数をかけてでも解決し たい問題かというと。。。 • RetrofitがgRPC対応してくれれば、全て解決だが。 グリーグループの有志が集まって、技術書を書きました。 技術書典7で頒布しますので、ぜひ遊びに来てください。 https://techbookfest.org/event/tbf07/circle/5765683543539712 まとめ 18
Copyright © LIMIA, Inc. All Rights Reserved.