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.3k
The Cloud Native Chronicles: 10 Years of Community Growth Inside and Outside Japan
inductor
0
91
Cracking the KubeCon CfP
inductor
3
410
KubeCon Recap -Platform migration at Scale-
inductor
1
930
コンテナビルド最新事情 2022年度版 / Container Build 2022
inductor
3
430
データベースとストレージのレプリケーション入門 / Intro-of-database-and-storage-replication
inductor
26
6k
KubeConのケーススタディから振り返る、Platform for Platforms のあり方と その実践 / Lessons from KubeCon case studies: Platform for Platforms and its practice
inductor
3
740
オンラインの技術カンファレンスを安定稼働させるための取り組み / SRE activity for online conference platform
inductor
1
1.2k
Kubernetesネットワーキング初級者脱出ガイド / Kubernetes networking beginner's guide
inductor
19
5.9k
Other Decks in Technology
See All in Technology
Autify Company Deck
autifyhq
1
39k
グローバル展開を見据えたサービスにおける機械翻訳プラクティス / dp-ai-translating
cyberagentdevelopers
PRO
1
150
サイロ化した金融システムを、packwerk を利用して無事故でリファクタリングした話
coincheck_recruit
3
3.7k
30万人が利用するチャットをFirebase Realtime DatabaseからActionCableへ移行する方法
ryosk7
5
330
Vueで Webコンポーネントを作って Reactで使う / 20241030-cloudsign-vuefes_after_night
bengo4com
4
2.5k
pandasはPolarsに性能面で追いつき追い越せるのか
vaaaaanquish
4
4.3k
話題のGraphRAG、その可能性と課題を理解する
hide212131
4
1.4k
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.6k
APIテスト自動化の勘所
yokawasa
7
4.1k
【LT】ソフトウェア産業は進化しているのか? -Javaの想い出とともに- #jjug_ccc
takabow
0
170
なんで、私がAWS Heroに!? 〜社外の広い世界に一歩踏み出そう〜
minorun365
PRO
6
1.1k
いまならこう作りたい AWSコンテナ[本格]入門ハンズオン 〜2024年版 ハンズオンの構想〜
horsewin
9
2k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
7
150
Raft: Consensus for Rubyists
vanstee
136
6.6k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
107
49k
We Have a Design System, Now What?
morganepeng
50
7.2k
GraphQLの誤解/rethinking-graphql
sonatard
66
9.9k
The Pragmatic Product Professional
lauravandoore
31
6.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
3
370
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Code Reviewing Like a Champion
maltzj
519
39k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2k
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