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
160
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
23
WebView認証連携
mahiguch
0
51
メディアアプリLIMIAにおけるプッシュ通知配信システム
mahiguch
0
79
公式部活動技術書典部の活動紹介
mahiguch
0
90
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
mahiguch
1
970
PHPからgoへの移行で分かったこと
mahiguch
2
3.8k
BigQueryを使った機械学習プロジェクトの分析とオフライン検証
mahiguch
2
1.1k
LIMIAでのBigQuery活用事例
mahiguch
0
180
機械学習輪講会資料
mahiguch
0
130
Other Decks in Programming
See All in Programming
Jakarta EE meets AI
ivargrimstad
0
100
TypeScript Graph でコードレビューの心理的障壁を乗り越える
ysk8hori
2
1.1k
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
120
みんなでプロポーザルを書いてみた
yuriko1211
0
260
EMになってからチームの成果を最大化するために取り組んだこと/ Maximize team performance as EM
nashiusagi
0
100
ActiveSupport::Notifications supporting instrumentation of Rails apps with OpenTelemetry
ymtdzzz
1
230
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
3
690
Compose 1.7のTextFieldはPOBox Plusで日本語変換できない
tomoya0x00
0
190
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
5
2.2k
最新TCAキャッチアップ
0si43
0
190
Arm移行タイムアタック
qnighy
0
330
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
480
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Teambox: Starting and Learning
jrom
133
8.8k
The Language of Interfaces
destraynor
154
24k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
Thoughts on Productivity
jonyablonski
67
4.3k
What's in a price? How to price your products and services
michaelherold
243
12k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
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.