Important
此功能在 Beta 版中。 若要请求访问权限,请联系Azure Databricks代表。 启用该功能后,工作区管理员可以从 预览 页控制对该功能的访问。 请参阅 Manage Azure Databricks 预览版。
本页介绍如何在单个应用 URL 后面的多个实例上运行 Databricks 应用,以实现更高的可用性和并发性。
水平缩放跨实例分配请求,因此单个实例失败或重启不会使应用脱机。 计算成本随实例数量呈线性增长。
其他优势包括:
- 会话相关性:来自同一用户的每个请求都尽力路由到同一实例,因此应用可以保留该实例上的短生存期每用户数据(例如内存中缓存)。 也称为粘滞会话。 请参阅 会话相关性。
- 零停机时间部署:Azure Databricks先将新部署回滚到生成实例,并且仅在生成实例成功后更新剩余实例。 现有实例在整个过程中持续处理流量。
- 稳定的构建缓存:Azure Databricks 会在计算资源更新期间(例如更改实例大小或数量时)保留部署工件,因此应用无需完整重建。
Requirements
以下要求适用于所有水平缩放的应用:
- 在 Beta 版期间,你的应用必须监听
0.0.0.0(而不是127.0.0.1或localhost)。
创建水平缩放的应用
若要创建启用了水平缩放的应用,请执行以下操作:
- 在 Azure Databricks 工作区中,单击
应用切换器,然后选择 Databricks Apps。
- 单击“ + 创建应用”,然后单击“ 创建自定义应用”。
- 输入名称和配置应用,如 创建自定义 Databricks 应用中所述。
- 在 “配置 ”步骤中,选择“ 启用水平缩放”。
- 指定 实例数 (1-5)。 Azure Databricks 建议至少使用 2 个实例,以确保可用性。
- 单击“ 创建应用”。
为一个应用启用水平缩放不会影响工作区中的其他任何应用。
新建的水平缩放应用不包括预安装的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 客户代表以提高此上限。
- 日志选项卡一次只能显示单个实例的日志。 若要查看所有实例的日志,请启用 应用遥测。