SORU
20 EYLÜL 2011, Salı


Sağlanan şey yeniden kurtarmak değil

Tamam, başarılı bir şekilde Sağlanan dağıtmış oldum, ve her şey web sitesinde zaman zaman bir istisna gelmeye başlayana kadar güzelce çalışıyordu:

Deneyin < ERRCA0017 >:Alt durum &; ES0007 >lt Geçici bir arıza var. Daha sonra yeniden deneyin lütfen. (İstek sunucu olduğu için başarısız oldu devlet daraltılmış.)

İlk başta sunucu bellek (daraltılmış devlet) üzerinde çalışan olduğunu tahmin ettiğim, ama sorun değildi sonunda tamamlandı. Olay günlüğü, distributedcacheservice.exe her şimdi ve sonra çöktü buldum ve yeniden üreten yerel geliştirme ortamı: hata basit bir yöntem götürdü

  • Web sitesi başlatmak, önbelleği için bir kaç şey eklemek.
  • “AppFabric Önbelleğe Alma Hizmeti” Yeniden Başlatın.
  • ... ve hata almaya başlıyorum.

Eğer hizmeti yeniden başlatmadan ÖNCE Get-CacheClusterHealth yaparsam, şöyle bir şey:

NamedCache = MyCacheName
    Healthy              = 100,00
    UnderReconfiguration = 0,00
    NotPrimary           = 0,00
    NoWriteQuorum        = 0,00
    Throttled            = 0,00

Yeniden başlatmadan sonra:

Unallocated named cache fractions
---------------------------------

NamedCache = MyCacheName
    Unallocated fraction     = 100,00

Get-CacheClusterHealth, sonucunda da site başarısız olur. Anladığım kadarıyla, bir süre (10 dakika) sonra kendi kendini düzeltir.

Sağlanan kendi ayakları üzerinde geri almak için daha hızlı bir yolu var mı?

CEVAP
14 Kasım 2011, PAZARTESİ


Kısa cevap hayır.

Bir küme yeniden başlatmak için gereken süreyi bana zaman alır düğüm senkronizasyon bir süreç olduğuna inandırır ekstra düğüm eklemek artar.

Dışında gördüğün gerçekten de sağlanan düğüm daraltılmış bir devlet giriyor. Düğümde yüksek/düşük filigran ayarlamak nasıl bağlı olarak kısıtlanmış durumuna girer. Varsayılan olarak yüksek su işareti öğeleri önbellek ayarlanan tahliye politikasına depnding tahliye başlayacak bu saatten sonra 'ı bence. Genellikle LRU (En son kullanılan) kullanmanız gerekir ama eğer önbellek hala sınırları içinde çalıştıramazsınız eğer sunucunuz aşağı getirmek için kendisi gaz.

Uygulamanız eğer bu tür olayları düzgün bir şekilde işlemek eğer yararlı olacaktır. Eğer tüm düğümler küme config listelenen uygulamasından sonra Eğer uygulama hakkında bilgi toplamak için bir sonraki denemede bir sonraki düğüme hareket etmeliyiz. Bir döngü, geçici başarısızlık arayan ve 3 defa yeniden yeniden kullanıyoruz. Eğer 3 kere sonra hata devam ederse ve boş bir exeption değil günlük dönüş. Bu uygulama, farklı bir düğüm erişme veya sorun zaman kurtarmak için düğüm girişimi için izin verir:

 private object WithRetry(Func<object> method)
    {
        int tryCount = 0;
        bool done = false;
        object result = null;
        do
        {
            try
            {
                result = method();
                done = true;
            }
            catch (DataCacheException ex)
            {
                if (ex.ErrorCode == DataCacheErrorCode.KeyDoesNotExist)
                {
                    done = true;
                }
                else if ((ex.ErrorCode == DataCacheErrorCode.Timeout ||
                ex.ErrorCode == DataCacheErrorCode.RetryLater ||
                ex.ErrorCode == DataCacheErrorCode.ConnectionTerminated)
                && tryCount < MaxTryCount)
                {                        
                    tryCount  ;
                    LogRetryException(ex, tryCount);
                }
                else
                {
                    LogException(ex);
                    done = true;
                }
            }
        }
        while (!done);


 return result;
}

Ve bize şu: yapmanızı sağlar

private void AF_Put(string key, object value)
{
    WithRetry(() => defaultCache.Put(key, value));
}

ya da:

private object AF_Get(string key)
{
    return WithRetry(() => defaultCache.Get(key));            
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dylan Brenan

    Dylan Brenan

    22 Aralık 2009
  • incognitotraveler

    incognitotra

    27 Mayıs 2010
  • Rockstar Games

    Rockstar Gam

    17 ŞUBAT 2006