Programování

Proč Redis poráží Memcached pro ukládání do mezipaměti

Memcached nebo Redis? Je to otázka, která téměř vždy vyvstane v jakékoli diskusi o vymačkání většího výkonu z moderní webové aplikace založené na databázi. Když je třeba zlepšit výkon, je prvním krokem často ukládání do mezipaměti a Memcached nebo Redis jsou obvykle prvními místy, kam se obrátit.

Tyto renomované moduly mezipaměti sdílejí řadu podobností, ale mají také důležité rozdíly. Redis, novější a všestrannější z nich, je téměř vždy vynikající volbou.

Redis vs. Memcached pro ukládání do mezipaměti

Začněme s podobnostmi. Memcached i Redis slouží jako datová úložiště klíčů a hodnot v paměti, ačkoli Redis je přesněji popsán jako úložiště datové struktury. Memcached i Redis patří do rodiny řešení pro správu dat NoSQL a obě jsou založeny na datovém modelu klíč-hodnota. Oba uchovávají všechna data v paměti RAM, což je samozřejmě velmi užitečné jako vrstva mezipaměti. Pokud jde o výkon, obě datová úložiště jsou také pozoruhodně podobná a vykazují téměř identické charakteristiky (a metriky) s ohledem na propustnost a latenci.

Memcached i Redis jsou vyspělé a velmi populární open source projekty. Memcached byl původně vyvinut Bradem Fitzpatrickem v roce 2003 pro web LiveJournal. Od té doby byl Memcached přepsán do jazyka C (původní implementace byla v Perlu) a vložen do veřejné sféry, kde se stal základním kamenem moderních webových aplikací. Aktuální vývoj Memcached je zaměřen spíše na stabilitu a optimalizaci než na přidávání nových funkcí.

Redis vytvořil Salvatore Sanfilippo v roce 2009 a Sanfilippo zůstává hlavním vývojářem projektu dodnes. Redis je někdy popisován jako „Memcached na steroidech“, což je stěží překvapivé vzhledem k tomu, že části Redis byly vytvořeny v reakci na poučení z používání Memcached. Redis má více funkcí než Memcached a je tedy výkonnější a flexibilnější.

Používané mnoha společnostmi a v nesčetných produkčních prostředích kritických pro mise jsou Memcached i Redis podporovány knihovnami klientů ve všech myslitelných programovacích jazycích a jsou součástí mnoha balíčků pro vývojáře. Ve skutečnosti se jedná o vzácný webový zásobník, který neobsahuje integrovanou podporu pro Memcached nebo Redis.

Proč jsou Memcached a Redis tak populární? Nejen, že jsou extrémně efektivní, jsou také relativně jednoduché. Začínáme s Memcached nebo Redis je pro vývojáře považováno za snadnou práci. Nastavení a spuštění práce s aplikací trvá jen pár minut. Malá investice času a úsilí tedy může mít okamžitý, dramatický dopad na výkon - obvykle řádově. Jednoduché řešení s obrovskou výhodou; to je co nejblíže magii.

Kdy použít Memcached

Memcached může být výhodnější při ukládání do mezipaměti relativně malých a statických dat, jako jsou fragmenty kódu HTML. Správa vnitřní paměti Memcached, i když není tak sofistikovaná jako Redis, je v nejjednodušších případech použití efektivnější, protože pro metadata spotřebovává relativně méně paměťových zdrojů. Řetězce (jediný datový typ podporovaný Memcached) jsou ideální pro ukládání dat, která jsou pouze pro čtení, protože řetězce nevyžadují žádné další zpracování.

Velké datové sady často zahrnují serializovaná data, což vždy vyžaduje více místa k uložení. Zatímco Memcached je efektivně omezen na ukládání dat v jeho serializované podobě, datové struktury v Redis mohou nativně ukládat jakýkoli aspekt dat, což snižuje režii serializace.

Druhý scénář, ve kterém má Memcached výhodu oproti Redis, je škálování. Protože Memcached je vícevláknový, můžete snadno škálovat tím, že mu dáte více výpočetních zdrojů, ale ztratíte část nebo všechna data v mezipaměti (v závislosti na tom, zda používáte konzistentní hashování). Redis, který je většinou s jedním vláknem, může škálovat horizontálně pomocí shlukování bez ztráty dat. Clustering je efektivní škálovací řešení, ale jeho nastavení a provoz je poměrně složitější.

Kdy použít Redis

Redis budete téměř vždy chtít používat kvůli jeho datovým strukturám. S Redis jako mezipamětí získáte spoustu energie (například schopnost doladit obsah mezipaměti a trvanlivost) a celkově vyšší efektivitu. Jakmile použijete datové struktury, zvýšení účinnosti se stane obrovským pro konkrétní scénáře aplikace.

Redisova nadřazenost je patrná téměř ve všech aspektech správy mezipaměti. Mezipaměti používají mechanismus nazývaný vystěhování dat, aby uvolnily místo pro nová data odstraněním starých dat z paměti. Mechanismus vyřazování dat Memcached využívá algoritmus nejméně nedávno použitého a do jisté míry libovolně vypuzuje data, která mají podobnou velikost jako nová data.

Redis naopak umožňuje jemnou kontrolu nad vyklizením a umožňuje vám vybrat si ze šesti různých zásad vyklizení. Redis také využívá sofistikovanější přístupy ke správě paměti a výběru kandidátů na vystěhování. Redis podporuje líné i aktivní vystěhování, kdy jsou data vystěhována pouze tehdy, když je potřeba více prostoru nebo proaktivně.

Redis vám poskytuje mnohem větší flexibilitu, pokud jde o objekty, které můžete ukládat do mezipaměti. Zatímco Memcached omezuje názvy klíčů na 250 bajtů a funguje pouze s prostými řetězci, Redis umožňuje, aby názvy a hodnoty klíčů byly až 512 MB každý a jsou binárně bezpečné. Navíc má Redis na výběr z pěti primárních datových struktur, které otevírají svět možností pro vývojáře aplikací prostřednictvím inteligentního ukládání do mezipaměti a manipulace s daty v mezipaměti.

Redis pro vytrvalost dat

Použití datových struktur Redis může zjednodušit a optimalizovat několik úkolů - nejen při ukládání do mezipaměti, ale i když chcete, aby byla data trvalá a vždy k dispozici. Například namísto ukládání objektů jako serializovaných řetězců mohou vývojáři pomocí Redis Hash ukládat pole a hodnoty objektu a spravovat je pomocí jediného klíče. Redis Hash šetří vývojářům potřebu načíst celý řetězec, deserializovat jej, aktualizovat hodnotu, reserializovat objekt a nahradit celý řetězec v mezipaměti novou hodnotou pro každou triviální aktualizaci - to znamená nižší spotřebu zdrojů a vyšší výkon.

K implementaci ještě složitějších scénářů lze použít další datové struktury nabízené společností Redis (například seznamy, sady, seřazené sady, hyperloglogy, bitmapy a geoprostorové indexy). Seřazené sady pro příjem a analýzu dat v časových řadách jsou dalším příkladem datové struktury Redis, která nabízí enormně sníženou složitost a nižší spotřebu šířky pásma.

Další důležitou výhodou Redisu je, že data, která ukládá, nejsou neprůhledná, takže s nimi může server manipulovat přímo. Značná část příkazů 180 plus dostupných v Redis je věnována operacím zpracování dat a vkládání logiky do samotného úložiště dat prostřednictvím skriptování Lua na straně serveru. Tyto předdefinované příkazy a uživatelské skripty vám dávají flexibilitu při zpracování úloh zpracování dat přímo v Redis, aniž byste museli data zpracovávat po síti do jiného systému.

Redis nabízí volitelnou a laditelnou perzistenci dat navrženou k bootstrapování mezipaměti po plánovaném vypnutí nebo neplánovaném selhání. I když máme tendenci považovat data v mezipaměti za nestálá a přechodná, přetrvávající data na disk mohou být ve scénářích ukládání do mezipaměti docela cenné. Mít k dispozici data mezipaměti pro načtení ihned po restartu umožňuje mnohem kratší zahřátí mezipaměti a odstraní zátěž související s repopulací a přepočtem obsahu mezipaměti z primárního úložiště dat.

Znovu proveďte replikaci dat v paměti

Redis může také replikovat data, která spravuje. Replikaci lze použít k implementaci vysoce dostupného nastavení mezipaměti, které vydrží chyby a poskytuje aplikaci nepřerušovanou službu. Selhání mezipaměti z hlediska dopadu na uživatelskou zkušenost a výkon aplikace zaostává za slabostí aplikace, takže mít ve většině případů hlavní výhodu ověřeného řešení, které zaručuje obsah mezipaměti a dostupnost služby.

V neposlední řadě, pokud jde o provozní viditelnost, Redis poskytuje spoustu metrik a množství introspektivních příkazů, pomocí kterých lze sledovat a sledovat využití a abnormální chování. Statistiky v reálném čase o všech aspektech databáze, zobrazování všech prováděných příkazů, výpis a správa připojení klientů - Redis má všechno a ještě víc.

Když si vývojáři uvědomí efektivitu funkcí Redisova vytrvalosti a replikace v paměti, často ji používají jako databázi první reakce, obvykle k analýze a zpracování dat s vysokou rychlostí a poskytování odpovědí uživateli, zatímco sekundární (často pomalejší) databáze udržuje historický záznam toho, co se stalo. Při použití tímto způsobem může být Redis také ideální pro případy použití analytiky.

Redis pro analýzu dat

Okamžitě přijdou na mysl tři analytické scénáře. V prvním scénáři, když k iterativnímu zpracování velkých datových sad používáte něco jako Apache Spark, můžete použít Redis jako vrstvu poskytování dat, která dříve vypočítal Spark. Ve druhém scénáři může použití Redis jako sdíleného úložiště distribuovaných dat v paměti urychlit rychlosti zpracování Sparku o faktor 45 až 100. Nakonec je příliš běžným scénářem scénář, ve kterém je třeba přizpůsobit sestavy a analýzy pomocí uživatele, ale načítání dat z neodmyslitelně dávkových úložišť dat (například Hadoop nebo RDBMS) trvá příliš dlouho. V tomto případě je úložiště datové struktury v paměti, jako je Redis, jediným praktickým způsobem, jak získat stránkování a doby odezvy pod milisekundou.

Při použití extrémně velkých provozních datových sad nebo analytických úloh nemusí být vše spuštěné v paměti nákladově efektivní. Aby bylo dosaženo nižšího milisekundového výkonu při nižších nákladech, vytvořila společnost Redis Labs verzi Redis, která běží na kombinaci paměti RAM a paměti flash, s možností konfigurovat poměry paměti RAM k paměti flash. I když to otevírá několik nových cest k urychlení zpracování pracovní zátěže, dává to vývojářům možnost jednoduše spustit jejich „mezipaměť flash“.

Software s otevřeným zdrojovým kódem nadále poskytuje některé z nejlepších technologií, které jsou dnes k dispozici. Pokud jde o zvýšení výkonu aplikací pomocí mezipaměti, Redis a Memcached jsou nejuznávanějšími a výrobou prověřenými kandidáty. Vzhledem k bohatší funkčnosti Redis, pokročilejšímu designu, mnoha potenciálním využitím a vyšší efektivitě nákladů v měřítku by však Redis měla být vaší první volbou téměř ve všech případech.

---

Itamar Haber (@itamarhaber) je hlavním obhájcem vývojářů ve společnosti Redis Labs, která pro vývojáře nabízí Memcached a Redis jako plně spravované cloudové služby. Mezi jeho rozmanité zkušenosti patří vývoj a správa softwarových produktů a vedoucí role ve společnostech Xeround, Etagon, Amicada a MNS Ltd. Itamar je držitelem titulu Master of Business Administration ze společného programu Kellogg-Recanati na univerzitách Northwestern a Tel-Aviv University a bakalářského titulu. of Science in Computer Science.

Nové technologické fórum poskytuje místo, kde můžete prozkoumat a diskutovat o nově vznikajících podnikových technologiích v nebývalé hloubce a šíři. Výběr je subjektivní, založený na našem výběru technologií, které považujeme za důležité a pro čtenáře nejzajímavější. nepřijímá marketingové materiály ke zveřejnění a vyhrazuje si právo upravovat veškerý přispěný obsah. Všechny dotazy zasílejte na [email protected].

$config[zx-auto] not found$config[zx-overlay] not found