Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.