サーバーレスプラットフォームは、超高弾力性を提供できますが、インフラストラクチャに大きな課題をもたらします。 この問題を解決するために、Alibaba Cloudは、Container Service for Kubernetes (ACK) を他のクラウドサービスと組み合わせて、Elastic Container Instanceに基づくデータアクセスを最適化するソリューションを提供しています。 このトピックでは、サーバーレスクラウドコンピューティングでデータにアクセスする際の課題と、その課題を克服するソリューションについて説明します。
サーバーレスクラウドコンピューティングでのデータアクセスの課題
サーバーレスプラットフォームは、アプリケーションのリソースやワークロードをすばやくスケーリングできるスケーリング機能を提供します。 アプリケーションがスケールアウトを開始してから使用できるようになるまで、数秒しかかかりません。 計算リソースは、数秒または数ミリ秒以内にスケーリングされます。 その結果、インフラストラクチャは大きな課題に直面しています。 ストレージリソースは、最も一般的に使用されるインフラストラクチャリソースです。 ストレージシステムのIOスループットがインスタンススケーリングアクティビティのレートと一致しない場合、システムは数秒以内にスケーリングの要件を満たすことができません。 例えば、システムは、2秒以内にコンテナインスタンスをスケーリングすることができるが、ストレージシステムからデータをダウンロードするために数十秒または数分さえも必要とする。
サーバーレスコンテナ化には、従来のストレージシステムで次の要件があります。
同時実行性の高いアクセス: 計算リソースはデータの処理にのみ使用されます。 データは、ストレージシステムに格納される。 その結果、同時実行性の高いシナリオでのデータアクセスのオーバーヘッドが増加します。 これは、システムの安定性に悪影響を及ぼし、ストレージシステムの帯域幅使用量を100% に増加させる。
低ネットワークレイテンシ: コンピューティングとストレージを分離するアーキテクチャは、ストレージシステムへのリンクを延長します。 ネットワーク間でビジネスデータとメタデータにアクセスする待ち時間が増加します。
Elastic IOスループット: 従来の分散ストレージシステムの帯域幅とスループットは、ストレージ容量とともに増加します。 ただし、アプリケーション指向のリソーススケーリングでは、同時実行性の高いシナリオで多数のコンテナが作成される場合があります。 これらのコンテナが同時にストレージシステムにアクセスすると、ストレージシステムはアクセススロットリングをトリガーします。 問題は、コンピューティングリソースの超高弾力性とストレージシステムの限られた帯域幅のバランスをどのようにとるかです。
データアクセスを最適化するソリューション
サーバーレスクラウドコンピューティングをより適切にサポートするために、ACKチームは、基本的なソフトウェアおよびオペレーティングシステムチーム、Elastic Container Instanceチーム、およびData Lakeチームと協力して、Elastic Container Instanceに基づいてデータアクセスを最適化するソリューションを提供します。 ソリューションは次のルールに準拠しています。
一貫したユーザーエクスペリエンスを確保するために、既存の標準に準拠します。 たとえば、KubernetesのSidecarとDevice Pluginは、APIとユーザーインターフェイスを公開するための標準として使用されます。
詳細なLinux特権制御をサポートします。
カーネルの更新とオープンソースのKubernetesからの基になる更新を同期します。 すべてのデザインはオープンソースのKubernetesと一致しています。
サーバーレスクラウドコンピューティングでFluidが使用するアーキテクチャは、データプレーンとコントロールプレーンで構成されています。
データプレーン: 異なるランタイムに対応するFUSEコンテナがデータプレーンを構成します。 FUSEコンテナは、アプリケーションとともにサイドカーコンテナとして展開されます。 Sidecarは、アプリケーションに関連するデータアクセスを管理します。
制御プレーン: 制御プレーンは、インジェクタ、キャッシュ実行時コントローラ、およびアプリケーションコントローラで構成される。
インジェクタ: インジェクタは、データアクセスおよびランタイム実装情報をSidecar可読情報に変換し、その情報をアプリケーションに注入します。 インジェクタはまた、ワークロードのコンテナが起動されるシーケンスを制御する。 ワークロードは、Sparkジョブ、TensorFlowジョブ、MPIジョブなどのポッドまたはビッグデータAIコンピューティングワークロードです。
キャッシュ実行時コントローラー: キャッシュ実行時コントローラーは、FUSE Sidecarのスループットに基づいてデータキャッシュの弾力性を制御し、データアクセス許可も管理します。
アプリケーションコントローラー: 同じポッド内のバッチジョブ、TensorFlowジョブ、またはSparkジョブのコンテナーが終了すると、アプリケーションコントローラーはポッド内のFUSEコンテナーを終了します。