Databricks Appsの水平スケーリング
ベータ版
この機能はベータ版です。ワークスペース管理者は、 Apps Horizontal Scaling プレビューにオプトインすることで、 プレビュー ページからこの機能へのアクセスを制御できます。Databricksのプレビューを管理するを参照してください。
このページでは、高可用性と同時実行性を向上させるために、単一のアプリURLで複数のインスタンスにわたってDatabricksアプリを実行する方法について説明します。
水平スケーリングは、リクエストを複数のインスタンスに分散させるため、単一のインスタンスの障害や再起動によってアプリがオフラインになることはありません。コンピュートコストはインスタンス数に比例してスケーリングされます。
次のような追加の利点があります。
- セッションアフィニティ : 同じユーザーからのすべてのリクエストは、ベストエフォート方式で同じインスタンスにルーティングされるため、アプリはそのインスタンス上に短期間のユーザーごとのデータ(例えば、インメモリキャッシュなど)を保持できます。これは、スティッキーセッションとも呼ばれます。セッションアフィニティを参照してください。
- ダウンタイムなしのデプロイメント :Databricks は、最初に新しいデプロイメントをビルドインスタンスに展開し、そのビルドインスタンスが成功した後にのみ、残りのインスタンスを更新します。既存のインスタンスは引き続きトラフィックを処理します。
- 安定したビルドキャッシュ : Databricks は、コンピュートの更新時も(例: インスタンスサイズや数の変更時)デプロイアーティファクトを保持します。そのため、アプリの完全なリビルドは不要です。
水平スケーリング対応アプリを作成する
水平スケーリングを有効にしてアプリを作成します。
- Databricksワークスペースで、
アプリスイッチャーをクリックし、 Databricks Apps を選択します。
- 「 + アプリを作成 」をクリックし、次に「 カスタムアプリを作成 」をクリックします。
- 名前を入力し、『カスタム Databricks アプリを作成する』の説明に従ってアプリを構成します。
- Configure ステップで、 水平スケーリングを有効にする を選択します。
- インスタンス数 (1~5)を指定してください。Databricksでは、可用性のためには2つ以上のインスタンスを推奨しています。
- 「 アプリを作成 」をクリックします。
ワークスペースで1つのアプリの水平スケーリングを有効にしても、他のアプリには影響しません。
新しく作成された水平スケーリングアプリには、プリインストールされたPythonライブラリは含まれていません。requirements.txtまたはpyproject.tomlにすべての依存関係を宣言します。Databricks アプリの依存関係を管理するを参照してください。
標準アプリを水平スケーリング対応に変換する
設定 タブから、既存の標準アプリを水平スケーリングされたアプリに変換します。変換によってダウンタイムは発生しません。既存の標準アプリは、新しい水平スケーリングデプロイがヘルスチェックに合格するまでトラフィックを提供し続けます。その時点で、Databricks がトラフィックを切り替えます。
変換は可逆的です。同じ 設定 タブから、水平スケーリングされたアプリを標準アプリに戻すことができます。
変換の動作
以下の動作が変換時に適用されます:
- インスタンス数は 1 に設定されています。変換後、数を(最大5まで)変更できます。「インスタンス数を管理する」を参照してください。
- 変換されたアプリは、プリインストールされている Python ライブラリを使い続けるため、既存の依存関係は機能し続けます。代わりにクリーンなベースOSイメージで実行するには、変換後にオプトアウトしてください。「Databricks アプリ用のプリインストールされた Python ライブラリをオプトアウトする」を参照してください。
変換をテストしてください
変換によって、アプリケーションのランタイムイメージとスケーリングモデルが変更されます。本番運用アプリを変換する前に、変更を複製で検証してください。
- 変換したい標準アプリの複製を作成します。
- 重複を変換するには、次のステップに従います。
- 変換された複製でアプリが期待どおりに動作することを確認します。ログ、トラフィック、およびセッションアフィニティ動作を確認してください。
- 検証後に本番運用アプリを変換します。
標準アプリを変換
標準アプリを水平スケーリング対応にするには
- Databricksワークスペースで、
アプリスイッチャーをクリックし、 Databricks Apps を選択します。
- 変換するアプリの名前をクリックします。
- [ 設定 ] タブをクリックします。
- コンピュート で、 水平スケーリングを有効にする を選択します。Databricksは、変換時に必要なインスタンス数を 1 に設定します。
- 保存 をクリックします。
Databricks は、新しい水平スケーリングされたコンピュートをスピンアップし、その後、アプリをその上に再デプロイします。合計時間は、アプリのビルド時間によって異なります。既存のアプリはトラフィックを提供し続けます。
変換が完了したら、スケールアップするか、プリインストールされているライブラリの使用を中止できます。
インスタンス数を管理
水平スケーリングされたアプリのインスタンス数を変更するには:
- アプリの詳細ページで、 編集 をクリックします。
- Configure ステップで、 インスタンスの数 を更新します。
- 保存 をクリックします。
Databricks が変更を適用している間も、アプリはトラフィックの処理を続行します。
セッションアフィニティ
セッションアフィニティは、可能な限り、同じユーザーからのすべてのリクエストを同じインスタンスにルーティングします。アプリは、このルーティングを使用して、ユーザーごとの一時的なデータ(例えば、インメモリキャッシュやローカルファイルシステム上の一時ファイル)を、そのユーザーのセッションを処理するインスタンス上に保持できます。セッションアフィニティはスティッキーセッションとしても知られています。
セッションアフィニティはベストエフォートです。耐久性のあるストアから再構築または取得できないものは、インスタンスローカル状態に保存しないでください。セッションより長く保持する必要があるデータは、Unity Catalog テーブルなどの耐久性のあるストレージに永続化します。
データをLakebaseに永続化することもできます。
ブラウザベースのアプリ
セッションアフィニティはブラウザベースのアプリで自動的に機能します。ブラウザからの最初の要求は、ランダムに選択されたインスタンスにルーティングされ、これにより__Host-databricks-app-routerクッキーが設定されます。そのCookieを使用した後続のリクエストは、同じインスタンスにルーティングされます。
API クライアント
APIクライアントのセッションアフィニティを確保するには、すべてのリクエストに__Host-databricks-app-routerクッキーを含め、ランダムに生成されたUUIDに設定してください。同じクッキー値を持つリクエストはすべて、同じインスタンスにルーティングされます。
curl -X GET https://<your-app>.aws.databricksapps.com/api/endpoint \
-H "Authorization: Bearer YOUR_BEARER_TOKEN" \
-b "__Host-databricks-app-router=f8822466-3b1e-423a-988b-54c9e639c250"
セッションの再割り当て
セッションは次のいずれかの場合に別のインスタンスに移動できます。
- インスタンスが利用不可になります(例えば、デプロイ中またはクラッシュ時に)。
- インスタンス数を変更します。
- Databricks はインスタンス間でセッションを再調整します。
- 個別のリクエストが誤ってルーティングされます(まれです)。
制限事項:
水平スケーリングされたアプリには、次の制限が適用されます:
- 各ワークスペースで保持できる水平スケーリングされたアプリは最大20個です。この制限を引き上げるには、Databricks担当者にお問い合わせください。
- 各水平スケーリングアプリは、最大5インスタンスまで持つことができます。この制限の引き上げについては、Databricks担当者にお問い合わせください。
- [ ログ ] タブには、一度に単一のインスタンスからのログが表示されます。すべてのインスタンスのログを表示するには、アプリテレメトリを有効にします。