Megosztás a következőn keresztül:


Kapcsolati ellenállóképesség

Fontos

Az Azure Cache for Redis bejelentette az összes termékváltozat kivonási ütemtervét. Javasoljuk, hogy a meglévő Azure Cache for Redis-példányokat mihamarabb áthelyezhesse az Azure Managed Redisbe .

További részletek a nyugdíjba vonulásról:

Újrapróbálkozás parancsai

Konfigurálja az ügyfélkapcsolatokat úgy, hogy a parancsokat exponenciális visszavonulással próbálja újra. További információkért lásd az újrapróbálkozáshoz szükséges irányelveket.

A rugalmasság tesztelése

Tesztelje a rendszer kapcsolattörésekkel szembeni rugalmasságát újraindítással egy javítás szimulálásához. A teljesítmény teszteléséről további információt a Teljesítménytesztelés című témakörben talál.

TCP-beállítások Linux által üzemeltetett ügyfélalkalmazásokhoz

Egyes Linux-verziók alapértelmezett TCP-beállításai miatt a Redis-kiszolgálókapcsolatok 13 percig vagy tovább meghiúsulhatnak. Az alapértelmezett beállítások megakadályozhatják, hogy az ügyfélalkalmazás észlelje a lezárt kapcsolatokat, és automatikusan visszaállítsa őket, ha a kapcsolat nem volt zökkenőmentesen lezárva.

A kapcsolat újbóli létesítése meghiúsulhat olyan esetekben, amikor a hálózati kapcsolat megszakad, vagy a Redis-kiszolgáló offline állapotba kerül a nem tervezett karbantartás miatt.

Az alábbi TCP-beállításokat javasoljuk:

Setting Érték
net.ipv4.tcp_retries2 5

A forgatókönyvről további információkért lásd: A kapcsolat nem áll helyre 15 percig, amikor Linuxon fut. Bár ez a vita a StackExchange.Redis kódtárról szól, a Linuxon futó többi ügyfélkódtár is érintett. A magyarázat továbbra is hasznos, és általánosíthat más kódtárakra.

A ForceReconnect használata a StackExchange.Redis esetében

Ritkán a StackExchange.Redis nem tud újracsatlakozni a kapcsolat megszakadása után. Ezekben az esetekben az ügyfél újraindítása vagy egy új ConnectionMultiplexer létrehozása megoldja a problémát. Azt javasoljuk, hogy használjon egy singleton ConnectionMultiplexer mintát, miközben lehetővé teszi az alkalmazások számára, hogy rendszeresen kényszerítsék az újracsatlakozást. Tekintse meg azt a gyorsindítási mintaprojektet, amely a legjobban megfelel az alkalmazás által használt keretrendszernek és platformnak. A rövid útmutatókban egy példa látható erre a kódmintára.

A felhasználóknak kezelniük kell a ConnectionMultiplexer okozható ObjectDisposedException hibákat, amelyek a régi eldobásakor fordulhatnak elő.

Hívás ForceReconnectAsync() a RedisConnectionExceptions és RedisSocketExceptions. Hívhatja ForceReconnectAsync()RedisTimeoutExceptions-t, de csak akkor, ha bőkezű ReconnectMinInterval és ReconnectErrorThreshold van. Ellenkező esetben az új kapcsolatok létrehozása kaszkádolt hibát okozhat egy olyan kiszolgálón, amely túllépi az időkorlátot, mert már túlterhelt.

Egy ASP.NET alkalmazásban a StackExchange.Redis csomag közvetlen használata helyett a Microsoft.Extensions.Caching.StackExchangeRedis csomag integrált implementációját használhatja. Ha a Microsoft.Extensions.Caching.StackExchangeRedis szolgáltatást használja egy ASP.NET alkalmazásban a StackExchange.Redis közvetlen használata helyett, a tulajdonságot igaz értékre állíthatja UseForceReconnect :

Microsoft.AspNetCore.Caching.StackExchangeRedis.UseForceReconnect = true

Az időtúllépések megfelelő konfigurálása

A kapcsolat rugalmasságában két időtúllépési értéket kell figyelembe venni: a kapcsolódási időtúllépést és a parancs időtúllépését.

Csatlakozási időkorlát

Ez connect timeout az az idő, amikor az ügyfél megvárja, hogy kapcsolatot létesítsen a Redis-kiszolgálóval. Konfigurálja az ügyfélkönyvtárat connect timeout úgy, hogy öt másodperces időtartamot használjon, így a rendszer számára elegendő idő áll rendelkezésre a csatlakozásra még magasabb CPU-terhelés mellett is.

Egy kis connection timeout érték nem garantálja, hogy az adott időkeretben létrejön a kapcsolat. Ha valami hiba történik (magas ügyfél cpu, magas kiszolgálói PROCESSZOR stb.), akkor egy rövid connection timeout érték miatt a kapcsolat sikertelen lesz. Ez a viselkedés gyakran rosszabbá teszi a rossz helyzetet. A segítség helyett a rövidebb időtúllépések súlyosbítják a problémát azáltal, hogy arra kényszerítik a rendszert, hogy újraindítsa az újracsatlakozás folyamatát, ami egy kapcsolódáshoz –> sikertelen –> újrapróbálkozási ciklushoz vezethet.

Parancs időkorlát

A legtöbb ügyfélkönyvtárnak van egy másik időtúllépési konfigurációja command timeouts, amely azt az időt határozza meg, ameddig az ügyfél a Redis-kiszolgálótól érkező válaszra vár. Bár öt másodpercnél rövidebb kezdeti beállítást ajánlunk, érdemes lehet a command timeout magasabb vagy alacsonyabb értéket beállítani a forgatókönyvtől és a gyorsítótárban tárolt értékek méretétől függően.

Ha a command timeout kapcsolat túl kicsi, a kapcsolat instabilnak tűnhet. Ha azonban a command timeout parancs túl nagy, előfordulhat, hogy az alkalmazásnak hosszú ideig kell várnia, hogy megtudja, hogy a parancs időtúllépést fog-e végrehajtani.

Az ügyfélkapcsolati csúcsok elkerülése

Ne hozzon létre egyszerre több kapcsolatot, amikor újracsatlakozik egy kapcsolat megszakadása után. Hasonlóan ahhoz, ahogyan a rövid kapcsolódási időtúllépések hosszabb kimaradást eredményezhetnek, számos újracsatlakozási kísérlet egyidejű indítása növelheti a kiszolgáló terhelését, és meghosszabbíthatja, hogy az összes ügyfél sikeresen újracsatlakozjon.

Ha több ügyfélpéldányt csatlakoztat újra, fontolja meg az új kapcsolatok átmeneti beállítását, hogy elkerülje a csatlakoztatott ügyfelek számának meredek megugrását.

Megjegyzés:

Amikor a StackExchange.Redis ügyfélkönyvtárat használja, állítsa a abortConnect értéket false-ra a kapcsolati karakterláncban. Javasoljuk, hogy hagyja, hogy a ConnectionMultiplexer kezelje az újracsatlakozást. További információ: StackExchange.Redis – ajánlott eljárások.

A hátrahagyott kapcsolatok elkerülése

A gyorsítótárakban korlátozva van az ügyfélkapcsolatok száma gyorsítótárszintenként. Győződjön meg arról, hogy amikor az ügyfélalkalmazás újra létrehozza a kapcsolatokat, azokat bezárja és eltávolítja a régi kapcsolatokat.

Előzetes karbantartási értesítés

Az értesítések segítségével megismerheti a közelgő karbantartást. További információ: Értesítést kaphatok-e a tervezett karbantartás előtt.

Karbantartási időszak ütemezése

Módosítsa a gyorsítótár beállításait a karbantartáshoz. A gyorsítótárra gyakorolt negatív hatások csökkentésére szolgáló karbantartási időszak létrehozásáról további információt a Frissítési csatorna és a Frissítések ütemezése című témakörben talál.

További tervezési minták a rugalmasság érdekében

Tervezési minták alkalmazása a rugalmasság érdekében. További információ: Hogyan tehetem rugalmassá az alkalmazásomat?

Üresjárati időtúllépés

Az Azure Cache for Redis 10 perces időtúllépést biztosít az inaktív kapcsolatokhoz. A 10 perces időtúllépés lehetővé teszi, hogy a kiszolgáló automatikusan megtisztítsa a szivárgó vagy az ügyfélalkalmazások által árván hagyott kapcsolatokat. A Redis-ügyfélkódtárak többsége beépített képességgel rendelkezik arra, hogy rendszeres időközönként küldjön heartbeat vagy keepalive parancsokat a kapcsolatok bezárásának megakadályozása érdekében, még akkor is, ha nincsenek kérések az ügyfélalkalmazástól.

Ha fennáll a veszélye annak, hogy a kapcsolatok 10 percig tétlenek, konfigurálja az keepalive időközt 10 percnél rövidebb értékre. Ha az alkalmazás olyan ügyfélkönyvtárat használ, amely nem támogatja natív módon a keepalive funkcionalitást, akkor a PING parancs rendszeres elküldésével implementálható az alkalmazásban.