2013-10-01 21 views
1

如果ASP.NET網站被設計爲可以被許多用戶(即10,000個用戶)同時訪問,那麼技術,知識,方法,設計或實踐那可以實施?提高ASP.NET的性能以便能夠被許多用戶訪問

請分享名稱的設計/做法嗎?我只需要知道這些技術的名稱,以便我可以繼續在Google中做進一步的研究。

謝謝。

+1

那麼,你可以通過橫向擴展(得到很多的服務器)和垂直縮放(獲得更強大的服務器) – CharlesAD

+0

哪裏是10000個併發用戶來自的需求開始? –

+0

看http://stackoverflow.com/questions/3312569/what-are-the-ways-to-improve-asp-net-websites-performance – cosset

回答

3

這是一個巨大的話題 - 正如評論所說,沒有魔力。

我會將響應分成兩部分:體系結構和過程。

從架構的角度來看,有一些做法。首先是橫向擴展 - 即增加更多的服務器,通常由負載均衡器管理。這是一個相對便宜的硬件解決方案,但要求您知道瓶頸在哪裏。最簡單的水平可伸縮性技巧是添加更多的Web服務器;水平縮放數據庫服務器通常需要使用諸如分片之類的技術的大量複雜性。水平縮放可以提高您的彈性以及性能。

垂直可擴展性基本上意味着升級硬件 - 更多RAM,更多CPU,SSD磁盤等。這通常是最便宜的解決方案。它也可能意味着分離元素的解決方案 - 例如將Web服務器與數據庫服務器分開。

下一個架構解決方案是緩存 - 這本身就是一個巨大的話題。添加CDN是一個好的第一步;許多CDN提供商還提供「應用程序加速器」選項,這些選項可以有效地添加爲反向緩存代理(很像@Aviatrix建議的)。添加您自己的反向緩存代理通常是解決您在自己的環境中出現的一些奇怪現象,或者從ASP.Net服務器中卸載靜態文件服務的解決方案。

當然,ASP.Net在框架內提供了大量的緩存選項 - 確保您閱讀並瞭解它們;他們給予巨大的回報以降壓。還要確保你通過YSlow這樣的工具來運行你的解決方案,以確保你正在設置適當的HTTP緩存頭。

另一個可能或不可能幫助的架構解決方案是異步調用外部服務。如果您的解決方案依賴於外部Web服務,則同步調用該服務基本上會將您的站點限制爲外部系統的容量和彈性。對於高流量的解決方案,這不是一個好主意。

對於非常高的可擴展性,許多網站使用NoSQL的持久性 - 這又是一個很大的話題,而且有很多複雜的權衡。

從外觀工藝來看,如果可擴展性是首要關注的問題,你需要把它烤到開發流程中。這意味着要在整個項目中進行定期的性能和可擴展性評估,並構建一個測量框架,以便您決定要追求哪些優化。

你需要能夠加載測試您的解決方案 - 但在交通的生產水平負載測試通常是商業不現實的,所以你需要找到一個替代的解決方案 - 我經常使用的JMeter有代表性的基礎。您還需要能夠在負載下找到瓶頸 - 這可能需要檢查代碼,並使用分析器(RedGate做得很好)。

最重要的是要有評估權衡的過程 - 幾乎所有的性能/可擴展性提高爲你關心的一些其他東西爲代價。負載均衡器成本高昂;反向緩存代理解決方案增加了複雜性NoSQL需要開發團隊的新技能; 「聰明」的編碼習慣往往會降低可維護性。我建議建立您所需的基準,建立一個衡量框架,根據該基準評估您的解決方案,並分析確定瓶頸。每種提高可伸縮性的解決方案都必須解決當前的瓶頸問題,並且我建議使用概念驗證階段來確保解決方案確實具有預期的影響。

最後,對於現代硬件上的大多數Web應用程序,10000個併發用戶並不是特別大的數字。

2

這裏是我2C誰的人目前正在建設一個可擴展的系統,asp.net後端

  1. 使用NGINX作爲反向代理和緩存。賠率是你的用戶將要求大部分可以被緩存的相同數據,使用它。
  2. 儘可能在服務器和客戶端上使用正確的緩存http頭和緩存,要小心,這可能會導致更新內容和用戶看到它之間的延遲問題。
  3. 有很多內存和SSD的服務器,ssd確實幫了大忙!
  4. 使用NGINX或別的東西作爲負載平衡器來分散服務器之間的負載。