【问题标题】:Different versions of web app (cloud services) on Windows AzureWindows Azure 上不同版本的 Web 应用程序(云服务)
【发布时间】:2013-07-12 04:27:01
【问题描述】:

我有一个在 Windows Azure 云服务中运行的多租户 Web 应用程序。每个租户都有自己的子域,例如tenantA.mysite.com 和tenantB.mysite.com。全局 *.mysite.com 将它们全部指向我的网络应用程序。

我需要能够引入我的应用程序的新版本,并一次缓慢地将租户转移到几个,同时让其他人保持旧版本。

现在我使用新应用创建一个新的云服务,并为该租户添加一个特定的 DNS 记录以指向新服务。

问题在于更改 DNS 记录和传播导致的停机时间。

对于在不更改 DNS 记录的情况下执行此操作的方法有什么建议吗?

我唯一的想法是在他们访问旧应用程序时进行某种类型的重定向,但这似乎会导致每个请求的延迟 - 或者会吗?

【问题讨论】:

  • 是什么原因导致要求(理由)一次缓慢地移动几个租户,同时让其他租户保持旧版本?
  • 这让我们可以让一些“早期采用者”客户使用新版本的应用程序,并且我们可以在转移其他客户之前确保一切正常。

标签: azure multi-tenant


【解决方案1】:

这比仅更新租户的 DNS 记录更棘手。 DNS 传播和缓存的工作方式,对于某些用户,DNS 将解析到新位置,而对于其他用户,它仍然会解析到以前的位置。结果是您可以让用户同时访问同一租户的两个不同部署。即使使用Traffic Manager,正如您在其文档中所读到的,您也无法直接控制客户端的行为(“浏览器通常会将这些条目缓存更长时间,即使它们的 TTL 已过期”)。

另一种方法是使用带有reverse proxy 的前端层,该层根据您定义的规则在内部将流量转发到适当的云服务。在反向代理上更改这些规则会影响所有传入的请求。

另一种方法是使用feature toggles,这样您就可以运行单个云服务并为所有租户更新它(使用 VIP 交换以避免停机),但只有将新功能设置为活动的选定租户才能看到它们.

【讨论】:

  • 没错,这就是 DNS 解决方案的问题。我们对小功能发布使用功能切换,但在这种情况下,这是对新数据库模式的重大改革。所以我同意反向代理将是这样做的方式。 this answer 看起来很有希望。
  • 是的,您还可以在平衡的 Linux VM 组上使用 nginx。
【解决方案2】:

根据对我的评论问题的回答,一个建议是在 2 个数据中心中维护重复服务,并使用 Azure 流量管理器(或 DynDNS 等 DNS 服务)对服务进行负载平衡。当您有更新时,部署到一个数据中心并更改流量管理器设置以适当地指向。

【讨论】:

  • 是的,看起来它必须是某种与 DNS 相关的解决方案。
  • 使用流量管理器会使应用程序面临不同用户同时使用新版本和旧版本的可能性(甚至可能使用两组不同的数据,具体取决于应用程序的架构)。见我的alternative answer
猜你喜欢
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 2017-01-29
  • 2015-02-18
相关资源
最近更新 更多