Ez a cikk az Azure Cache for Redis kezelésével kapcsolatos gyakori kérdésekre ad választ.
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:
Hogyan mérhetem fel és tesztelhetem a gyorsítótáram teljesítményét?
- A Redis-kiszolgáló terheléses tesztelésére szolgál
redis-benchmark.exe. Használjaredis-benchmark.exea lehetséges átviteli sebesség megismerésére, mielőtt saját teljesítményteszteket írna. - A gyorsítótár
redis-clifigyelésére használja a paranccsalINFO. A Redis-eszközök letöltésével kapcsolatos utasításokért lásd: Hogyan futtathatom a Redis-parancsokat? - Ha Transport Layer Security/Secure Socket Layer (TLS/SSL) protokollt használ a gyorsítótárpéldányon, adja hozzá a paramétert
--tlsa Redis-eszközök parancsaihoz, vagy használjon proxyt, példáulstunnelengedélyezze a TLS/SSL-t. -
Redis-benchmarkAlapértelmezés szerint portot6379használ. A-pparaméterrel felülbírálhatja ezt a beállítást, ha a gyorsítótár az SSL/TLS-portot6380vagy a vállalati szintű portot10000használja. - Szükség esetén a terheléses teszt futtatása előtt engedélyezheti a nem TLS-portot a Azure Portal .
- Győződjön meg arról, hogy a teszteléshez használt ügyféloldali virtuális gép (VM) ugyanabban a régióban van, mint a Azure Cache for Redis-példány.
- Győződjön meg arról, hogy az ügyféloldali virtuális gép legalább annyi számítási és sávszélesség-képességgel rendelkezik, mint a tesztelt gyorsítótár. A legjobb eredmény érdekében használjon D sorozatú és E sorozatú virtuális gépeket az ügyfelek számára.
- Ha Windows rendszert használ, engedélyezze a virtuális fogadóoldali skálázást (VRSS) az ügyfélgépen. További információ: Virtuális fogadóoldali skálázás a Windows Server 2012 R2 rendszerben.
- Engedélyezze a gyorsítótár-diagnosztikát, hogy figyelhesse a gyorsítótár állapotát. A metrikákat a Azure Portal tekintheti meg, és letöltheti és áttekintheti a metrikákat a választott eszközökkel.
- Ha a terhelés nagy memóriatöredezettséget okoz, skálázzon fel nagyobb gyorsítótárméretre.
Az alábbi példák bemutatják, hogyan kell használni redis-benchmark.exea . Futtassa ezeket a parancsokat a gyorsítótárral azonos régióban található virtuális gépről a pontos eredmények érdekében.
Először tesztelje a folyamatos SET kéréseket egy 1k hasznos adat használatával:
redis-benchmark.exe -h <yourcache>.redis.cache.windows.net -a <yourAccesskey> -t SET -n 1000000 -d 1024 -P 50
A teszt futtatása SET után futtasson folyamatos GET kéréseket 1k hasznos adat használatával:
redis-benchmark.exe -h <yourcache>.redis.cache.windows.net -a <yourAccesskey> -t GET -n 1000000 -d 1024 -P 50
Hogyan engedélyezhetem a kiszolgálói GC-t, hogy nagyobb átviteli sebességet érjen el az ügyfélen a StackExchange.Redis használatakor?
A kiszolgálói szemétgyűjtés (GC) engedélyezése optimalizálhatja az ügyfelet, és jobb teljesítményt és átviteli sebességet biztosíthat a StackExchange.Redis használatakor. A kiszolgálói csoportházirend-objektumról és annak engedélyezéséről az alábbi cikkekben talál további információt:
Engedélyeznem kell a nem TLS/SSL portot a Redishez való csatlakozáshoz?
A Redis-kiszolgáló natív módon nem támogatja a Transport Layer Security (TLS) szolgáltatást, de Azure Cache for Redis támogatja a TLS-t. Ha olyan ügyféllel csatlakozik a Azure Cache for Redis, mint a StackExchange.Redis, amely támogatja a TLS-t, használja a TLS-t.
Feljegyzés
A nem TLS-port alapértelmezés szerint le van tiltva az új Azure Redis-példányok esetében. Ha az ügyfél nem támogatja a TLS-t, engedélyezze a nem TLS-portot a Portok elérése című témakörben található utasításokat követve.
Ha a gyorsítótár TLS-t használ, engedélyeznie kell a TLS-t a --tls Redis-eszközök beállításával, például redis-cli. Használhat olyan segédprogramot is, mint például stunnel az eszközök biztonságos csatlakoztatása a TLS-porthoz a Redis előzetes kiadás ASP.NET munkamenet-állapot-szolgáltatójának bejelentése blogbejegyzésben található utasításokat követve.
A Redis-eszközök letöltésével kapcsolatos utasításokért lásd: Hogyan futtathatom a Redis-parancsokat?
Milyen szempontokat kell figyelembe venni a gyakori Redis-parancsok használatakor?
Ne használjon olyan Redis-parancsokat, amelyek végrehajtása hosszú időt vesz igénybe, hacsak nem ismeri teljes mértékben ezeknek a parancsoknak az eredményét. Például ne futtassa a KEYS parancsot éles környezetben. A kulcsok számától függően hosszú időt vehet igénybe a visszatérés. A Redis egy egyszálas kiszolgáló, amely egyenként dolgozza fel a parancsokat. Ha kiadja a
KEYSparancsot, a Redis nem dolgozza fel a további parancsokat, amíg be nem fejezi a parancs feldolgozásátKEYS.A redis.io webhely az általa támogatott műveletek időösszetettségi részleteivel rendelkezik. Válassza ki az egyes parancsokat az egyes műveletek összetettségének megtekintéséhez.
A használni kívánt kulcsok mérete a forgatókönyvtől függ. Ha a forgatókönyv nagyobb kulcsokat igényel, módosíthatja a
ConnectionTimeout, majd újrapróbálkozási értékeket, és módosíthatja az újrapróbálkozási logikát. A Redis-kiszolgáló szempontjából a kisebb kulcsértékek jobb teljesítményt nyújtanak.Ezek a szempontok nem jelentik azt, hogy nem tárolhat nagyobb értékeket a Redisben, de a késések magasabbak. Ha egy adatkészlet nagyobb, mint egy másik, több példányt is használhat
ConnectionMultiplexer, amelyek mindegyike eltérő időtúllépési és újrapróbálkozási értékekkel van konfigurálva. További információ: Mi a StackExchange.Redis konfigurációs beállításai?
Milyen teljesítménybeli szempontok merülnek fel a kapcsolatoknál?
Minden Azure Cache for Redis tarifacsomag különböző korlátokkal rendelkezik az ügyfélkapcsolatokra, a memóriára és a sávszélességre vonatkozóan. Bár a gyorsítótár minden mérete legfeljebb bizonyos számú kapcsolatot tesz lehetővé, a Redishez való minden csatlakozás kapcsolódó többletterheléssel jár. Ilyen többletterhelés például a TLS/SSL-titkosítás miatti CPU- és memóriahasználat.
Egy adott gyorsítótárméret maximális kapcsolati korlátja enyhén betöltött gyorsítótárat feltételez. Ha a kapcsolati többletterhelés és az ügyfélműveletek terhelése meghaladja a rendszer kapacitását, a gyorsítótár akkor is kapacitásproblémákat tapasztalhat, ha nem lépi túl az aktuális gyorsítótárméret kapcsolati korlátját.
Az egyes szintek kapcsolati korlátaival kapcsolatos további információkért lásd: Azure Cache for Redis díjszabása. További információ a kapcsolatokról és az egyéb alapértelmezett konfigurációkról: Alapértelmezett Redis-kiszolgálókonfiguráció.
Mik az éles környezetben ajánlott eljárások?
- Éles rendszerekhez használja a Standard vagy a Prémium szintet. Az alapszintű szint egy egycsomópontos rendszer, amely nem rendelkezik adatreplikációval és szolgáltatói szerződés (SLA) nélkül. Emellett használjon legalább C1-gyorsítótárat az éles környezetben. A C0-gyorsítótárakat általában egyszerű fejlesztési/tesztelési forgatókönyvekhez használják.
- Vegye figyelembe, hogy a Redis egy memóriában tárolt adattár, és bizonyos esetekben adatvesztés fordulhat elő. További információ: Adatvesztés elhárítása a Azure Cache for Redis.
- Fejlessze rendszerét úgy, hogy képes legyen kezelni a javítás és a feladatátvétel okozta csatlakozási hibákat.
- Prémium szintű Azure Redis-példányok használatával jobb hálózati késést és átviteli sebességet érhet el, mivel jobb hardverrel rendelkeznek a processzorhoz és a hálózathoz is.
A StackExchange.Redis ajánlott eljárásai
- Állítsa
AbortConnectfalse (hamis) értékre, majd hagyja, hogy azConnectionMultiplexerújracsatlakozás automatikusan csatlakozzon. - Használjon egyetlen, hosszú élettartamú
ConnectionMultiplexerpéldányt ahelyett, hogy minden kéréshez új kapcsolatot hoz létre. - A Redis kisebb értékekkel működik a legjobban, ezért fontolja meg a nagyobb adatok több kulcsba való feldarabolását. Például a Mi az ideális értékmérettartomány a redis számára?, 100 kb nagynak számít. További információ: Több kulcs és kisebb érték megfontolása.
- Konfigurálja a ThreadPool beállításait az időtúllépések elkerülése érdekében.
- Használja az alapértelmezett
connectTimeout5 másodpercet. Ez az időköz elegendő időt biztosít a StackExchange.Redis a kapcsolat újbóli létesítésére, ha hálózati hiba történik. - Legyen tisztában a különböző műveletekhez kapcsolódó teljesítményköltségekkel. A parancs például egy O(n) művelet,
KEYSamelyet el kell kerülni. A redis.io webhely részletesen ismerteti az általa támogatott műveletek időbeli összetettségét. Válassza ki az egyes parancsokat az egyes műveletek összetettségének megtekintéséhez.
A ThreadPool növekedésének fontos részletei
A Common Language Runtime (CLR) ThreadPool kétféle szálat tartalmaz: a feldolgozói és az I/O-befejezési portot (IOCP).
-
WORKERA szálakat olyan dolgokra használják, mint a , vagyTask.Run(…)aThreadPool.QueueUserWorkItem(…)metódusok feldolgozása. A CLR különböző összetevői is használják ezeket a szálakat, ha háttérszálon kell dolgozni. -
IOCPA szálak aszinkron I/O-hoz használatosak, például a hálózatról való olvasáshoz.
A szálkészlet igény szerint új munkaszálakat vagy I/O-befejezési szálakat biztosít szabályozás nélkül, amíg el nem éri az minimum egyes száltípusok beállítását. Alapértelmezés szerint a szálak minimális száma a rendszer processzorainak számára van beállítva.
Ha a meglévő foglalt szálak száma eléri a minimum szálak számát, a ThreadPool szabályozza azt a sebességet, amellyel 500 ezredmásodpercenként új szálakat injektál egy szálba.
Általában, ha a rendszer olyan munkát kap, amelyhez szálra van szükség IOCP , gyorsan feldolgozza a munkát. Ha azonban a sorozat több, mint a konfigurált minimum beállítás, a munka egy részének feldolgozása némi késéssel történik, mivel a ThreadPool két lehetőség egyikére vár:
- Egy meglévő szál szabadon feldolgozhatja a munkát.
- 500 ms-ig egyetlen meglévő szál sem válik szabaddá, így új szál jön létre.
Alapvetően ha a szálak száma Busy nagyobb, mint a Min szálaké, 500 ms-os késést tapasztal, mielőtt az alkalmazás feldolgozza a hálózati forgalmat. Ezenkívül egy meglévő szálat, amely 15 másodpercnél hosszabb ideig tétlenül marad, megtisztítják, és ez a növekedési és zsugorodási ciklus megismétlődhet.
A StackExchange.Redis 1.0.450-es vagy újabb buildjéből származó hibaüzenetek a ThreadPool statisztikáit nyomtatják, ahogy az az alábbi példában látható.
System.TimeoutException: Timeout performing GET MyKey, inst: 2, mgr: Inactive,
queue: 6, qu: 0, qs: 6, qc: 0, wr: 0, wq: 0, in: 0, ar: 0,
IOCP: (Busy=6,Free=994,Min=4,Max=1000),
WORKER: (Busy=3,Free=997,Min=4,Max=1000)
A példa azt mutatja, hogy a IOCP szálhoz hat foglalt szál van, és a rendszer úgy van konfigurálva, hogy legalább négy szálat engedélyezzen. Ebben az esetben az ügyfél valószínűleg két 500 ms-os késleltetést fog látni, mert 6 > 4.
Feljegyzés
A StackExchange.Redis időtúllépést érhet el, ha bármelyik IOCP vagy szál WORKER növekedése le van szabályozva.
A legjobb, ha a minimális konfigurációs értéket IOCP és szálakat WORKER az alapértelmezett értéknél nagyobbra állítja. Erre az értékre vonatkozóan nincs mindenkire érvényes útmutatás, mert az egyik alkalmazás megfelelő értéke valószínűleg túl magas vagy alacsony egy másik alkalmazáshoz. Ez a beállítás a bonyolult alkalmazások más részeinek teljesítményét is befolyásolhatja. Ezt a beállítást az Ön igényeinek megfelelően kell finomhangolnia. Jó kiindulópont a 200 vagy 300. Ezután tesztelje és szükség szerint módosítsa.
A minimális szálak beállításának konfigurálása
Ezt a beállítást programozott módon módosíthatja a ThreadPool.SetMinThreads (...) metódussal.
A NET-keretrendszerben például ezt az értéket a következő metódusban Global.asax.csApplication_Start állíthatja be:
private readonly int minThreads = 200;
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ThreadPool.SetMinThreads(minThreads, minThreads);
}
Ha .NET Core-t használ, a Program.cs értékét közvetlenül a hívás WebApplication.CreateBuilder()előtt kell beállítania:
const int minThreads = 200
ThreadPool.SetMinThreads(minThreads, minThreads);
var builder = WebApplication.CreateBuilder(args);
// rest of application setup
Feljegyzés
Az ezzel a metódussal megadott érték egy globális beállítás, amely az egész AppDomainre hatással van. Ha például négymagos virtuális géppel rendelkezik, és futásidőben processzoronként 50-re szeretné beállítani minWorkerThreadsminIoThreads , használja a következőt ThreadPool.SetMinThreads(200, 200): .
A minimális szálak beállítását minIoThreads a konfigurációs elem alatti minWorkerThreads vagy konfigurációs<processModel> beállítással is megadhatja Machine.config. Machine.config általában a következő helyen található %SystemRoot%\Microsoft.NET\Framework\versionNumber<>\CONFIG\.
A szálak minimális számának ilyen módon történő beállítása nem ajánlott, mert ez egy rendszerszintű beállítás. Ha így állítja be a minimális szálakat, újra kell indítania az alkalmazáskészletet.
Feljegyzés
Az ezzel a módszerrel megadott érték magonkénti beállítás. Ha például négymagos gépe van, és azt szeretné, hogy a minIoThreads beállítás futásidőben 200 legyen, használja a <processModel minIoThreads="50">.
Kapcsolódó tartalom
- Tekintse meg a többi Azure Cache for Redis gyakori kérdéseket.