2013-07-10 128 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)。 –

相關問題