Asp.net

Memcache 服務宕機 - 如何處理?

  • November 9, 2009

我在我的 ASP.NET 應用程序中使用 Memcache。我有 3 個它連接到的 memcache 伺服器。如果所有這些都已關閉,則載入頁面會有很大的延遲。當所有伺服器都關閉時,我不想使用 memcache。

當我單步執行程式碼時,我注意到當伺服器關閉時,memcache 程式碼不會引發異常(我認為我可以在我的應用程序中“擷取”它並採取必要的步驟)。

我將如何處理這種情況?

編輯:更多細節。我的配置文件如下所示:

我們將 deadTimeOut 的預設設置從 2 分鐘更改為 10 秒,以便盡快恢復當機(最佳設置是什麼?)。我想到了實現這一點的方法,並想由你們來執行它。基本上,這是要求:

  1. 如果伺服器出現故障 - 提醒管理員
  2. 關閉每 10 秒檢查一次伺服器是否啟動的計時器 (isAliveTimer)
  3. 如果任何伺服器關閉,請不要使用 memcache。我的理解是,如果 2、1 出現故障,我們仍然會遇到計時器檢查死伺服器是否啟動的問題,這會導致響應時間不佳。

我目前在我的應用程序中使用以下程式碼:

private class Singleton
{
 private static MemcachedClient instance;

 protected Singleton()
 {
 }

 public static MemcachedClient Instance()
 {
   if (instance == null)
   {
     instance = new MemcachedClient();
   }

   return instance;
 }
}

要創建一個實例,我會:

MemcachedClient mc = Singleton.Instance();

我可以看看 mc.pool.WorkingServers.Items

$$ 0 $$.IsAlive 檢查第一台伺服器是否處於活動狀態。如果它是假的,我可以發送警報(照顧要求 1)。但是,如果伺服器在獲取 MemcachedClient 的實例後宕機了怎麼辦?由於我使用的是單例對象,因此我認為我無法處理創建實例後伺服器停機的案例。 我不確定如何處理 2 和 3。

在我看來,我們的要求相當簡單。由於 memcache 被負載較大的公司使用,我想知道他們如何處理髮送管理員警報和防止 TCP 超時的情況。

任何幫助表示讚賞!謝謝

基本上是要推薦 Chris Kinsman 剛剛發布的內容。我要補充一點,您還可以使用單獨的執行緒來維護與您的 memcache 伺服器的活動連接池,這樣您就不會不斷地使用資源來創建和破壞連接。這往往在重負載下具有優勢,並且通常更優雅。

由於您正在處理 tcp 超時,因此 memcache 中沒有任何內容可以看到連接問題。最好的辦法是讓機器能夠相互竊取 IP,以防單個設備出現故障。

引用自:https://serverfault.com/questions/81864