Important
この機能は ベータ版です。 アクセス権を要求するには、Azure Databricks担当者にお問い合わせください。 この機能を有効にすると、ワークスペース管理者は プレビュー ページからアクセスを制御できます。 Manage Azure Databricks プレビューを参照してください。
このページでは、可用性とコンカレンシーを高めるために、1 つのアプリ URL の背後にある複数のインスタンスで Databricks アプリを実行する方法について説明します。
水平方向のスケーリングでは、要求がインスタンス間で分散されるため、1 つのインスタンスの障害または再起動でアプリがオフラインになりません。 コンピューティング コストは、インスタンスの数に応じて直線的にスケーリングされます。
その他の利点は次のとおりです。
- セッション アフィニティ: 同じユーザーからの要求はすべて、ベスト エフォートベースで同じインスタンスにルーティングされるため、アプリは、そのインスタンスのユーザーごとのデータ (メモリ内キャッシュなど) の有効期間が短い状態を維持できます。 スティッキー セッションとも呼ばれます。 「セッション アフィニティ」を参照してください。
- Zero-downtime deployment: Azure Databricksは新しいデプロイを最初にビルド インスタンスにロール アウトし、そのビルド インスタンスが成功した後にのみ残りのインスタンスを更新します。 既存のインスタンスは、その間も引き続きトラフィックを処理し続けます。
- Stable ビルド キャッシュ: Azure Databricksは、コンピューティングの更新 (インスタンスのサイズや数を変更した場合など) にわたってデプロイ成果物を保持するため、アプリは完全なリビルドを必要としません。
要件
次の要件は、水平方向にスケーリングされたすべてのアプリに適用されます。
- ベータ期間中、アプリは (
0.0.0.0や127.0.0.1ではなく)localhostをリッスンする必要があります。
水平方向にスケーリングされたアプリを作成する
水平スケーリングを有効にしてアプリを作成するには:
- Azure Databricks ワークスペースで、
アプリ スイッチャーをクリックし、Databricks Apps を選択します。
- [ + アプリの作成] をクリックし、[ カスタム アプリの作成] をクリックします。
- 「 カスタム Databricks アプリの作成」の説明に従って名前を入力し、アプリを構成します。
- [構成] ステップで、[水平スケーリングを有効にする] を選択します。
- [インスタンスの数] (1 ~ 5) を指定します。 Azure Databricksは、可用性のために少なくとも 2 つのインスタンスを推奨します。
- [ アプリの作成] をクリックします。
1 つのアプリに対して水平方向のスケーリングを有効にしても、ワークスペース内の他のアプリには影響しません。
新しく作成された水平方向にスケーリングされたアプリには、プレインストールされたPython ライブラリは含まれません。
requirements.txtまたはpyproject.toml内のすべての依存関係を宣言します。
Databricks アプリの依存関係の管理に関するページを参照してください。
水平スケーリングを使用するように標準アプリを変換する
[ 設定] タブから、既存の標準アプリを水平方向にスケーリングされたアプリに変換します。変換ではダウンタイムは発生しません。 既存の標準アプリは、新しい水平スケールされたデプロイがヘルス チェックに合格するまでトラフィックを処理し続け、その時点で Azure Databricks がトラフィックを切り替えます。
変換は元に戻すことができます。 水平方向にスケーリングされたアプリは、同じ [設定] タブから標準アプリに変換できます。
変換の動作
変換時に次の動作が適用されます。
- インスタンス数は 1 に設定されます。 変換後、カウントを変更できます (最大 5)。 「インスタンス数の管理」を参照してください。
- 変換されたアプリは、インストール済みのPython ライブラリを引き続き使用するため、既存の依存関係は引き続き機能します。 代わりにクリーンなベース OS イメージで実行するには、変換後にオプトアウトします。 Databricks アプリ向けのプリインストールされた Python ライブラリを除外するを参照してください。
変換をテストする
変換によって、アプリのランタイム イメージとスケーリング モデルが変更されます。 運用アプリを変換する前に、重複した変更を検証します。
- 変換する標準アプリの複製を作成します。
- 次の手順を使用して、複製を変換します。
- 変換された複製でアプリが期待どおりに動作することを確認します。 ログ、トラフィック、およびセッションアフィニティの挙動を確認します。
- 検証後に運用アプリを変換します。
標準アプリを変換する
標準アプリを水平方向にスケーリングするように変換するには:
- Azure Databricks ワークスペースで、
アプリ スイッチャーをクリックし、Databricks Apps を選択します。
- 変換するアプリの名前をクリックします。
- [設定] タブをクリックします。
- [ コンピューティング] で、[ 水平スケーリングを有効にする] を選択します。 Azure Databricksは、変換時に必要なインスタンス数を 1 に設定します。
- 保存 をクリックします。
Azure Databricksは、水平方向にスケーリングされた新しいコンピューティングを起動し、アプリをそのコンピューティングに再デプロイします。 合計時間は、アプリのビルド期間によって異なります。 既存のアプリは、全体にわたってトラフィックを提供し続けます。
変換が完了したら、事前にインストールされているライブラリをスケールアップまたはオプトアウトできます。
インスタンス数を管理する
水平方向にスケーリングされたアプリのインスタンスの数を変更するには:
- アプリの詳細ページで、[ 編集] をクリックします。
- [構成] ステップで、[インスタンスの数] を更新します。
- 保存 をクリックします。
Azure Databricksが変更を適用している間、アプリは引き続きトラフィックを処理します。
セッションの親和性
セッション アフィニティは、可能な限り、同じユーザーから同じインスタンスにすべての要求をルーティングします。 アプリは、このルーティングを使用して、そのユーザーのセッションを処理するインスタンス上のユーザーごとの有効期間が短いデータ (ローカル ファイル システム上のメモリ内キャッシュや一時ファイルなど) を保持できます。 セッション アフィニティは、スティッキー セッションとも呼ばれます。
セッション アフィニティはベスト エフォートです。 永続ストレージから再構築または取得できないものを、インスタンス ローカルの状態に保存しないでください。 セッション終了後も保持する必要があるデータは、Unity Catalog テーブルなどの永続ストレージに永続化します。
Lakebase を使用してデータを保持することもできます。
ブラウザー ベースのアプリ
セッション アフィニティは、ブラウザー ベースのアプリに対して自動的に機能します。 ブラウザーからの最初の要求は、ランダムに選択されたインスタンスにルーティングされ、 __Host-databricks-app-router Cookie が設定されます。 その Cookie を使用した後続の要求は、同じインスタンスにルーティングされます。
API クライアント
API クライアントのセッション アフィニティを取得するには、すべての要求に __Host-databricks-app-router Cookie を含め、ランダムに生成された UUID に設定します。 同じ Cookie 値を持つすべての要求は、同じインスタンスにルーティングされます。
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"
セッションの再割り当て
セッションは、次の場合に別のインスタンスに移動できます。
- インスタンスが使用できなくなります (デプロイ中やクラッシュ時など)。
- インスタンス数を変更します。
- Azure Databricksインスタンス間でセッションを再調整します。
- 個々の要求が誤ってルーティングされます (まれ)。
制限事項
水平方向にスケーリングされたアプリには、次の制限事項が適用されます。
- 各ワークスペースには、最大 5 つの水平方向にスケーリングされたアプリを含めることができます。 この制限を引き上げるには、Azure Databricks担当者にお問い合わせください。
- 水平方向にスケーリングされた各アプリには、最大 5 つのインスタンスを含めることができます。 この制限を引き上げるには、Azure Databricks担当者にお問い合わせください。
- [ ログ ] タブには、一度に 1 つのインスタンスのログが表示されます。 すべてのインスタンスのログを表示するには、 アプリテレメトリを有効にします。