Jaké řešení pro ukládání do mezipaměti zvolit a proč

Porovnání řešení pro ukládání do mezipaměti: Redis vs. Memcached

Řešení pro cachování (ukládání do mezipaměti) hrají klíčovou roli při zrychlování aplikací. Mezi populární volby patří Redis a Memcached. Jak ale vybrat to správné řešení pro vaše potřeby? Tento článek vám pomůže pochopit, jaké možnosti oba systémy nabízejí a jak se rozhodnout.

Ať už je vaším cílem zrychlit aplikaci, snížit zatížení databáze nebo zajistit plynulou škálovatelnost, porozumění principům cachování je zásadní.

Redis i Memcached se běžně používají pro cachování aplikací, ale každý má specifické vlastnosti. Oba nabízejí velmi nízkou latenci (submilisekundové odezvy) a vysokou propustnost, ale liší se například v podpoře datových struktur a způsobu ukládání dat.

Než se ale podíváme na rozdíly mezi Redis a Memcached, pojďme si objasnit samotný pojem cachování.

Co je to cachování a proč je důležité?

Při jakékoli operaci v aplikaci dochází ke spotřebě systémových prostředků. Může jít o výpočetní výkon procesoru při náročných úlohách, nebo o síťové operace, jako je čtení ze souboru nebo databáze.

Pokud se opakovaně provádí stejná náročná úloha, má to negativní dopad na výkon systému. Vezměme si například situaci, kdy opakovaně provádíte složitý databázový dotaz. Nejenže to trvá dlouho, ale také to zatěžuje databázový server.

Představte si, že výsledek dotazu se mezi dvěma po sobě jdoucími požadavky nezmění. Přesto pokaždé provádíte stejný náročný dotaz. Zde vstupuje na scénu cachování.

Cachování v podstatě spočívá v ukládání často používaných dat do rychlé paměti. Díky tomu se data dají rychle načíst, když jsou znovu potřeba. Tím se eliminuje nutnost opakovat náročné operace (například databázové dotazy). To má za následek zvýšení výkonu systému, efektivity a rychlosti odezvy.

Zde jsou hlavní výhody, které cachování přináší:

  • Snížení latence
  • Rychlejší načítání a odezva webových stránek a aplikací
  • Snížení zbytečného využití zdrojů
  • Menší zátěž backendových serverů
  • Ochrana databáze před často spouštěnými náročnými dotazy

Redis: Stručný popis

Redis je open-source datové úložiště, které funguje v paměti (in-memory). Data jsou ukládána ve formě párů klíč-hodnota. Kromě cachování se Redis dá použít také jako databáze, zprostředkovatel zpráv nebo fronta.

Protože Redis běží v paměti, dosahuje se odezvy dotazů v řádu milisekund. Načítání dat z paměti je mnohem rychlejší než z disku, což zajišťuje vysokou propustnost a umožňuje provádět velké množství čtení a zápisů za sekundu.

Při porovnávání Redis vs. Memcached je důležité zmínit, že Redis podporuje širokou škálu datových struktur. Můžete ukládat libovolný text nebo binární data jako řetězce (maximální velikost 512 MB). Pro ukládání objektů se hodí hash (dvojice pole-hodnota), a pro kolekce řetězců můžete použít seznamy, sady nebo seřazené sady.

K dispozici jsou klientské knihovny pro všechny hlavní programovací jazyky (Java, Python, Go, NodeJs, C#, .Net). Po instalaci získáte také nástroj příkazového řádku redis-cli, který umožňuje ověřit, zda Redis server běží správně, a odesílat příkazy pro čtení, zápis a úpravu dat.

Výhody Redis

  • Open-source, k dispozici zdarma
  • Oficiální klienti pro hlavní programovací jazyky
  • Lze použít jako cache, zprostředkovatele zpráv, databázi nebo frontu
  • Velmi vysoký výkon s latencí v řádu submilisekund
  • Podpora vestavěných datových struktur (řetězce, seznamy, sady, tříděné sady)
  • Vysoká dostupnost a škálovatelnost díky architektuře master-replica

Nyní se podíváme na Memcached.

Memcached: Přehled

Memcached je bezplatný a open-source distribuovaný systém pro ukládání objektů do mezipaměti. Nabízí velmi vysoký výkon a ukládání dat ve formě párů klíč-hodnota v paměti pro malé fragmenty libovolných dat. Než se však pustíme do porovnání Redis vs. Memcached, prozkoumáme, jak Memcached funguje.

Paměť v počítačovém systému nebývá rovnoměrně rozdělena. Volná paměť se nachází v blocích různé velikosti. Memcached umožňuje využívat volnou paměť z různých částí systému a přesouvat ji tam, kde je potřeba.

Memcached servery fungují jako jednoduché úložiště párů klíč-hodnota a neinterpretují význam ukládaných dat. Ukládají se nezpracovaná serializovaná data spolu s klíčem, dobou platnosti a volitelnými příznaky. Nemá vestavěnou podporu pro datové struktury.

Na rozdíl od Redis, Memcached servery mezi sebou nekomunikují. Chybí synchronizace, replikace i vysílání. Dostupnost cache a její zneplatnění je tím zjednodušeno. Klient jednoduše odstraní nebo přepíše data na serveru, který je vlastní.

Díky této jednoduché architektuře dosahuje Memcached velmi vysokého výkonu. Na rychlém stroji s rychlou sítí dokáže Memcached zpracovat 200 000+ požadavků za sekundu.

Výhody Memcached

  • Rychlé načítání z paměti oproti tradičním diskům
  • API pro nejpoužívanější programovací jazyky
  • Snížení potřeby opakovaného vyhledávání dat ukládáním výsledků do mezipaměti
  • Možnost ukládat výsledky databázových dotazů, odezvy API nebo vykreslené webové stránky
  • Zpětné získávání fragmentované paměti
  • Používá strategii LRU (Least Recently Used) a vypršení položek po určité době
  • Možnost vytvořit vlastní abstrakce podobné Memcached

Dále se podíváme na rozdíly mezi Redis a Memcached.

Redis vs. Memcached: Srovnávací tabulka

Funkce Redis Memcached
Datové struktury Podporuje vestavěné datové struktury (řetězce, seznamy, sady, tříděné sady) Nepodporuje vestavěné datové struktury. Ukládají se nezpracovaná serializovaná data.
Velikost dat Umožňuje ukládat hodnoty do velikosti 512 MB Umožňuje ukládat hodnoty do velikosti 1 MB
Ukládání na disk Nativní podpora ukládání na disk (RDB, AOF) Žádná nativní podpora, nástroje třetích stran (libmemcached-tools)
Zpracování vláken Jednovláknové Vícevláknové
Replikace Architektura master-replica Nepodporuje replikaci
Vyřazování z mezipaměti LRU (Least Recently Used), konfigurace dalších strategií LRU
Programovací jazyky Podpora hlavních programovacích jazyků Podpora hlavních programovacích jazyků

Nyní se podíváme na příklady použití Redis a Memcached.

Případy použití Redis a Memcached

#1. Poskytování elektronického obchodu ve velkém měřítku: Shopify

Shopify je populární platforma pro e-commerce. Umožňuje snadno vytvářet online obchody. Shopify obsluhuje až 80 000 požadavků za sekundu a zajišťuje provoz pro 600 000 obchodníků. Zvládnutí takového provozu s minimální latencí je náročné.

Shopify proto používá ve svém technologickém stacku jak Memcached, tak Redis. Základní architektura Shopify zahrnuje databázi MySQL, Memcached jako úložiště klíč-hodnota a Redis pro fronty. Často není nutné rozhodovat se mezi Redis vs. Memcached, ale lze je využít oba v rámci aplikace.

Na jakékoli e-commerce platformě je spousta statických dat, která se nemění příliš často. Jde například o obrázky produktů, popisy a informace o obchodu. Ukládání těchto dat do úložiště párů klíč-hodnota urychluje systém a zlepšuje jeho výkon.

Použití cache (například Memcached) pro statický obsah snižuje zátěž backendových serverů a databází.

#2. Distribuované ukládání dat aplikací do mezipaměti: Pinterest

Pinterest je oblíbená platforma pro hledání inspirace. Každý příchozí požadavek prochází několika službami a zahrnuje mnoho výpočtů, včetně sledování a doporučování pinů.

Pro ochranu backendových služeb a eliminaci opakovaných výpočtů využívá Pinterest vrstvu distribuované cache. Ukládá výsledky opakovaných výpočtů, takže se požadavky nedostanou do náročných služeb nebo databází. Vrstva cache Pinterestu zahrnuje tisíce strojů a obsluhuje více než 150 milionů požadavků za sekundu.

Pinterest používá Memcached a mcrouter. Díky asynchronnímu vícevláknovému zpracování je Memcached velmi efektivní a umožňuje vytvářet vlastní abstrakce a horizontálně škálovat systém.

#3. Zpracování zabezpečení dat ve velkém měřítku: CloudSponge

CloudSponge je SaaS, který umožňuje uživatelům rychle rozesílat pozvánky a kupóny. Pomáhá importovat kontakty, takže uživatelé nemusejí ručně zadávat e-mailové adresy.

CloudSponge zpracuje téměř 2 biliony e-mailových adres ročně. To klade značné nároky na zabezpečení systému.

CloudSponge využívá Redis nejen jako cache, ale i pro dočasné uložení kontaktních dat v paměti. Data se uchovávají do té doby, než je zákazníci potřebují. Poté se smažou. Žádná data se neukládají na disk, i když Redis tuto možnost nabízí.

#4. Další běžná použití cachování

Mezi další běžné scénáře použití cache patří:

❇️ Chatovací systémy

Cache je nepostradatelnou součástí architektury chatovacích systémů. Ukládat lze uživatelské profily, seznamy kontaktů, poslední zprávy a další často používaná data. Tím se snižuje zatížení databáze a zvyšuje odezva systému.

Funkce v reálném čase, jako jsou indikátory psaní a upozornění na přítomnost, také využívají cache. Distribuovaná cache umožňuje škálovat backendové servery nezávisle na cache.

❇️ Lokalizační služby

Aplikace pro lokalizační služby (odhad vzdálenosti, čas příjezdu, doporučení v okolí) využívají cache optimalizované pro geografická data. Ty jsou uloženy ve formě geoprostorového indexu.

Pomocí geoprostorového indexu lze uložit polohu libovolného objektu. Redis nativně podporuje geoprostorové indexy a data o poloze lze efektivně sdílet v reálném čase.

❇️ Analýza v reálném čase

Online hry jsou obrovský průmysl. Hráči se při rozhodování spoléhají na latenci nižší než sekundu (například kooperativní hry nebo fantasy sporty).

Cache lze využít k provádění analýz v reálném čase, jako je udržování výsledkových tabulek, nebo ukládat statistiky hráčů pro fantasy sportovní aplikace.

Které řešení si vybrat?

Redis je univerzální volba s podporou mnoha datových struktur a je vhodný pro aplikace, které vyžadují více než jen základní cachování. Nízká latence, vysoká propustnost a klientské knihovny pro hlavní programovací jazyky z něj dělají silného kandidáta pro systémy, které vyžadují rychlost a flexibilitu. Pokud je to potřeba, nabízí také nativní podporu ukládání dat na disk.

Memcached vyniká jednoduchostí a vysokorychlostním cachováním. Je to ideální volba pro ukládání nezpracovaných, serializovaných dat do mezipaměti. Efektivně využívá dostupnou paměť v různých částech systému. Jednoduchá architektura Memcached umožňuje dosáhnout velmi vysokého výkonu (hlavně na rychlých strojích s rychlou sítí).

Při výběru mezi Redis a Memcached je potřeba zvážit složitost aplikace, požadavky na datové struktury a potřebu škálovatelnosti. Redis se hodí, pokud vyžadujete různé datové struktury a pokročilé funkce. Memcached nabízí nejnižší latenci a nejvyšší propustnost v přímočarých vysoce výkonných scénářích.

Rozhodnutí mezi Redis a Memcached by mělo odpovídat konkrétním cílům a omezením projektu. Někdy samotné cachování dat aplikací nemusí stačit.

Podívejte se, jak nastavit lokální DNS server pro cachování na Linuxu.