Azure多租户应用发布时长优化:分租户快速启用新版本方案咨询
多租户Azure应用分批次零停机升级方案
方案一:双Web App+应用网关渐进式路由(对应你设想的方案)
核心逻辑是用租户子域名做路由标识,分批次完成租户数据库更新后,将其流量切换到新版本Web App。
实现步骤
- 部署两个Web App实例:
myapp-v1(运行旧版本)和myapp-v2(运行新版本),共享租户信息数据库(需确保该库结构向前兼容,新旧版本都能正常读写) - 配置Azure应用网关,创建两个后端池分别指向上述两个Web App,同时配置HTTP监听器监听所有租户子域名
- 默认路由规则将所有租户流量导向
myapp-v1;当某租户数据库更新完成后,修改路由规则,将该租户的子域名(如client1.myapp.com)定向到myapp-v2 - 自动化脚本示例(Azure CLI):
# 执行单个租户数据库更新(示例:运行SQL脚本) az sql db execute-script -g 你的资源组名 -s 你的SQL服务器名 -n client1-db --file ./tenant-upgrade.sql # 更新应用网关路由规则,将该租户导向新版本后端池 az network application-gateway rule update -g 你的资源组名 -n tenant-route-rule --gateway-name 你的AGW名称 \ --http-listener 你的HTTP监听器名 \ --backend-address-pool myapp-v2-pool \ --host-names "client1.myapp.com" - 所有租户迁移完成后,销毁旧版本Web App和对应路由规则
方案二:Web App槽位+租户级流量路由(更简便,无需额外资源)
利用Web App自带的槽位流量路由功能,无需额外部署Web App或网关,直接实现分租户切换:
- 保持现有生产槽,将新版本部署到预发布槽(staging)
- 关键前提:新版本应用必须兼容新旧数据库结构(比如新增字段设默认值、旧版本不依赖的新表不影响旧版运行)
- 分批次操作:
- 选择一批租户,先完成其数据库的版本更新
- 配置Web App槽位路由规则,将这批租户的子域名定向到预发布槽(新版本)
- 验证无误后,继续下一批,直到所有租户完成切换
- 所有租户迁移完成后,交换生产槽和预发布槽,正式将新版本设为默认,随后可清理旧槽位
槽位路由配置示例(Azure CLI)
# 为指定租户设置流量路由到预发布槽 az webapp traffic-routing set -g 你的资源组名 -n 你的Web App名称 \ --rule-name client1-route --action Forward --target-slot staging \ --match-condition "HostName Equal client1.myapp.com"
该方案优势是复用现有Web App资源,操作成本更低,无需额外管理网关。
核心注意事项
- 数据库向前兼容:必须保证新旧版本应用都能正常读写对方版本的数据库结构,避免迁移期间出现服务异常
- 租户信息库优先兼容:更新租户信息库时,先做兼容改造,确保新旧版本应用都能正常访问
- 自动化批量处理:将数据库更新和路由切换逻辑写成自动化脚本,用Azure DevOps或GitHub Actions批量执行,减少人工操作误差
内容的提问来源于stack exchange,提问作者Nicolas C
相关产品推荐
相关产品推荐

