Tento článek obsahuje odpovědi na běžné otázky týkající se správy služby Azure Cache for Redis.
Důležité
Služba Azure Cache for Redis oznámila časovou osu vyřazení všech skladových položek. Doporučujeme přesunout stávající instance Azure Cache for Redis do Azure Managed Redis , jakmile budete moct.
Další podrobnosti o ukončení podpory:
Jak můžu testovat a testovat výkon mezipaměti?
- Slouží
redis-benchmark.exek zátěžovému testu serveru Redis. Sloužíredis-benchmark.exek získání představy o možné propustnosti před psaním vlastních testů výkonu. - Slouží
redis-clike sledování mezipaměti pomocí příkazuINFO. Pokyny ke stažení nástrojů Redis najdete v tématu Jak můžu spouštět příkazy Redis? - Pokud v instanci mezipaměti používáte protokol TLS/SSL (Transport Layer Security/Secure Socket Layer), přidejte tento
--tlsparametr do příkazů nástrojů Redis nebo povolte protokol TLS/SSL pomocí proxystunnelserveru. -
Redis-benchmarkVe výchozím nastavení používá port6379. Pomocí parametru-pmůžete toto nastavení přepsat, pokud vaše mezipaměť používá port6380SSL/TLS nebo port10000podnikové vrstvy . - V případě potřeby můžete před spuštěním zátěžového testu povolit port bez protokolu TLS prostřednictvím webu Azure Portal .
- Ujistěte se, že klientský virtuální počítač, který používáte k testování, je ve stejné oblasti jako vaše instance Azure Cache for Redis.
- Ujistěte se, že váš klientský virtuální počítač má alespoň stejnou výpočetní kapacitu a kapacitu šířky pásma jako mezipaměť, kterou testujete. Nejlepších výsledků dosáhnete, když pro své klienty použijete virtuální počítače řady D-series a E-series.
- Pokud používáte Windows, povolte na klientském počítači virtuální škálování na straně příjmu (VRSS). Další informace najdete v tématu Škálování na straně virtuálního příjmu v systému Windows Server 2012 R2.
- Povolte diagnostiku mezipaměti, abyste mohli sledovat její stav. Metriky si můžete prohlédnout na webu Azure Portal a také si je můžete stáhnout a zkontrolovat pomocí nástrojů podle vlastního výběru.
- Pokud vaše zatížení způsobuje velkou fragmentaci paměti, vertikálně navyšte kapacitu na větší velikost mezipaměti.
Následující příklady ukazují, jak používat redis-benchmark.exerozhraní . Spuštěním těchto příkazů z virtuálního počítače ve stejné oblasti jako mezipaměť získáte přesné výsledky.
Nejprve otestujte zřetězené SET požadavky pomocí datové části 1k:
redis-benchmark.exe -h <yourcache>.redis.cache.windows.net -a <yourAccesskey> -t SET -n 1000000 -d 1024 -P 50
Po spuštění SET testu spusťte zřetězené GET požadavky pomocí datové části 1k:
redis-benchmark.exe -h <yourcache>.redis.cache.windows.net -a <yourAccesskey> -t GET -n 1000000 -d 1024 -P 50
Jak mohu povolit uvolňování paměti serveru, aby bylo možné získat větší propustnost klienta při použití StackExchange.Redis?
Povolení uvolňování paměti serveru (GC) může optimalizovat klienta a poskytnout lepší výkon a propustnost při použití StackExchange.Redis. Další informace o serveru GC a jeho povolení najdete v následujících článcích:
Mám povolit port bez TLS/SSL pro připojení k Redis?
Server Redis nativně nepodporuje protokol TLS (Transport Layer Security), ale Azure Cache for Redis protokol TLS podporuje. Pokud se připojujete k Azure Cache for Redis pomocí klienta, jako je StackExchange.Redis, který podporuje protokol TLS, použijte protokol TLS.
Poznámka:
Port bez protokolu TLS je ve výchozím nastavení pro nové instance Azure Redis zakázaný. Pokud váš klient nepodporuje protokol TLS, povolte port bez protokolu TLS podle pokynů v tématu Přístupové porty.
Pokud mezipaměť používá protokol TLS, musíte protokol TLS povolit pomocí --tls možnosti pro nástroje Redis, jako je redis-cli. Můžete také použít nástroj, jako je stunnel například bezpečné připojení nástrojů k portu TLS podle pokynů v blogovém příspěvku Oznámení ASP.NET Zprostředkovatel stavu relace pro verzi Redis Preview .
Pokyny ke stažení nástrojů Redis najdete v tématu Jak můžu spouštět příkazy Redis?
Jaké jsou některé požadavky na používání běžných příkazů Redis?
Vyhněte se používání určitých příkazů Redis, které trvá dlouhou dobu, pokud plně nerozumíte výsledku těchto příkazů. Například nespouštět příkaz KLÍČE v produkčním prostředí. V závislosti na počtu klíčů může vrácení trvat dlouhou dobu. Redis je jednovláknový server, který zpracovává příkazy jeden po druhém. Pokud příkaz zadáte,
KEYSRedis nezpracuje následné příkazy, dokud zpracováníKEYSpříkazu nedokončí.Stránka redis.io obsahuje podrobnosti o časové složitosti pro každou operaci, kterou podporuje. Výběrem jednotlivých příkazů zobrazíte složitost jednotlivých operací.
Velikost kláves se má použít, závisí na scénáři. Pokud váš scénář vyžaduje větší klíče, můžete upravit hodnoty
ConnectionTimeout, a pak opakovat a upravit logiku opakování. Z pohledu serveru Redis poskytují menší hodnoty klíče lepší výkon.Tyto aspekty neznamenají, že v Redis nemůžete ukládat větší hodnoty, ale latence jsou vyšší. Pokud máte jednu sadu dat, která je větší než jiná, můžete použít více
ConnectionMultiplexerinstancí, z nichž každá je nakonfigurovaná s jinou sadou hodnot časového limitu a opakování. Další informace najdete v tématu K čemu slouží možnosti konfigurace StackExchange.Redis?
Jaké jsou některé aspekty výkonu připojení?
Každá cenová úroveň Azure Cache for Redis má různá omezení pro připojení klientů, paměť a šířku pásma. I když každá velikost mezipaměti umožňuje až určitý počet připojení, každé připojení k Redis zahrnuje související režii. Příkladem takové režie je využití procesoru a paměti z důvodu šifrování TLS/SSL.
Maximální limit připojení pro danou velikost mezipaměti předpokládá mírně načtenou mezipaměť. Pokud zatížení z režie připojení a zatížení z klientských operací překročí kapacitu systému, může dojít k problémům s kapacitou mezipaměti i v případě, že nepřekročíte limit připojení pro aktuální velikost mezipaměti.
Další informace o omezeních připojení pro jednotlivé úrovně najdete v tématu Ceny Azure Cache for Redis. Další informace o připojeních a dalších výchozích konfiguracích najdete v tématu Výchozí konfigurace serveru Redis.
Jaké jsou některé osvědčené postupy v produkčním prostředí?
- Pro produkční systémy použijte úroveň Standard nebo Premium. Základní vrstva je systém s jedním uzlem bez replikace dat a bez smlouvy o úrovni služeb (SLA). Použijte také alespoň mezipaměť C1 pro produkční prostředí. Mezipaměti C0 se obvykle používají pro jednoduché scénáře vývoje/testování.
- Mějte na paměti, že Redis je úložiště dat v paměti a v některých scénářích může dojít ke ztrátě dat. Další informace najdete v tématu Řešení potíží se ztrátou dat ve službě Azure Cache for Redis.
- Vyvíjejte svůj systém tak, aby zvládl výkyvy připojení způsobené záplatováním a převzetím služeb při selhání.
- Používejte instance Azure Redis úrovně Premium pro lepší latenci a propustnost sítě, protože mají lepší hardware pro procesor i síť.
Osvědčené postupy pro StackExchange.Redis
- Nastavte
AbortConnectna hodnotu false a poté nechteConnectionMultiplexerautomatické opětovné připojení. - Místo vytvoření nového připojení pro každou žádost použijte jednu dlouhou
ConnectionMultiplexerinstanci. - Redis funguje nejlépe s menšími hodnotami, proto zvažte rozsekání větších dat do více klíčů. Například v části Jaký je ideální rozsah velikosti hodnoty pro redis? je 100 kb považováno za velké. Další informace naleznete v tématu Zvážení více klíčů a menších hodnot.
- Nakonfigurujte nastavení Fondu vláken, abyste se vyhnuli vypršení časových limitů.
- Použijte alespoň výchozí
connectTimeouthodnotu 5 sekund. Tento interval poskytuje StackExchange.Redis dostatek času na obnovení připojení, pokud dojde k výkyvu sítě. - Uvědomte si náklady na výkon spojené s různými operacemi, které provádíte. Příkaz je například
KEYSoperace O(n), která by se měla vyhnout. Stránka redis.io obsahuje podrobnosti o časové složitosti každé operace, kterou podporuje. Výběrem jednotlivých příkazů zobrazíte složitost jednotlivých operací.
Důležité podrobnosti o růstu fondu vláken
Modul CLR (Common Language Runtime) ThreadPool má dva typy vláken, pracovní a port IOCP (I/O Completion Port).
-
WORKERVlákna se používají pro věci, jako je zpracováníTask.Run(…)metod , neboThreadPool.QueueUserWorkItem(…). Různé komponenty v modulu CLR také používají tato vlákna, když je třeba pracovat na vlákně na pozadí. -
IOCPvlákna se používají pro asynchronní I/O, například při čtení ze sítě.
Fond vláken poskytuje nová pracovní vlákna nebo podprocesy pro dokončování vstupně-výstupních operací na vyžádání bez jakéhokoli omezování, dokud nedosáhne nastavení pro každý typ vlákna minimum . Ve výchozím nastavení je minimální počet vláken nastaven na počet procesorů v systému.
Jakmile počet existujících zaneprázdněných vláken dosáhne minimum počtu vláken, ThreadPool omezí rychlost, s jakou vkládá nová vlákna do jednoho vlákna za 500 milisekund.
Pokud váš systém obvykle dostane nával práce, která vyžaduje vlákno IOCP , zpracuje tuto práci rychle. Pokud je však shluk větší než nakonfigurované minimum nastavení, dojde k určitému zpoždění při zpracování některých prací, protože ThreadPool čeká na jednu ze dvou možností:
- Stávající vlákno se uvolní ke zpracování práce.
- Žádné existující vlákno se po dobu 500 ms neuvolní, takže se vytvoří nové vlákno.
V zásadě, když je počet Busy vláken větší než Min počet vláken, dojde k 500ms zpoždění, než aplikace zpracuje síťový provoz. Také se vyčistí existující vlákno, které zůstane nečinné déle než 15 sekund, a tento cyklus růstu a smršťování se může opakovat.
Chybové zprávy ze sestavení StackExchange.Redis 1.0.450 nebo novějšího vytisknou statistiku ThreadPool, jak je znázorněno v následujícím příkladu.
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)
Příklad ukazuje, že pro vlákno IOCP existuje šest zaneprázdněných vláken a systém je nakonfigurován tak, aby povoloval minimálně čtyři vlákna. V tomto případě klient pravděpodobně zaznamená dvě zpoždění 500 ms, protože 6 > 4.
Poznámka:
StackExchange.Redis může dosáhnout vypršení časového limitu, pokud je omezen růst vláken nebo IOCPWORKER .
Nejlepší je nastavit minimální konfigurační hodnotu pro IOCP a WORKER vlákna na něco většího, než je výchozí hodnota. K této hodnotě neexistují žádné univerzální pokyny, protože správná hodnota pro jednu aplikaci je pravděpodobně příliš vysoká nebo nízká pro jinou aplikaci. Toto nastavení může mít vliv i na výkon jiných částí komplikovaných aplikací. Toto nastavení je třeba upravit podle vašich konkrétních potřeb. Dobrým výchozím místem je 200 nebo 300. Poté otestujte a upravte podle potřeby.
Nakonfigurujte nastavení minimálního počtu vláken
Toto nastavení můžete změnit programově pomocí metody ThreadPool.SetMinThreads (... ).
Například v NET Frameworku nastavíte tuto hodnotu v Global.asax.cs v Application_Start metodě:
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);
}
Pokud používáte .NET Core, nastavíte hodnotu v Program.cs těsně před voláním :WebApplication.CreateBuilder()
const int minThreads = 200
ThreadPool.SetMinThreads(minThreads, minThreads);
var builder = WebApplication.CreateBuilder(args);
// rest of application setup
Poznámka:
Hodnota určená touto metodou je globální nastavení, které ovlivňuje celou doménu AppDomain. Pokud máte například čtyřjádrový virtuální počítač a chcete nastavit minWorkerThreads a minIoThreads na 50 na procesor za běhu, použijte ThreadPool.SetMinThreads(200, 200).
Je také možné určit nastavení minimálních vláken pomocí minIoThreadsminWorkerThreadsnastavení konfigurace nebo pod konfiguračním prvkem <processModel> v Machine.config. Machine.config se obvykle nachází na adrese%SystemRoot%\Microsoft.NET\Framework\<versionNumber>\CONFIG\.
Nastavení minimálního počtu vláken tímto způsobem se nedoporučuje, protože se jedná o nastavení platné pro celý systém. Pokud tímto způsobem nastavíte minimální počet vláken, je nutné fond aplikací restartovat.
Poznámka:
Hodnota určená touto metodou je nastavení pro jednotlivé jádro . Pokud máte například počítač se čtyřmi jádry a chcete, aby vaše minIoThreads nastavení bylo 200 za běhu, použijte <processModel minIoThreads="50">.
Související obsah
- Podívejte se na další nejčastější dotazy ke službě Azure Cache for Redis.