Programovanie

Prečo Redis porazil Memcached kvôli ukladaniu do pamäte cache

Memcached alebo Redis? Je to otázka, ktorá takmer vždy vyvstane v akejkoľvek diskusii o vytláčaní vyššieho výkonu z modernej webovej aplikácie založenej na databáze. Keď je potrebné vylepšiť výkon, prvým krokom je často ukladanie do vyrovnávacej pamäte a Memcached alebo Redis sú zvyčajne prvé miesta, kam sa obrátiť.

Tieto renomované moduly vyrovnávacej pamäte zdieľajú množstvo podobností, majú však tiež dôležité rozdiely. Redis, novší a všestrannejší z nich, je takmer vždy vynikajúcou voľbou.

Redis vs. Memcached pre ukladanie do pamäte cache

Začnime s podobnosťami. Memcached aj Redis slúžia ako dátové úložiská kľúč - hodnota v pamäti, aj keď Redis je presnejšie opísaný ako úložisko dátovej štruktúry. Memcached aj Redis patria do rodiny riešení pre správu údajov NoSQL a obe sú založené na dátovom modeli kľúč - hodnota. Oba uchovávajú všetky údaje v RAM, čo ich samozrejme robí nesmierne užitočnými ako vrstva ukladania do pamäte cache. Pokiaľ ide o výkon, obidve dátové úložiská sú tiež pozoruhodne podobné a vykazujú takmer identické charakteristiky (a metriky), pokiaľ ide o priepustnosť a latenciu.

Memcached aj Redis sú vyspelé a veľmi populárne projekty s otvoreným zdrojovým kódom. Memcached vyvinul pôvodne Brad Fitzpatrick v roku 2003 pre web LiveJournal. Odvtedy bol Memcached prepísaný do jazyka C (pôvodná implementácia bola v Perle) a vložený do verejnej sféry, kde sa stal základným kameňom moderných webových aplikácií. Aktuálny vývoj Memcachedu je zameraný skôr na stabilitu a optimalizáciu ako na pridávanie nových funkcií.

Spoločnosť Redis vytvoril Salvatore Sanfilippo v roku 2009 a spoločnosť Sanfilippo zostáva hlavným vývojárom projektu dodnes. Redis sa niekedy označuje ako „Memcached na steroidoch“, čo je ťažko prekvapujúce vzhľadom na to, že časti Redis boli postavené na základe skúseností získaných pri používaní Memcached. Redis má viac funkcií ako Memcached, a je tak výkonnejší a flexibilnejší.

Používané mnohými spoločnosťami a v nespočetných produkčných prostrediach kritických pre misie, Memcached aj Redis sú podporované knižnicami klientov vo všetkých možných programovacích jazykoch a sú zahrnuté v množstve balíkov pre vývojárov. V skutočnosti ide o vzácny webový zásobník, ktorý neobsahuje vstavanú podporu ani pre Memcached, ani Redis.

Prečo sú Memcached a Redis také populárne? Nielen, že sú mimoriadne účinné, ale aj relatívne jednoduché. Začíname s programami Memcached alebo Redis sa pre vývojárov považuje za ľahkú prácu. Nastavenie a spustenie ich práce s aplikáciou trvá len pár minút. Malá investícia času a úsilia môže mať teda okamžitý, dramatický vplyv na výkon - zvyčajne rádovo. Jednoduché riešenie s obrovským prínosom; to je tak blízko k mágii, ako môžete získať.

Kedy použiť Memcached

Memcached môže byť výhodnejší pri ukladaní relatívne malých a statických údajov do pamäti, napríklad fragmentov kódu HTML. Správa internej pamäte Memcached, aj keď nie je taká sofistikovaná ako Redis, je efektívnejšia v najjednoduchších prípadoch použitia, pretože na metadáta spotrebuje porovnateľne menej pamäťových zdrojov. Reťazce (jediný dátový typ podporovaný programom Memcached) sú ideálne na ukladanie údajov, ktoré sú iba na čítanie, pretože reťazce nevyžadujú ďalšie spracovanie.

Veľké množiny údajov často zahŕňajú serializované údaje, čo vyžaduje vždy viac priestoru na ich uloženie. Zatiaľ čo Memcached je efektívne obmedzený na ukladanie dát v serializovanej podobe, dátové štruktúry v Redis môžu natívne ukladať akýkoľvek aspekt dát, čím znižujú réžiu serializácie.

Druhý scenár, v ktorom má Memcached výhodu oproti Redis, je škálovanie. Pretože Memcached je viacvláknový, môžete ho ľahko zväčšiť tým, že mu dáte viac výpočtových zdrojov, ale stratíte časť alebo všetky údaje z vyrovnávacej pamäte (v závislosti od toho, či používate konzistentné hashovanie). Redis, ktorý je väčšinou s jedným vláknom, môže škálovať horizontálne pomocou zoskupovania bez straty údajov. Klastrovanie je efektívne riešenie škálovania, jeho nastavenie a prevádzka je však porovnateľne zložitejšia.

Kedy použiť Redis

Redis budete takmer vždy chcieť použiť kvôli jeho dátovým štruktúram. S Redis ako vyrovnávacou pamäťou získate veľa energie (napríklad schopnosť doladiť obsah vyrovnávacej pamäte a životnosť) a celkovo vyššiu efektivitu. Len čo použijete dátové štruktúry, zvýšenie účinnosti sa stane obrovským pre konkrétne scenáre aplikácie.

Redisova nadradenosť je zrejmá takmer vo všetkých aspektoch správy vyrovnávacej pamäte. Vyrovnávacia pamäť používa mechanizmus nazývaný vysťahovanie údajov, aby uvoľnila miesto pre nové údaje odstránením starých údajov z pamäte. Mechanizmus vysťahovania údajov spoločnosti Memcached využíva algoritmus najmenej nedávno použitého typu a trochu svojvoľne vysťahuje údaje podobné veľkosti ako nové údaje.

Redis naopak umožňuje podrobnú kontrolu vysťahovania a umožňuje vám výber zo šiestich rôznych politík vysťahovania. Redis tiež využíva sofistikovanejšie prístupy k správe pamäte a výberu kandidátov na vysťahovanie. Redis podporuje lenivé aj aktívne vysťahovanie, keď sa údaje vysťahujú iba vtedy, keď je potrebný väčší priestor alebo proaktívne.

Redis vám poskytuje oveľa väčšiu flexibilitu, pokiaľ ide o objekty, ktoré môžete ukladať do pamäte cache. Zatiaľ čo Memcached obmedzuje názvy kľúčov na 250 bajtov a pracuje iba s obyčajnými reťazcami, Redis umožňuje, aby názvy a hodnoty kľúčov boli rovnako veľké ako 512 MB, a sú teda binárne bezpečné. Redis má navyše na výber z piatich primárnych dátových štruktúr, ktoré vývojárom aplikácií otvárajú svet možností prostredníctvom inteligentného ukladania do medzipamäte a manipulácie s nimi.

Redis pre vytrvalosť údajov

Používanie dátových štruktúr Redis môže zjednodušiť a optimalizovať niekoľko úloh - nielen pri ukladaní do pamäte cache, ale aj vtedy, keď chcete, aby boli dáta trvalé a vždy dostupné. Napríklad namiesto ukladania objektov ako serializovaných reťazcov môžu vývojári pomocou rozhrania Redis Hash ukladať polia a hodnoty objektu a spravovať ich pomocou jedného kľúča. Redis Hash šetrí vývojárom potrebu načítať celý reťazec, deserializovať ho, aktualizovať hodnotu, reserializovať objekt a nahradiť celý reťazec v pamäti cache novou hodnotou pre každú triviálnu aktualizáciu - to znamená nižšiu spotrebu zdrojov a vyšší výkon.

Na implementáciu ešte zložitejších scenárov je možné použiť ďalšie dátové štruktúry ponúkané Redisom (napríklad zoznamy, množiny, zoradené množiny, hyperloglogy, bitmapy a geopriestorové indexy). Zoradené množiny pre príjem a analýzu údajov v časových radoch sú ďalším príkladom dátovej štruktúry Redis, ktorá ponúka enormne zníženú zložitosť a nižšiu spotrebu šírky pásma.

Ďalšou dôležitou výhodou systému Redis je, že údaje, ktoré ukladá, nie sú neprehľadné, takže server s nimi môže manipulovať priamo. Značná časť z viac ako 180 príkazov, ktoré sú k dispozícii v systéme Redis, sa venuje operáciám spracovania údajov a vkladaniu logiky do samotného úložiska údajov prostredníctvom skriptovania Lua na strane servera. Tieto vstavané príkazy a používateľské skripty vám dávajú flexibilitu pri spracovávaní úloh spracovania údajov priamo v Redis bez toho, aby ste museli dáta odosielať cez sieť do iného systému na spracovanie.

Redis ponúka voliteľnú a laditeľnú vytrvalosť údajov navrhnutú tak, aby bootovala z vyrovnávacej pamäte po plánovanom vypnutí alebo neplánovanom zlyhaní. Aj keď máme tendenciu považovať dáta v cache za nestále a prechodné, pretrvávajúce dáta na disk môžu byť v scenároch ukladania do cache dosť cenné. To, že máte dáta medzipamäte k dispozícii na načítanie ihneď po reštarte, umožňuje oveľa kratšie zahriatie medzipamäte a odstráni sa zaťaženie spojené s opätovným vyplnením a prepočítaním obsahu medzipamäte z primárneho úložiska údajov.

Znova si prečítajte replikáciu údajov v pamäti

Redis môže tiež replikovať údaje, ktoré spravuje. Replikáciu je možné použiť na implementáciu vysoko dostupného nastavenia medzipamäte, ktoré odolá zlyhaniam a poskytuje aplikácii neprerušovanú službu. Zlyhanie medzipamäte z hľadiska dopadu na užívateľskú skúsenosť a výkon aplikácie len mierne zaostáva za zlyhaním aplikácie, preto je vo väčšine prípadov hlavnou výhodou overené riešenie, ktoré zaručuje obsah a dostupnosť služby cache.

V neposlednom rade, pokiaľ ide o prevádzkovú viditeľnosť, Redis poskytuje množstvo metrík a množstvo introspektívnych príkazov, pomocou ktorých monitoruje a sleduje využitie a neobvyklé správanie. Štatistiky v reálnom čase o všetkých aspektoch databázy, zobrazovaní všetkých vykonávaných príkazov, vytváraní a správe pripojení klientov - Redis má všetko a ešte oveľa viac.

Keď si vývojári uvedomia efektívnosť schopností Redisovej perzistencie a replikácie v pamäti, často ju používajú ako databázu prvej reakcie, zvyčajne na analýzu a spracovanie údajov s vysokou rýchlosťou a poskytovanie odpovedí používateľovi, zatiaľ čo sekundárna (často pomalšia) databáza udržuje historický záznam toho, čo sa stalo. Pri takomto použití môže byť Redis ideálny aj pre prípady použitia analytiky.

Redis pre analýzu údajov

Okamžite vás napadnú tri analytické scenáre. V prvom scenári, keď používate na opakované spracovanie veľkých množín údajov niečo ako Apache Spark, môžete použiť Redis ako vrstvu poskytujúcu údaje, ktoré predtým vypočítal Spark. V druhom scenári môže použitie Redisu ako zdieľaného úložiska distribuovaných údajov v pamäti urýchliť rýchlosť spracovania Sparku o faktor 45 až 100. Nakoniec je príliš častým scenárom scenár, v ktorom je potrebné prispôsobiť prehľady a analýzy pomocou používateľovi, ale načítanie údajov z inherentne dávkových úložísk údajov (napríklad Hadoop alebo RDBMS) trvá príliš dlho. V tomto prípade je úložisko dátovej štruktúry v pamäti, ako napríklad Redis, jediným praktickým spôsobom, ako získať doby stránkovania a odozvy pod milisekundou.

Pri použití extrémne veľkých súborov prevádzkových údajov alebo analytických pracovných záťaží nemusí byť prevádzka všetkého v pamäti nákladovo efektívna. Na dosiahnutie výkonu za milisekundy pri nižších nákladoch spoločnosť Redis Labs vytvorila verziu Redis, ktorá pracuje na kombinácii RAM a flash, s možnosťou konfigurácie pomerov RAM k flash. Aj keď sa tým otvára niekoľko nových možností na zrýchlenie spracovania pracovného zaťaženia, dáva to vývojárom možnosť jednoducho spustiť svoju „vyrovnávaciu pamäť flash“.

Softvér s otvoreným zdrojovým kódom naďalej poskytuje niektoré z najlepších technológií, ktoré sú dnes k dispozícii. Pokiaľ ide o zvýšenie výkonu aplikácií pomocou pamäte cache, Redis a Memcached sú najuznávanejšími a výrobou overenými kandidátmi. Avšak vzhľadom na bohatšiu funkčnosť Redis, pokročilejší dizajn, mnoho potenciálnych použití a vyššiu efektivitu nákladov v rozsahu, by Redis mal byť vašou prvou voľbou takmer v každom prípade.

---

Itamar Haber (@itamarhaber) je hlavným obhajcom vývojárov v spoločnosti Redis Labs, ktorá ponúka vývojárom Memcached a Redis ako plne spravované cloudové služby. Medzi jeho rozmanité skúsenosti patrí vývoj a správa softvérových produktov a vedúce úlohy v spoločnostiach Xeround, Etagon, Amicada a MNS Ltd. Itamar je držiteľom titulu Master of Business Administration zo spoločného programu Kellogg-Recanati na univerzitách v severozápadnom a tel Avivskom polostrove, ako aj bakalársky titul. vedy v informatike.

Nové technologické fórum poskytuje miesto na preskúmanie a diskusiu o vznikajúcich podnikových technológiách v nebývalej hĺbke a šírke. Výber je subjektívny, založený na našom výbere technológií, ktoré považujeme za dôležité a pre čitateľov najväčší záujem. neprijíma marketingové záruky na zverejnenie a vyhradzuje si právo upravovať všetok prispievaný obsah. Všetky otázky posielajte na adresu [email protected].

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