僅需一點背景。我目前有一個託管Windows Azure的站點,有多個實例,而且AppFabric也是我唯一的緩存提供者。一起使用InProc和Azure AppFabric高速緩存
一切都很好,直到今天早上我的交通刺激。在實例變得超載並停止響應之後,一旦新實例開始,所有事情都會恢復正常。
但是我開始從AppFabric收到消息,說我被限制,因爲在給定的時間內請求太多。這是公平的,當然是給它下地獄。
爲了在將來避免這些消息,我計劃在非常短的壽命期內實施InProc緩存。因此,它首先檢查InProc,如果不去AppFabric,則不檢查數據庫。
ObjectCache cache = MemoryCache.Default;
CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(5);
我的問題是
- 這是處理這種情況的最好方法是什麼?
- 這是干擾AppFabric緩存嗎?
- 我忽略的任何問題?
更新 我只是想說,我選擇了上面的方法,而且運作良好。我只是將它用於一般數據存儲而不是會話狀態。具有會話狀態的MemoryCache在Azure上無法正常工作,因爲沒有服務器關聯(如下面的David所述)。
更新16-03-2012 在意識到顯而易見後,我也在大多數頁面上禁用了SessionState。我的大部分頁面都不需要它,因此這會迅速減少我在重負載下緩存的呼叫。我也爲大多數頁面禁用了ViewState,只是爲了稍微快一點的頁面加載時間。
我發現你不應該將InProc與Azure一起使用,尤其是對於具有多個實例的角色。您不保證具有在同一實例上跨請求訪問相同進程的上下文。 – 2012-03-08 05:08:58
嗨格倫。感謝您的迴應。我知道InProc在任何實例中都不一樣,但是我更多地談論了使用InProc作爲每個實例的臨時緩存,這些緩存在幾分鐘後過期,只是爲了減輕AppFabric的壓力。我還認爲,即使每5分鐘擦一次,重負載下的InProc速度也會更快。 – 2012-03-08 05:15:17
您是否考慮監控請求並在高峯時間以編程方式啓動新實例? – 2012-03-08 05:16:46