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

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

Ad22fcf5773b906c08330f4d57242212?s=128

Kohei Ota

June 20, 2020
Tweet

Transcript

  1. ENVOY MOBILE に入門できなかったので 完全に理解してみた話 PRESENTED BY @_INDUCTOR_ ENVOY MEETUP TOKYO

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

    クバネテスとサービスメッシュでビッグデータをディープラーニングするアイオーティーの仕事  Android は2015年頃に Fragment とかが無い状態のアプリを改修とかしてた淡い記憶を持っている  iOS は XCode 7 で環境設定めんどくせーなーって思いながら Fastlane が出たのを眺めてた記憶を持っている  Envoy はなにもわからない(なにもわからない) 2020/6/20
  3. ENVOY MOBILE ってなに 2020/6/20

  4. ENVOY MOBILE ってなに 2020/6/20

  5. モバイル端末のアプリにもENVOYの機能を提供するやつ 2020/6/20 可観測性 メトリック、ロギング、分散トレーシング APIのグルーピングを提供 プロトコル TLS1.3, gRPC QUICなどのプロトコルにも 端末の制限なしに対応

    トラフィックの管理 リトライ処理、サーキットブレイカー xDSの動的ルーティングなどが使える
  6. 雑な図  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がプロトコルの処理を行う
  7. どうやって動くのか 2020/6/20

  8. 公式のドキュメントを覗いてみる 2020/6/20

  9. なんだHELLO WORLDあるじゃん楽勝だな 2020/6/20

  10. _人人人人人人人人_ > 公式の手順が < > 動かない <  ̄Y^Y^Y^Y^Y ̄ 2020/6/20

  11. 入門失敗しました  Windows でやったら環境変数とかごちゃごちゃするのめんどくさい(それはそう)  Bazel で実行対象のファイルがパスにないって言われて怒られる  WSL2 Ubuntu

    でやったら Headless なので CLI で色々やらないといけなくて大変だった  Bazel でよくわからないエラーが出ててトラシュー方法が謎  Mac は持っていない  あと要求事項になかったけど Python とか要求されたので別途いれた  最近の JDK 周り全然よくわからん(特に Android開発でどうすればいいかわからん) 2020/6/20
  12. しょうがないのでソースを読みます 2020/6/20

  13. ANDROIDのEXAMPLEを覗いてみる  MainActivity の onCreate イベント時に Envoy のクライアントビルダーを初期化  (この例では)Activity

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

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

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

    で読み込めるやつ  Android NDK(ねえどんな気持ち?ではなく、Android Native Development Kit)を使って書いた3Dエンジンの組み込 みとかにも使うやつ(しらんけど)  つまり、Envoy のソースコードが Android版でもそのまま使い回されている!  まあ、そりゃ確かにサイトの宣伝通りではあるな・・・という感想 2020/6/20
  17. ANDROIDでENVOYが動く仕組みの図 2020/6/20 JNI コンパイル済みの ネイティブコード HTTP周りの処理を任せる

  18. まとめ 2020/6/20

  19. _人人人人人人人人人_ > ENVOY をスマホで < > 動かすやつ <  ̄Y^Y^Y^Y^Y^Y^Y^ ̄ 2020/6/20

  20. まとめ  Envoy Mobile を使うと Envoy を HTTP クライアントライブラリとしてモバイルアプリに組み込める 

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