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
Envoy mobile完全に理解した / Imperfectly understood En...
Search
Kohei Ota
June 20, 2020
Technology
2
410
Envoy mobile完全に理解した / Imperfectly understood Envoy mobile
Kohei Ota
June 20, 2020
Tweet
Share
More Decks by Kohei Ota
See All by Kohei Ota
CloudNative Meets WebAssembly: Exploring Wasm's Potential to Replace Containers
inductor
3
1.8k
The Cloud Native Chronicles: 10 Years of Community Growth Inside and Outside Japan
inductor
0
100
Cracking the KubeCon CfP
inductor
2
460
KubeCon Recap -Platform migration at Scale-
inductor
1
940
コンテナビルド最新事情 2022年度版 / Container Build 2022
inductor
3
450
データベースとストレージのレプリケーション入門 / Intro-of-database-and-storage-replication
inductor
26
6.1k
KubeConのケーススタディから振り返る、Platform for Platforms のあり方と その実践 / Lessons from KubeCon case studies: Platform for Platforms and its practice
inductor
3
760
オンラインの技術カンファレンスを安定稼働させるための取り組み / SRE activity for online conference platform
inductor
1
1.2k
Kubernetesネットワーキング初級者脱出ガイド / Kubernetes networking beginner's guide
inductor
19
6k
Other Decks in Technology
See All in Technology
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
860
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
270
終了の危機にあった15年続くWebサービスを全力で存続させる - phpcon2024
yositosi
18
17k
LINE Developersプロダクト(LIFF/LINE Login)におけるフロントエンド開発
lycorptech_jp
PRO
0
120
ハイテク休憩
sat
PRO
2
170
ガバメントクラウドのセキュリティ対策事例について
fujisawaryohei
0
560
非機能品質を作り込むための実践アーキテクチャ
knih
5
1.5k
事業貢献を考えるための技術改善の目標設計と改善実績 / Targeted design of technical improvements to consider business contribution and improvement performance
oomatomo
0
100
re:Invent 2024 Innovation Talks(NET201)で語られた大切なこと
shotashiratori
0
320
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
170
ブラックフライデーで購入したPixel9で、Gemini Nanoを動かしてみた
marchin1989
1
540
Featured
See All Featured
Designing for Performance
lara
604
68k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
4 Signs Your Business is Dying
shpigford
181
21k
The Cost Of JavaScript in 2023
addyosmani
45
7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
247
1.3M
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Building Adaptive Systems
keathley
38
2.3k
Done Done
chrislema
181
16k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Transcript
ENVOY MOBILE に入門できなかったので 完全に理解してみた話 PRESENTED BY @_INDUCTOR_ ENVOY MEETUP TOKYO
#2
自己紹介 inductor (Twitter: _inductor_, GitHubそのまま) 謎のアンバサダー業のかたわらいろんなことをやっている まとめ:
クバネテスとサービスメッシュでビッグデータをディープラーニングするアイオーティーの仕事 Android は2015年頃に Fragment とかが無い状態のアプリを改修とかしてた淡い記憶を持っている iOS は XCode 7 で環境設定めんどくせーなーって思いながら Fastlane が出たのを眺めてた記憶を持っている Envoy はなにもわからない(なにもわからない) 2020/6/20
ENVOY MOBILE ってなに 2020/6/20
ENVOY MOBILE ってなに 2020/6/20
モバイル端末のアプリにもENVOYの機能を提供するやつ 2020/6/20 可観測性 メトリック、ロギング、分散トレーシング APIのグルーピングを提供 プロトコル TLS1.3, gRPC QUICなどのプロトコルにも 端末の制限なしに対応
トラフィックの管理 リトライ処理、サーキットブレイカー xDSの動的ルーティングなどが使える
雑な図 Before After 2020/6/20 端末A (iOS 13) 端末B
(Android 9) 端末C (iOS 14) 端末A (iOS 13) 端末B (Android 9) 端末C (iOS 14) Service A Service B Service C API Gateway Service A Service B Service C API Gateway HTTP(OS側のライブラリに依存) Envoyがプロトコルの処理を行う
どうやって動くのか 2020/6/20
公式のドキュメントを覗いてみる 2020/6/20
なんだHELLO WORLDあるじゃん楽勝だな 2020/6/20
_人人人人人人人人_ > 公式の手順が < > 動かない <  ̄Y^Y^Y^Y^Y ̄ 2020/6/20
入門失敗しました Windows でやったら環境変数とかごちゃごちゃするのめんどくさい(それはそう) Bazel で実行対象のファイルがパスにないって言われて怒られる WSL2 Ubuntu
でやったら Headless なので CLI で色々やらないといけなくて大変だった Bazel でよくわからないエラーが出ててトラシュー方法が謎 Mac は持っていない あと要求事項になかったけど Python とか要求されたので別途いれた 最近の JDK 周り全然よくわからん(特に Android開発でどうすればいいかわからん) 2020/6/20
しょうがないのでソースを読みます 2020/6/20
ANDROIDのEXAMPLEを覗いてみる MainActivity の onCreate イベント時に Envoy のクライアントビルダーを初期化 (この例では)Activity
のライフサイクルが生きてる限り所定のサーバーにリクエストを送り続けるループがあって 実行結果を画面に表示する処理が書かれている とりあえず io.envoyproxy.envoymobile.AndroidStreamClientBuilder のソースを読んでみるとよさそう 2020/6/20
ソースを読む AndroidStreamClientBuilder で AndroidEngineImpl なるものの初期化をしてる 今度はその中で EnvoyEngineImpl インスタンスが生成されていて
Envoy Engine の初期化時に JniLibrary.initEngine() が呼ばれて、その中で Envoy の実態が動く JniLibrary を使って NDK で組み込んだ Envoy を動かしてるんですねなるほど 2020/6/20
ソースを読む AndroidStreamClientBuilder で AndroidEngineImpl なるものの初期化をしてる 今度はその中で EnvoyEngineImpl インスタンスが生成されていて
Envoy Engine の初期化時に JniLibrary.initEngine() が呼ばれて、その中で Envoy の実態が動く JniLibrary を使って NDK で組み込んだ Envoy を動かしてるんですねなるほど 2020/6/20
JNIとかNDKってなに Java Native Interface の略 C/C++ で書かれたネイティブコードを Java/Kotlin
で読み込めるやつ Android NDK(ねえどんな気持ち?ではなく、Android Native Development Kit)を使って書いた3Dエンジンの組み込 みとかにも使うやつ(しらんけど) つまり、Envoy のソースコードが Android版でもそのまま使い回されている! まあ、そりゃ確かにサイトの宣伝通りではあるな・・・という感想 2020/6/20
ANDROIDでENVOYが動く仕組みの図 2020/6/20 JNI コンパイル済みの ネイティブコード HTTP周りの処理を任せる
まとめ 2020/6/20
_人人人人人人人人人_ > ENVOY をスマホで < > 動かすやつ <  ̄Y^Y^Y^Y^Y^Y^Y^ ̄ 2020/6/20
まとめ Envoy Mobile を使うと Envoy を HTTP クライアントライブラリとしてモバイルアプリに組み込める
NDK と JNI のおかげ ユーザーの OS や端末への依存を気にすることなく gRPC/QUIC などを使えるようになる インスタンス生成時に Envoy のコンフィグを読み込ませられるので、通信制御などもできる すべてが Envoy になる 2020/6/20
THANK YOU FOR YOUR ATTENTION 2020/6/20