2013-07-10 92 views
1

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

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

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

问题是由更改DNS记录和传播引起的停机时间。

如何在不更改DNS记录的情况下执行此操作的任何建议?

我唯一的想法是,当他们击中旧应用程序时做某种类型的重定向,但似乎会导致每个请求的延迟 - 或者它会?

+0

什么原因导致需求(理由)缓慢地将租户缓慢移动几次,同时将其他租户保留在旧版本上? – viperguynaz

+1

这使我们能够在新版本的应用程序中添加一些“早期采用者”客户,并且在移动其他客户之前,我们可以确保一切正常。 – PeteShack

回答

1

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

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

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

+0

这就是DNS解决方案的问题。我们对小功能版本使用功能切换,但在这种情况下,它对新的数据库模式进行了重大修改。所以我同意反向代理将是实现它的方式。 [这个答案](http://stackoverflow.com/questions/6200222/how-do-i-create-a-reverse-proxy-that-runs-in-azure)看起来很有希望。 – PeteShack

+0

是的,您也可以在一组平衡的Linux VM上使用nginx。 –

0

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

+0

是的,它看起来必须是某种类型的DNS相关解决方案。 – PeteShack

+0

使用流量管理器会暴露应用程序,使得不同的用户可能同时使用新版本和旧版本(甚至可能使用两组不同的数据,这取决于应用程序的体系结构)。看到我的[替代答案](http://stackoverflow.com/a/17602669/376366)。 –

相关问题