您的應用程序中有兩個不同的元素。應用程序服務器是持有ASP .Net應用程序的應用程序服務器,並且有數據庫服務器。
Web應用程序服務器本質上是無狀態的,因此擴展應用程序服務器將非常簡單。只需在多個實例上部署應用程序,然後將負載均衡器放在它們的前面。
對於數據庫服務器來說事情比較複雜。關係數據庫由於其事務性和關係性而非常難以擴展,並且通常會涉及在應用程序級別編寫自定義代碼,以支持橫向擴展方案。這實際上是一個重要的方面,因爲可擴展性不僅僅是通過增加更多硬件(更多機器)來透明地實現,而且您還必須投資編碼。用Sql Server進行擴展的最普遍的兩種方法可能是通過鏡像和分區。當Sql Server部署在雲中時擴展出來並不受雲本身的任何幫助,它仍將基於內置選項。
除了在非免費的數據庫解決方案方面涉及到某種程度的複雜性,橫向擴展可能比垂直擴展要昂貴得多。例如,考慮以下情況:
1×10000 $機+ 1×8,000 $ SQL服務器專業執照= 18000 $
10×1000 $機+ 10×8000個$ SQL服務器專業執照= 90000 $
由於它只需要一個Sql Server許可證,昂貴的機器最終要比使用10個許可證的便宜的10臺機器便宜得多。
現在我已經到了雲端擴展的地步,事情變得複雜了一點。雲提供商給你的實質是虛擬機。虛擬機在劃分CPU和RAM內存方面非常出色,如果需要,可以通過增加更多的CPU功率和更多的內存爲機器增加更多功率。這很好,但數據庫高度依賴於I/O(硬盤)速度,這是虛擬機不太好的一個領域。
與相關亞馬遜雲優惠和Sql Server我可以推薦this非常好的文章(我實際上通過遵循@marc_s提供的鏈接)。爲了在擴展方案上實現良好的I/O速度,作者正在使用EBS卷。這種方法的問題在於,EBS卷不是您已部署數據庫的服務器內部的硬盤,而是通過網絡訪問的存儲卷,並且其效率會大大降低。
如果您沒有與亞馬遜綁定,那麼您可以嘗試在其基礎架構中也提供物理機器(專用服務器)的雲提供商。據我所知gogrid這樣做,但也可能有其他人。我們的想法是將數據庫部署到專用服務器(良好的I/O性能)和虛擬機上的應用程序服務器(這些服務器可以水平擴展)。
微軟也有一個雲服務,叫做Windows Azure,它可能是目前最有趣的一個,但在我看來,它正在讓他們的關係數據庫產品失望。他們有一個專門的服務,稱爲Sql Azure。它的一個主要優點是比正常數據庫更容易管理,但是它的缺點是縮放比例非常有限。唯一的縮放選項是數據庫大小,只能達到50Gb。他們沒有提及任何關於數據庫交付的性能,也不能進行與此相關的任何配置。有可能性能低於廉價專用服務器的性能(實際上有人在StackOverflow上發佈帖子,人們抱怨Sql Azure速度與物理機器相比)。您可以使用分片進行擴展,但如上所述,這會影響並限制數據庫結構及其在代碼中的使用方式。
在結論:
- 如果您正在構建與關係數據有非常大的需求的業務應用,那麼雲提供商可能不會是你最好的選擇。您可以考慮使用您自己的硬件或可能提供給您選擇使用專用服務器的提供商。
- 您可能會考慮使用nosql數據庫解決方案構建您的應用程序。這些更具可擴展性,但缺點是它們有一些功能限制(無交易,無連接,有限的索引)。如果您對這種方法感興趣,Sql Table Storage可能是一個開始的地方。你也可以考慮採用混合方法,這將涉及到你的部分數據將保存在關係數據庫中,並且其中的一部分數據將保存在nosql數據庫中。
- 擴展數據庫之前,請檢查是否沒有其他您可能首先嚐試的選項。例如,檢查是否存在效率低下的查詢或構建緩存層,這取決於應用程序,可能會給數據庫帶來相當大的壓力。
也許這可以幫到您? [配置亞馬遜EC2中的SQL Server - 培訓視頻](http://www.brentozar.com/archive/2011/09/configuring-sql-server-amazon-ec2-training-video/) –
這將有助於很多,如果你可以定義「比例」。我們需要知道您是否只是想要運行「普通」應用程序,或者我們是否需要考慮縱向或橫向縮放的解決方案。 –