gRPCを使ったメディアサービス
by
gree_tech
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
gRPCを使ったメディアサービス
Slide 2
Slide 2 text
Masahiro Higuchi / 樋口雅拓 ● グリーグループのリミア株式会社で、LIMIA という住まい領域のメ ディアを作っています。ゲーム会社ですが、最近はメディアに力を 入れています。 ● 機械学習のエンジニアですが、iOS, Android,JSなどもやっている何で も屋です。4歳の娘のパパ。twitter: @mahiguch1 ● https://limia.jp/ ● https://arine.jp/ ● https://aumo.jp/ ● https://www.mine-3m.com/mine/
Slide 3
Slide 3 text
背景と目的
Slide 4
Slide 4 text
LIMIAとは? ● メディアサービス ● 記事一覧を表示し、タップす ると記事詳細を閲覧できる。 ● 記事詳細の最下部に別の記事 への回遊導線が付いている
Slide 5
Slide 5 text
興味があること LIMIAに最も適したシステムは、何だろう? ● インフラ: Kubernetes/ECS/Lambda/EC2/CF/Firebase ● Backend FW: gin/Laravel/Django/Rails/gRPC/使わない ● アプリ: MVC/MVVM/VIPER/クリーンアーキテクチャ 選択肢が多すぎて、よくわからない! → とりあえず色々試してみよう。
Slide 6
Slide 6 text
今回試したこと ● インフラ: Kubernetes/ECS/Lambda/EC2/CF/Firebase ● Backend FW: gin/Laravel/Django/Rails/gRPC/使わない ● アプリ: MVC/MVVM/VIPER/クリーンアーキテクチャ gRPCを使って、KotlinでgRPC Serverとメディアアプリを作ってみました 。
Slide 7
Slide 7 text
gRPCの説明
Slide 8
Slide 8 text
gRPCとは? ● RPCを実現する通信方式の一つ ● Googleが作っている ● Protocol buffersという形式で データをシリアライズして送受 信している。
Slide 9
Slide 9 text
Protocol bufferとは? ● Request/Responseのフォーマットを 指定すると、それでシリアライズして くれる。 ● 通信部分のコードを自動生成してくれ るので、そこに時間を割かれるのを防 げる。 ● ただし、エラー定義は書けないので、 そこはコメントで書いておくなど、チ ーム内でルールを決めておく必要があ る。
Slide 10
Slide 10 text
では本題
Slide 11
Slide 11 text
今回作った検証アプリについて 記事の一覧を表示したい。画面には、記事画像、記事 タイトル、ユーザ名が表示されている。Modelとしては 、次のように持つ。 ● Article: Id, Title, ImageUrl, User ● User: Id, Name これをprotobufに定義し、gRPCで通信するとどうなる か試してみた。
Slide 12
Slide 12 text
User.proto / Article.proto
Slide 13
Slide 13 text
ArticleList.proto build.gradleに以下のような 記述をしておくと、コード の自動生成とそれを含めた buildを自動でやってくれる 。便利!
Slide 14
Slide 14 text
Android Client
Slide 15
Slide 15 text
Kotlin Server Server側は、Clientから呼び出したmethodをoverrideする形で実装する。 Client/Server共にかなりシンプルに実装できる。
Slide 16
Slide 16 text
Tips 予想外にサクッと書けてしまったので、Tipsが無かった。 強いて挙げれば、gRPCが自動生成したコードは、javax.annotation-apiを 使っている。これをgradleに書いて置かないとbuildが通らないので注意 。
Slide 17
Slide 17 text
まとめ ● 他のパターンを試した時より実装工数が少なかった。 ● 動作速度は体感で明らかに早い。 ● 動作速度を計測して、複数パターンの比較を行いたい。 ご静聴、ありがとうございました!