2011-05-18 54 views
5

我們的Web應用程序部署在一個Web場(超過20臺服務器)中。該網站擁有巨大的流量(每天有數百萬的網頁瀏覽量)。 在第一個版本中,此應用程序使用EntLib的CacheManager(企業應用程序塊緩存)。我們稱之爲「本地服務器緩存」。有許多好處,但我們仍然有一個主要缺點:每個服務器管理自己的緩存並訪問數據庫(不分發)。適用於大型網站的AppFabric緩存

這就是爲什麼我們試圖實施AppFabric緩存功能以減少數據庫往返行程。一個我們的主要問題是數據同步:

  • 與GetAndLock/PutAndUnLock(又名分佈式鎖)頁面響應時間higly影響
  • 用GET /認沽+簡單的服務器端鎖,我們有這麼多的要求與本地緩存;沒有好處。

那麼什麼是大型網站的緩存策略?

謝謝,

回答

1

正如我在MSDN上提到的那樣,即時一致性非常昂貴。您必須接受一致性的權衡,或者安排大量現金立即保持一致。使用我們在MSDN上討論的隔離讀/寫模型,以及隊列,可能會爲您提供最佳的性能/一致性。 David建議的多級緩存也非常出色,具體取決於您的整體架構/設計。使用您自己的本地進程或localhosted緩存實現也提供了很大的價值 - 而不是我自己的AppFabric的OOTB本地緩存風扇。

--ab

+0

好的結論 – Cybermaxs 2011-05-27 10:00:59

4

我會說緩存只讀數據儘可能。爲此,您可以使用AppFabric緩存服務。您可以設置5個緩存服務器的集羣。然後,您所有的20臺前端服務器都會與此緩存集羣進行通信以獲取緩存數據。您還可以利用將最常見的數據直接保存在前端(本地緩存)上。例如我們的配置是這樣的:

  • 前端(16臺機器)與LocalCache存儲150.000最經常使用的物品
  • 緩存集羣(4臺機器)與高可用性方式存儲所有數據緩存
  • 數據庫(1臺機器)的所有數據

對於要更新的​​數據而言,它會變得更加棘手。每次你介紹鎖具,你的表現都會受到影響。

+0

這是appfabric緩存的典型體系結構。 我想要一個更新數據的策略:在數據已過期的頁面請求內部?通過一個背景線程(並保留我的數據的髒副本返回)?通過專門的服務(但如何處理業務規則)? 我已經列出了這個可能的解決方案。有任何想法嗎 ? – Cybermaxs 2011-05-19 09:15:49