Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Envoy mobile完全に理解した / Imperfectly understood En...

Envoy mobile完全に理解した / Imperfectly understood Envoy mobile

Kohei Ota

June 20, 2020
Tweet

More Decks by Kohei Ota

Other Decks in Technology

Transcript

  1. 自己紹介  inductor (Twitter: _inductor_, GitHubそのまま)  謎のアンバサダー業のかたわらいろんなことをやっている  まとめ:

    クバネテスとサービスメッシュでビッグデータをディープラーニングするアイオーティーの仕事  Android は2015年頃に Fragment とかが無い状態のアプリを改修とかしてた淡い記憶を持っている  iOS は XCode 7 で環境設定めんどくせーなーって思いながら Fastlane が出たのを眺めてた記憶を持っている  Envoy はなにもわからない(なにもわからない) 2020/6/20
  2. 雑な図  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がプロトコルの処理を行う
  3. 入門失敗しました  Windows でやったら環境変数とかごちゃごちゃするのめんどくさい(それはそう)  Bazel で実行対象のファイルがパスにないって言われて怒られる  WSL2 Ubuntu

    でやったら Headless なので CLI で色々やらないといけなくて大変だった  Bazel でよくわからないエラーが出ててトラシュー方法が謎  Mac は持っていない  あと要求事項になかったけど Python とか要求されたので別途いれた  最近の JDK 周り全然よくわからん(特に Android開発でどうすればいいかわからん) 2020/6/20
  4. ANDROIDのEXAMPLEを覗いてみる  MainActivity の onCreate イベント時に Envoy のクライアントビルダーを初期化  (この例では)Activity

    のライフサイクルが生きてる限り所定のサーバーにリクエストを送り続けるループがあって  実行結果を画面に表示する処理が書かれている  とりあえず io.envoyproxy.envoymobile.AndroidStreamClientBuilder のソースを読んでみるとよさそう 2020/6/20
  5. ソースを読む  AndroidStreamClientBuilder で AndroidEngineImpl なるものの初期化をしてる  今度はその中で EnvoyEngineImpl インスタンスが生成されていて

     Envoy Engine の初期化時に JniLibrary.initEngine() が呼ばれて、その中で Envoy の実態が動く  JniLibrary を使って NDK で組み込んだ Envoy を動かしてるんですねなるほど 2020/6/20
  6. ソースを読む  AndroidStreamClientBuilder で AndroidEngineImpl なるものの初期化をしてる  今度はその中で EnvoyEngineImpl インスタンスが生成されていて

     Envoy Engine の初期化時に JniLibrary.initEngine() が呼ばれて、その中で Envoy の実態が動く  JniLibrary を使って NDK で組み込んだ Envoy を動かしてるんですねなるほど 2020/6/20
  7. JNIとかNDKってなに  Java Native Interface の略  C/C++ で書かれたネイティブコードを Java/Kotlin

    で読み込めるやつ  Android NDK(ねえどんな気持ち?ではなく、Android Native Development Kit)を使って書いた3Dエンジンの組み込 みとかにも使うやつ(しらんけど)  つまり、Envoy のソースコードが Android版でもそのまま使い回されている!  まあ、そりゃ確かにサイトの宣伝通りではあるな・・・という感想 2020/6/20
  8. まとめ  Envoy Mobile を使うと Envoy を HTTP クライアントライブラリとしてモバイルアプリに組み込める 

    NDK と JNI のおかげ  ユーザーの OS や端末への依存を気にすることなく gRPC/QUIC などを使えるようになる  インスタンス生成時に Envoy のコンフィグを読み込ませられるので、通信制御などもできる  すべてが Envoy になる 2020/6/20