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を使ったメディアサービス
Search
mahiguch
June 18, 2019
Programming
0
390
gRPCを使ったメディアサービス
potatotips #62 (iOS/Android開発Tips共有会)でのLT資料です。
mahiguch
June 18, 2019
Tweet
Share
More Decks by mahiguch
See All by mahiguch
爆速で成長する おでかけ情報サービスの成長を支えるデザインと開発の取り組みについて
mahiguch
0
32
WebView認証連携
mahiguch
0
58
メディアアプリLIMIAにおけるプッシュ通知配信システム
mahiguch
0
86
公式部活動技術書典部の活動紹介
mahiguch
0
98
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
mahiguch
1
1k
PHPからgoへの移行で分かったこと
mahiguch
2
3.9k
BigQueryを使った機械学習プロジェクトの分析とオフライン検証
mahiguch
2
1.1k
gRPCを使ったメディアサービス2
mahiguch
0
190
LIMIAでのBigQuery活用事例
mahiguch
0
190
Other Decks in Programming
See All in Programming
PHPのバージョンアップ時にも役立ったAST
matsuo_atsushi
0
230
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
220
コードを読んで理解するko build
bells17
1
120
LINE messaging APIを使ってGoogleカレンダーと連携した予約ツールを作ってみた
takumakoike
0
130
ML.NETで始める機械学習
ymd65536
0
240
color-scheme: light dark; を完全に理解する
uhyo
7
510
オレを救った Cline を紹介する
codehex
15
13k
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
250
Serverless Rust: Your Low-Risk Entry Point to Rust in Production (and the benefits are huge)
lmammino
1
160
TCAを用いたAmebaのリアーキテクチャ
dazy
0
220
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
270
コミュニティ駆動 AWS CDK ライブラリ「Open Constructs Library」 / community-cdk-library
gotok365
2
260
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Six Lessons from altMBA
skipperchong
27
3.6k
Building an army of robots
kneath
303
45k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
193
16k
GitHub's CSS Performance
jonrohan
1030
460k
Fireside Chat
paigeccino
35
3.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
134
33k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
How STYLIGHT went responsive
nonsquared
99
5.4k
Transcript
gRPCを使ったメディアサービス
Masahiro Higuchi / 樋口雅拓 • グリーグループのリミア株式会社で、LIMIA という住まい領域のメディアを 作っています。ゲーム会社ですが、最近はメディアに力を入れています。 • 機械学習のエンジニアですが、iOS,
Android,JSなどもやっている何でも屋 です。4歳の娘のパパ。twitter: @mahiguch1 • https://limia.jp/ • https://arine.jp/ • https://aumo.jp/ • https://www.mine-3m.com/mine/
背景と目的
LIMIAとは? • メディアサービス • 記事一覧を表示し、タップすると 記事詳細を閲覧できる。 • 記事詳細の最下部に別の記事 への回遊導線が付いている
興味があること LIMIAに最も適したシステムは、何だろう? • インフラ: Kubernetes/ECS/Lambda/EC2/CF/Firebase • Backend FW: gin/Laravel/Django/Rails/gRPC/使わない •
アプリ: MVC/MVVM/VIPER/クリーンアーキテクチャ 選択肢が多すぎて、よくわからない! → とりあえず色々試してみよう。
今回試したこと • インフラ: Kubernetes/ECS/Lambda/EC2/CF/Firebase • Backend FW: gin/Laravel/Django/Rails/gRPC/使わない • アプリ:
MVC/MVVM/VIPER/クリーンアーキテクチャ gRPCを使って、KotlinでgRPC Serverとメディアアプリを作ってみました。
gRPCの説明
gRPCとは? • RPCを実現する通信方式の一つ • Googleが作っている • Protocol buffersという形式で データをシリアライズして送受信 している。
Protocol bufferとは? • Request/Responseのフォーマットを指定 すると、それでシリアライズしてくれる。 • 通信部分のコードを自動生成してくれる ので、そこに時間を割かれるのを防げ る。 •
ただし、エラー定義は書けないので、そこ はコメントで書いておくなど、チーム内で ルールを決めておく必要がある。
では本題
今回作った検証アプリについて 記事の一覧を表示したい。画面には、記事画像、記事タイト ル、ユーザ名が表示されている。Modelとしては、次のよう に持つ。 • Article: Id, Title, ImageUrl, User
• User: Id, Name これをprotobufに定義し、gRPCで通信するとどうなるか試 してみた。
User.proto / Article.proto
ArticleList.proto build.gradleに以下のような記 述をしておくと、コードの自動生 成とそれを含めたbuildを自動 でやってくれる。便利!
Android Client
Kotlin Server Server側は、Clientから呼び出したmethodをoverrideする形で実装する。 Client/Server共にかなりシンプルに実装できる。
Tips 予想外にサクッと書けてしまったので、Tipsが無かった。 強いて挙げれば、gRPCが自動生成したコードは、javax.annotation-apiを使っ ている。これをgradleに書いて置かないとbuildが通らないので注意。
まとめ • 他のパターンを試した時より実装工数が少なかった。 • 動作速度は体感で明らかに早い。 • 動作速度を計測して、複数パターンの比較を行いたい。 ご静聴、ありがとうございました!