Knative用Mixerアダプター
Knativeのゼロからのスケーリングロジックを実装するMixerのアウトオブプロセスアダプターを紹介します。
この投稿では、Mixerを使用してアプリケーションロジックをIstioにプッシュする方法を示します。シンプルなコードで、元のインプリメンテーションと同様のパフォーマンスでKnativeのゼロからのスケーリングロジックを実装するMixerアダプターについて説明します。
Knative Serving
Knative ServingはKubernetes上に構築され、サーバーレスアプリケーションのデプロイとサービス提供をサポートします。サーバーレスプラットフォームのコア機能の1つは、非アクティブなワークロードのリソース使用量とコストを削減するゼロへのスケーリング機能です。アイドル状態のアプリケーションが新しいリクエストを受け取った際にゼロからスケーリングするために、新しいメカニズムが必要です。
次の図は、ゼロからのスケーリングのための現在のKnativeアーキテクチャを示しています。
アイドル状態のアプリケーションのトラフィックは、VirtualServices
とDestinationRules
を使用してIstioをプログラミングすることにより、**アクティベーター**コンポーネントにリダイレクトされます。**アクティベーター**が新しいリクエストを受け取ると、
- 着信リクエストをバッファリングします
- **オートスケーラー**をトリガーします
- アプリケーションがスケールアップされた後、リトライとロードバランシング(必要に応じて)を含むリクエストをアプリケーションにリダイレクトします
アプリケーションが再び稼働状態になると、Knativeは**アクティベーター**から稼働中のアプリケーションへのルーティングを復元します。
Mixerアダプター
Mixerは、Istioコンポーネントとインフラストラクチャバックエンド間の豊富な仲介レイヤーを提供します。これはEnvoyとは別にスタンドアロンコンポーネントとして設計されており、Istioが幅広いバックエンドと相互運用できるようにするシンプルな拡張モデルを備えています。MixerはEnvoyよりも拡張が容易です。
Mixerは、オペレーターが提供する設定を使用して、Istioプロキシからのリクエスト属性を、プラグ可能なアダプターセットを介してインフラストラクチャバックエンドシステムへの呼び出しにマッピングする属性処理エンジンです。アダプターにより、**Mixer**は使用中のインフラストラクチャバックエンドに依存しない、単一の整合性のあるAPIを公開できます。実行時に使用されるアダプターの正確なセットは、オペレーターの設定によって決定され、新しいインフラストラクチャバックエンドまたはカスタムインフラストラクチャバックエンドをターゲットとするように簡単に拡張できます。
Knativeのゼロからのスケーリングを実現するために、オートスケーラーを呼び出すMixerのアウトオブプロセスアダプターを使用します。Mixerのアウトオブプロセスアダプターを使用すると、開発者は任意のプログラミング言語を使用し、Istioプロキシを構築する必要なく、スタンドアロンプログラムとして拡張機能を構築および維持できます。
次の図は、**Mixer**アダプターを使用したKnativeの設計を示しています。
この設計では、元のKnative設定のように、アイドル状態のアプリケーションの**アクティベーター**との間のルーティングを変更する必要はありません。イングレスゲートウェイコンポーネントによって表されるIstioプロキシがアイドル状態のアプリケーションに対する新しいリクエストを受け取ると、関連するすべてのメタデータ情報を含む**Mixer**に通知します。次に、**Mixer**は、元のKnativeプロトコルを使用してKnativeの**オートスケーラー**をトリガーするアダプターを呼び出します。
MixerアダプターのIstioによる使用により、Knativeアダプターで示されているように、複雑なネットワークベースのアプリケーションロジックをより簡単な実装に置き換えることが可能になります。
アダプターが**Mixer**からメッセージを受け取ると、Knativeプロトコルを使用して、StatMessage
を**オートスケーラー**コンポーネントに直接送信します。**オートスケーラー**に必要なメタデータ情報(名前空間
とサービス名
)は、Istioプロキシから**Mixer**に、そこからアダプターに転送されます。
まとめ
元のKnative参照アーキテクチャと新しいIstio Mixerアダプター参照アーキテクチャのコールドスタート時間を比較しました。その結果、コールドスタート時間はほぼ同じであることがわかりました。Mixerアダプターを使用した実装の方がシンプルです。Envoyによって処理されるため、低レベルのネットワークベースのメカニズムを処理する必要はありません。
次のステップは、このMixerアダプターをイングレスゲートウェイ内で実行されるEnvoy固有のフィルタに変換することです。これにより、レイテンシオーバーヘッドをさらに改善し(**Mixer**とアダプターへの呼び出しがなくなる)、Istio Mixerへの依存関係を削除できます。