Bağlantı esnekliği
Yeniden deneme komutları
Üstel geri alma ile komutları yeniden denemek için istemci bağlantılarınızı yapılandırın. Daha fazla bilgi için bkz. yeniden deneme yönergeleri.
Test dayanıklılığı
Bir düzeltme ekinin benzetimini yapmak için bir yeniden başlatma kullanarak sisteminizin dayanıklılığını test edin. Performansınızı test etme hakkında daha fazla bilgi için bkz. performans testi.
Linux tarafından barındırılan istemci uygulamaları için TCP ayarları
Bazı Linux sürümleri, varsayılan olarak iyimser TCP ayarlarını kullanır. TCP ayarları, bağlantıyı sorunsuz bir şekilde kapatmadan önce bir Redsıs sunucusu yanıt vermediğinde uzun bir süre için bir önbelleğe istemci bağlantısının yeniden kurulabileceği bir durum oluşturabilir. Bir bağlantıyı yeniden kurma hatası, örneğin planlanmamış bakım için Azure önbelleğinizin birincil düğümü kullanılamaz hale gelirse meydana gelebilir.
Bu TCP ayarlarını yapmanızı öneririz:
| Ayar | Değer |
|---|---|
| net.ipv4.tcp_retries2 | 5 |
Senaryo hakkında daha fazla bilgi için, bkz. bağlantı, Linux üzerinde çalışırken 15 dakika boyunca yenidenoluşturmaz. Bu tartışma, StackExchange. Redsıs Kitaplığı hakkında olduğunda, Linux üzerinde çalışan diğer istemci kitaplıkları da etkilenir. Açıklama hala yararlı olur ve diğer kitaplıklara genelleştirebilirsiniz.
StackExchange. Redsıs ile ForceReconnect kullanma
Nadir durumlarda, bir bağlantı bırakıldıktan sonra StackExchange. redin yeniden bağlantı kurma işlemi başarısız olur. Bu durumlarda, istemciyi yeniden başlatmak veya yeni bir oluşturma ConnectionMultiplexer sorunu düzeltir. ConnectionMultiplexerUygulamaların düzenli olarak yeniden bağlanmaya zorlanmalarına izin verirken tek bir model kullanmanızı öneririz. Uygulamanızın kullandığı Framework ve platformla en iyi şekilde eşleşen hızlı başlangıç örnek projesine göz atın. Hızlıbaşlangıçlarımızda Bu kod deseninin örneklerini görebilirsiniz.
Kullanıcıları, ConnectionMultiplexer ObjectDisposedException eskisini elden atma sonucu olarak ortaya çıkabilecek herhangi bir hatayı işlemelidir.
ForceReconnectAsync()Ve için RedisConnectionExceptions çağrısı RedisSocketExceptions . Ayrıca ForceReconnectAsync() RedisTimeoutExceptions , için ' i de çağırabilirsiniz, ancak yalnızca genel kullanım ReconnectMinInterval ve ReconnectErrorThreshold . Aksi takdirde, yeni bağlantıların oluşturulması, zaten aşırı yüklenmiş olduğu için zaman aşımına uğramış bir sunucuda basamaklı hatalara neden olabilir.
Uygun zaman aşımlarını yapılandırma
İki zaman aşımı değeri bağlantı dayanıklılığı göz önünde bulundurulması için önemlidir: bağlantı zaman aşımı ve komut zaman aşımı.
Bağlan zaman aşımı
, connect timeout Istemciniz redsıs sunucusuyla bağlantı kurmak için beklediği süredir. İstemci kitaplığınızı beş saniyelik bir süre kullanacak şekilde yapılandırın connect timeout ve daha yüksek CPU koşullarında bile bu sisteme bağlanmak için yeterli zaman ayırın.
Küçük bir connection timeout değer bu zaman çerçevesinde bir bağlantının kurulagarantisi vermez. Bir sorun yanlış olursa (yüksek istemci CPU, yüksek sunucu CPU 'SU vb.), kısa bir connection timeout değer bağlantı denemesinin başarısız olmasına neden olur. Bu davranış genellikle kötü bir durumun daha kötüleşmesini sağlar. Yardımcı olmak yerine, daha kısa zaman aşımları, sistemi yeniden bağlanmaya çalışmak için yeniden başlamaya zorlayarak, Connect-> Fail-> yeniden deneme döngüsüne neden olabilecek sorunu ortadan kaldırır.
Komut zaman aşımı
Çoğu istemci kitaplığı için başka bir zaman aşımı yapılandırması vardır command timeouts . Bu, Istemcinin redsıs sunucusundan yanıt beklediği süredir. Beş saniyeden daha az bir başlangıç ayarı yapmanızı önerdiğimiz halde, command timeout senaryonuza ve önbellekte depolanan değerlerin boyutlarına göre daha yüksek veya daha düşük bir değer ayarlamayı düşünün.
command timeoutÇok küçükse bağlantı kararsız görünebilir. Ancak, command timeout çok büyükse, uygulamanız, komutun zaman aşımına uğrar olup olmadığını bulmak için uzun süre beklemeniz gerekebilir.
İstemci bağlantısı ani artışlarını önleyin
Bağlantı kaybından sonra yeniden bağlanırken aynı anda birçok bağlantı oluşturmaktan kaçının. Kısa Connect zaman aşımlarının daha uzun kesintilere yol açabilir, aynı anda birçok yeniden bağlanma girişimi de başlatıldığında sunucu yükü artabilir ve tüm istemcilerin başarıyla yeniden bağlanması için gereken süreyi genişletebilirsiniz.
Birçok istemci örneğini yeniden bağladıysanız, bağlı istemci sayısında bir bual ani artış oluşmasını önlemek için yeni bağlantıları kademelendirme göz önünde bulundurun.
Not
StackExchange.Redisİstemci kitaplığını kullandığınızda, abortConnect false bağlantı dizeniz için olarak ayarlayın. Tanıtıcının yeniden bağlanmasına olanak öneririz ConnectionMultiplexer . Daha fazla bilgi için bkz. StackExchange. redsıs en iyi uygulamaları.
Bağlantıların solmasından kaçının
Önbelleklerde önbellek katmanı başına istemci bağlantısı sayısı sınırı vardır. İstemci uygulamanız tarafından kapatılan bağlantıları yeniden oluşturduğu ve eski bağlantıları kaldıran emin olun.
Bakım bildirimini ilerlet
Yaklaşan bakım hakkında bilgi edinmek için bildirimleri kullanın. Daha fazla bilgi için, bkz. planlanan bir bakımın ön bölümünde bildirim alabilir.
Bakım penceresini zamanla
Bakım sağlamak için önbellek ayarlarınızı yapın. Önbelleğiniz için herhangi bir olumsuz efekti azaltmak üzere bir bakım penceresi oluşturma hakkında daha fazla bilgi için bkz. güncelleştirmeleri zamanlama.
Esnekliği için daha fazla tasarım deseni
Dayanıklılık için tasarım desenleri uygulayın. Daha fazla bilgi için bkz. uygulamamı dayanıklı hale getirme nasıl yaparım?.
Boş durma zaman aşımı
Redo için Azure önbelleğinde bağlantılar için 10 dakikalık bir boşta kalma zaman aşımı vardır; bu nedenle istemci uygulamanızdaki boşta kalma zaman aşımı ayarı 10 dakikadan az olmalıdır. En yaygın istemci kitaplıklarının, istemci kitaplıklarının PING redsıs sunucusuna otomatik olarak ve düzenli olarak redsıs komutları göndermesini sağlayan bir yapılandırma ayarı vardır. Bununla birlikte, bu tür bir ayar olmadan istemci kitaplıklarını kullanırken, bağlantının canlı tutulması, müşteri uygulamalarının sorumluluğundadır.