2011-09-28 53 views
3

我正在制定一個計劃,通過緩存WCF Web服務的用戶數據庫來提高Web應用程序的性能和可伸縮性。目標是通過訪問inProc中的這些數據來提高數據庫服務器的性能,同時通過減少數據庫服務器的負載來提高服務的可伸縮性,從而允許添加更多的Web服務器來增加規模。AppFabric與具有sqldependency性能的asp.net緩存

在研究AppFabric時,我真的沒有看到我的情況中的值,因爲它似乎在很大程度上,我只是用往返緩存集羣來取代往返數據庫的往返行爲就像它可能比db的開銷更多,以保持節點同步)。

對於性能問題,似乎使用asp.net高速緩存(正在處理中)將比往返於高速緩存集羣的速度快得多,即使數據位於這些服務器的內存中,即使某些它在本地緩存(我相信這仍然會從Web應用程序中退出)。

對於可伸縮性問題,似乎更容易將相同的Web服務器添加到Web場(每個緩存正在處理的用戶數據),而不是單獨管理緩存羣集,這會增加複雜性。

這樣說,有人可以解釋爲什麼我會選擇一種方法比另一方,給我的既定目標?如果您推薦AppFabric方法,您能解釋性能如何比在進程中將數據存儲在asp.net緩存中更好。

謝謝!

回答

2

您說得對,應用程序結構緩存存儲在進程外。

當請求進入應用程序結構緩存項目時,首先會查找該項目的位置,然後執行wcf net.tcpip調用以獲取該項目。因此,它將比asp.net緩存更慢。但有些時候應用程序緩存更好:

  • 當應用程序池被回收時,您不會丟失緩存。
  • 如果你有100臺Web服務器,那麼你需要從數據庫中獲取一次數據,而不是100次
  • 如果您運行的是Windows的企業版,你不鬆高速緩存,如果一臺機器出現故障
+0

謝謝西拉,很好的信息。還有更多問題。由於對緩存數據的請求沒有處理,並且很可能在另一臺機器上運行,所以這聽起來似乎不會直接進入數據庫,從而改善性能。數據庫直接表現可能更糟糕?如果是這樣的話,看起來唯一的好處是,通過向集羣添加更多計算機來擴展AppFabric層,以便通過分區等來擴展數據庫更容易。這是一個正確的假設嗎? – user969996

+1

Appfabric比數據庫更快,因爲數據庫可能需要轉到磁盤。您可以將appfabric配置爲在本地進行緩存,但這會在進行中。 –

1

我在codeproject上找到了this topic。希望它能回答你的問題

0

你應該考慮NCache作爲其他選項。 NCache是​​一款速度極快的內存分佈式緩存,可降低與數據庫相關的性能瓶頸,增強應用程序的可擴展性。

至於使用asp.net緩存的問題,你應該保持頭腦到其侷限性。它僅適用於小型網站。但是當服務器數量增長時,asp.net緩存可能會因爲它的進程內性質而導致一些性能和可伸縮性問題。在更大的網絡花園中,您需要擁有內存分佈式緩存。 Read this僅供參考