2012-07-11 121 views
3

我有一個ASP.NET MVC 2 Azure應用程序,我試圖從單租戶切換到多租戶。我一直在評論堆棧溢出的許多博客和帖子,以及這裏的問題,但我仍然試圖圍繞這個特定應用程序的特定細節。Windows Azure和多個存儲帳戶

當前,應用程序將一些信息存儲在SQL Azure數據庫中,以及Azure存儲帳戶中的一些其他信息。我正在考慮編寫租戶配置代碼,以便爲新的租戶創建新的數據庫以及新的Azure存儲帳戶。這給我帶來了以下問題:

我將如何在本地測試此方法?據我所知,本地Azure存儲模擬器只有1個存儲帳戶。我不確定我是否能夠在本地創建其他人。我將如何能夠在本地進行測試?或者會有可能嗎?

回答

3

有多個方面需要考慮與多租戶,其中之一是數據架構。您還擁有賬單,性能,安全等等。

關於數據架構,我們先來探討SQL存儲。您可以使用以下選項:添加您的代碼用於過濾記錄的CustomerID(或其他標識符),爲不同的客戶使用不同的模式容器(每個客戶都擁有專用模式擁有的所有數據庫對象的副本在數據庫中),線性分片(每個客戶都有自己的數據庫)和聯合(SQL Azure的特性,基於性能和可伸縮性需求提供漸進式分片)。所有這些選項都是有效的,但對性能,可伸縮性,安全性,維護(如備份),成本以及當然數據庫設計有不同的影響。根據您提供的信息,我無法告訴您選擇哪一個;如果您已經擁有代碼庫,某些模型比其他模型更容易實現。一般來說,線性分片是最簡單的模型,它提供了強大的客戶隔離,但也許是最昂貴的。基於模式的分離並不難,但需要很好地處理安全性需求,並且可能引入跨客戶性能問題,因爲這種方法不是無共享的(對於同一數據庫中的客戶)。最後,聯合會要求使用客戶識別器,並且有一些限制;然而,這項技術使您可以更好地控制性能分佈和長期可擴展性(因爲像線性分片一樣,聯合使用無共享體系結構)。

關於存儲賬戶,每個客戶使用不同的存儲賬戶是最終的選擇。如果您不使用單獨的存儲帳戶,您將面臨的主要問題是性能限制,例如可以使用單個存儲帳戶執行的每秒最大事務數。但是,正如你指出的那樣,本地測試可能是一個問題。但請考慮:本地模擬器不提供與Azure存儲帳戶100%的奇偶校驗(模擬器不支持某些功能)。所以我只會使用本地模擬器進行初始開發和故障排除。任何嚴重的測試,包括多租戶測試,都應該使用真實存儲帳戶進行。這是您完全測試應用程序的唯一方法。

+0

謝謝!這簡要總結了我在處理這個項目時所瞭解和研究的所有選項。我注意到你是一位專門研究這一確切技術領域的顧問,你是否有興趣安排一筆交易,我會付給你或你團隊的人來幫助我構建一個非常基本的骨幹多租戶應用程序,以幫助我理解所有供應/授權/計量/縮放/計費等主要多租戶問題的不同組件?然後,我可以轉向並將相同的理論應用到我的客戶的應用程序!讓我知道如果這是你的興趣:) – John 2012-07-11 21:38:16

+0

如果你有興趣,請給我發電子郵件在我的名字(john)在johnarnold.ca – John 2012-07-11 21:46:47

+0

嗨約翰 - 很高興我能幫上忙。關於多租戶框架,我已經開發了一個!你可以在這裏找到它:https://scale.bluesyntax.net。它仍然處於Beta版,但它爲線性和模式分離分片提供了一個很好的模型。有關提供的API的更多詳細信息以及更多信息,請訪問https://scale.bluesyntax.net/About.aspx - 我將分別與您聯繫,以瞭解您是否感興趣或者如果您正在尋找更多定製的內容。 – 2012-07-12 01:45:46

0

您應該考慮不創建單獨的數據庫,而是在單個SQL數據庫中創建不同的對象名稱空間。每個租戶都可以擁有自己的一套表格。

根據您使用存儲的方式,您可以爲每個客戶端創建單獨的存儲容器或消息隊列。

鑑於這些限制,您應該能夠使用存儲模擬器和本地SQL實例在本地進行測試。

請讓我知道,如果你需要進一步的解釋。

+0

感謝您的評論。我已經考慮過讓客戶端數據在共享數據庫中的替代方案,但是我們傾向於每個擁有分貝數據庫的客戶的原因有幾個。即爲了可擴展性和維護/備份而保持數據的物理分離。我們認識到這樣做的成本較高。 – John 2012-07-11 21:36:29