Programiranje

Zakaj Redis premaga Memcached za predpomnjenje

Memcached ali Redis? To je vprašanje, ki se skoraj vedno pojavi v kakršni koli razpravi o iztisnitvi večje zmogljivosti iz sodobne spletne aplikacije, ki temelji na zbirki podatkov. Ko je treba izboljšati zmogljivost, je pogosto prvi korak predpomnjenje, Memcached ali Redis pa sta običajno prvi mesti, ki ju je treba obrniti.

Ti priznani predpomnilniki imajo številne podobnosti, vendar imajo tudi pomembne razlike. Redis, novejši in vsestransko uporaben, je skoraj vedno vrhunska izbira.

Redis proti Memcached za predpomnjenje

Začnimo s podobnostmi. Tako Memcached kot Redis služita kot pomnilnika podatkov s ključno vrednostjo v pomnilniku, čeprav je Redis natančneje opisan kot shramba podatkovne strukture. Tako Memcached kot Redis spadata v družino rešitev za upravljanje podatkov NoSQL in oba temeljita na podatkovnem modelu ključ-vrednost. Oba hranita vse podatke v RAM-u, zaradi česar sta nadvse uporabna kot predpomnilniška plast. Tudi po zmogljivosti sta si shrambi podatkov izjemno podobni in kažeta skoraj enake značilnosti (in meritve) glede na pretočnost in zakasnitev.

Tako Memcached kot Redis sta zrela in zelo priljubljena odprtokodna projekta. Memcached je prvotno razvil Brad Fitzpatrick leta 2003 za spletno mesto LiveJournal. Od takrat je bil Memcached prepisan v C (prvotna izvedba je bila v Perlu) in dan v javno last, kjer je postal temelj sodobnih spletnih aplikacij. Trenutni razvoj Memcacheda je bolj osredotočen na stabilnost in optimizacije kot na dodajanje novih funkcij.

Redis je leta 2009 ustvaril Salvatore Sanfilippo, Sanfilippo pa je danes vodilni razvijalec projekta. Redis včasih opisujejo kot "Memcached na steroidih", kar ne preseneča, saj so bili deli Redisa zgrajeni kot odziv na izkušnje z uporabo Memcacheda. Redis ima več funkcij kot Memcached in je zato zmogljivejši in prilagodljivejši.

Memcached in Redis, ki jih uporabljajo številna podjetja in v neštetih kritičnih produkcijskih okoljih, podpirajo odjemalske knjižnice v vseh možnih programskih jezikih in je vključen v številne pakete za razvijalce. Pravzaprav gre za redek spletni kup, ki ne vključuje vgrajene podpore za Memcached ali Redis.

Zakaj sta Memcached in Redis tako priljubljena? Ne samo, da so izjemno učinkoviti, so tudi razmeroma preprosti. Začetek uporabe Memcached ali Redis velja za razvijalca za enostavno delo. Nastavitev in priprava na delo z aplikacijo traja le nekaj minut. Tako lahko majhna naložba časa in truda takoj, dramatično vpliva na uspešnost - ponavadi po velikosti. Preprosta rešitev z veliko koristjo; to je čim bližje čarovništvu.

Kdaj uporabiti Memcached

Memcached je lahko boljši, če predpomni relativno majhne in statične podatke, kot so fragmenti kode HTML. Upravljanje notranjega pomnilnika Memcached, čeprav ni tako dodelano kot pri Redisu, je v najpreprostejših primerih bolj učinkovito, ker za metapodatke porabi razmeroma manj pomnilniških virov. Strune (edini podatkovni tip, ki ga podpira Memcached) so idealne za shranjevanje podatkov, ki so samo prebrani, saj nizi ne zahtevajo nadaljnje obdelave.

Veliki nabori podatkov pogosto vključujejo serializirane podatke, ki vedno zahtevajo več prostora za shranjevanje. Medtem ko je Memcached dejansko omejen na shranjevanje podatkov v serializirani obliki, lahko podatkovne strukture v Redisu izvorno shranijo kateri koli vidik podatkov in tako zmanjšajo režijske obremenitve.

Drugi scenarij, v katerem ima Memcached prednost pred Redisom, je v skaliranju. Ker je Memcached večniten, ga lahko enostavno povečate tako, da mu zagotovite več računskih virov, vendar boste izgubili del ali vse predpomnjene podatke (odvisno od tega, ali uporabljate dosledno zgoščevanje). Redis, ki je večinoma enonitni, lahko vodoravno spreminja z združevanjem brez izgube podatkov. Grozdenje je učinkovita rešitev za skaliranje, vendar je razmeroma bolj zapleteno pri nastavitvi in ​​delovanju.

Kdaj uporabiti zdravilo Redis

Skoraj vedno boste želeli uporabljati Redis zaradi njegovih podatkovnih struktur. Z Redisom kot predpomnilnikom pridobite veliko energije (na primer zmožnost natančnejše prilagoditve vsebine in trajnosti predpomnilnika) in splošno večjo učinkovitost. Ko enkrat uporabite podatkovne strukture, postane povečanje učinkovitosti izjemno za posebne scenarije aplikacij.

Redisova superiornost je očitna v skoraj vseh vidikih upravljanja predpomnilnika. Predpomnilniki uporabljajo mehanizem, imenovan izselitev podatkov, da z brisanjem starih podatkov iz pomnilnika ustvari prostor za nove podatke. Mehanizem za izselitev podatkov Memcached uporablja algoritem Najmanj nedavno uporabljen in nekoliko samovoljno izseli podatke, ki so po velikosti podobni novim podatkom.

Nasprotno pa Redis omogoča natančen nadzor nad deložacijo, tako da lahko izbirate med šestimi različnimi politikami deložacije. Redis uporablja tudi bolj dovršene pristope k upravljanju spomina in izbiri kandidatov za izselitev. Redis podpira tako leno kot aktivno izseljevanje, pri čemer se podatki izseljujejo le, če je potrebno več prostora ali proaktivno.

Redis vam omogoča veliko večjo prilagodljivost glede predmetov, ki jih lahko shranite v predpomnilnik. Medtem ko Memcached omeji imena ključev na 250 bajtov in deluje samo z navadnimi nizi, Redis dovoljuje, da so imena in vrednosti ključev velika največ 512 MB in so binarno varna. Poleg tega ima Redis na izbiro pet primarnih podatkovnih struktur, ki razvijalcu aplikacij z inteligentnim predpomnjenjem in manipulacijo s predpomnjenimi podatki odpirajo možnosti.

Redis za obstojnost podatkov

Uporaba podatkovnih struktur Redis lahko poenostavi in ​​optimizira več nalog - ne samo med predpomnjenjem, ampak tudi takrat, ko želite, da so podatki trajni in vedno na voljo. Na primer, razvijalci lahko namesto shranjevanja predmetov kot zaporednih nizov uporabljajo Redis Hash za shranjevanje polj in vrednosti predmeta ter jih upravljajo z enim samim ključem. Redis Hash razvijalcem prihrani potrebo po pridobivanju celotnega niza, deserializaciji, posodobitvi vrednosti, ponovni izvedbi predmeta in zamenjavi celotnega niza v predpomnilniku z novo vrednostjo za vsako trivialno posodobitev - to pomeni manjšo porabo virov in večjo zmogljivost.

Druge podatkovne strukture, ki jih ponuja Redis (kot so seznami, nizi, razvrščeni nizi, hiperlogi, bitne slike in geoprostorski indeksi), se lahko uporabijo za izvajanje še bolj zapletenih scenarijev. Razvrščeni nizi za vnos in analizo podatkov v časovnih vrstah so še en primer podatkovne strukture Redis, ki ponuja izredno zmanjšano kompleksnost in manjšo porabo pasovne širine.

Druga pomembna prednost Redisa je, da podatki, ki jih hrani, niso nepregledni, zato lahko strežnik z njimi neposredno upravlja. Precejšen delež 180-plus ukazov, ki so na voljo v Redisu, je namenjen operacijam obdelave podatkov in vdelavi logike v samo shrambo podatkov s pomočjo Lua skript na strani strežnika. Ti vgrajeni ukazi in uporabniški skripti vam omogočajo prilagodljivost pri obdelavi nalog za obdelavo podatkov neposredno v Redisu, ne da bi morali podatke po omrežju pošiljati v drug sistem za obdelavo.

Redis ponuja neobvezno in nastavljivo obstojnost podatkov, namenjeno zagonu predpomnilnika po načrtovanem izklopu ali nenačrtovani okvari. Podatke v predpomnilnikih običajno obravnavamo kot nestanovitne in prehodne, vendar so lahko trajni podatki na disku zelo dragoceni v scenarijih predpomnjenja. Če so podatki predpomnilnika na voljo za nalaganje takoj po ponovnem zagonu, omogoča veliko krajše ogrevanje predpomnilnika in odstrani obremenitev, ki je potrebna za ponovno nalaganje in preračun vsebine predpomnilnika iz primarne shrambe podatkov.

Ponovi kopiranje podatkov v pomnilniku

Redis lahko tudi posnema podatke, ki jih upravlja. Replikacija se lahko uporablja za izvajanje visoko razpoložljive nastavitve predpomnilnika, ki lahko vzdrži napake in zagotavlja neprekinjeno storitev za aplikacijo. Napaka predpomnilnika je le nekoliko manjša od okvare aplikacije v smislu vpliva na uporabniško izkušnjo in delovanje aplikacije, zato je preverjena rešitev, ki zagotavlja vsebino predpomnilnika in razpoložljivost storitev, v večini primerov glavna prednost.

Nenazadnje Redis glede operativne vidnosti ponuja množico meritev in bogastvo introspektivnih ukazov, s katerimi lahko spremljate in spremljate uporabo in nenormalno vedenje. Statistika v realnem času o vseh vidikih baze podatkov, prikaz vseh izvršenih ukazov, seznam in upravljanje odjemalskih povezav - vse to in še več ima Redis.

Ko razvijalci ugotovijo učinkovitost Redisove obstojnosti in zmožnosti kopiranja v pomnilniku, jo pogosto uporabljajo kot bazo podatkov o prvem odzivu, ponavadi za analizo in obdelavo visokohitrostnih podatkov ter zagotavljanje odzivov uporabniku, medtem ko sekundarna (pogosto počasnejša) baza podatkov vzdržuje zgodovinski zapis o tem, kaj se je zgodilo. Če se Redis uporablja na ta način, je lahko idealen tudi za primere uporabe analitike.

Redis za analitiko podatkov

Trije analitični scenariji se takoj spomnimo. V prvem scenariju lahko pri ponovni obdelavi velikih naborov podatkov, kot je Apache Spark, uporabite Redis kot plast za serviranje podatkov, ki jih je predhodno izračunala Spark. V drugem scenariju lahko uporaba Redisa kot skupne, v pomnilniku porazdeljene shrambe podatkov pospeši hitrost obdelave isker za faktor do 45 do 100. Končno je preveč pogost scenarij, v katerem je treba poročila in analitiko prilagoditi tako, da uporabnik, vendar pridobivanje podatkov iz inherentno shranjenih paketnih podatkov (na primer Hadoop ali RDBMS) traja predolgo. V tem primeru je shramba podatkov v pomnilniku, kot je Redis, edini praktični način pridobivanja podmilisekund ostranjevanja in odzivnega časa.

Če uporabljate izredno velike nabore operativnih podatkov ali delovne obremenitve analitike, zagon vsega v pomnilniku morda ne bo stroškovno učinkovit. Da bi dosegli delovanje pod milisekundami po nižjih stroških, je Redis Labs ustvaril različico Redisa, ki deluje na kombinaciji RAM-a in bliskavice, z možnostjo konfiguriranja razmerja med RAM-om in bliskavico. Medtem ko to odpira več novih poti za pospešitev obdelave delovne obremenitve, pa razvijalcem ponuja tudi možnost, da preprosto zaženejo svoj "predpomnilnik na bliskavici".

Odprtokodna programska oprema še naprej ponuja nekatere najboljše tehnologije, ki so na voljo danes. Pri povečanju učinkovitosti aplikacije s predpomnjenjem sta Redis in Memcached najbolj uveljavljena in v proizvodnji dokazana kandidata. Glede na bogatejšo funkcionalnost Redisa, naprednejšo zasnovo, številne potencialne uporabe in večjo stroškovno učinkovitost pa bi moral biti Redis vaša prva izbira v skoraj vseh primerih.

---

Itamar Haber (@itamarhaber) je glavni zagovornik razvijalcev pri Redis Labs, ki Memcachedu in Redisu ponuja popolnoma upravljane storitve v oblaku za razvijalce. Njegove raznolike izkušnje vključujejo razvoj in upravljanje programskih izdelkov ter vodstvene vloge v podjetjih Xeround, Etagon, Amicada in MNS Ltd. Itamar je magister poslovne administracije iz skupnega programa Kellogg-Recanati na univerzah Northwestern in Tel-Aviv ter diplomiral. znanosti s področja računalništva.

Forum New Tech ponuja prizorišče za raziskovanje in razpravo o nastajajoči podjetniški tehnologiji v globini in širini brez primere. Izbor je subjektiven in temelji na našem izboru tehnologij, za katere menimo, da so pomembne in najbolj zanimajo bralce. ne sprejema tržnih zavarovanj za objavo in si pridržuje pravico do urejanja celotne prispevane vsebine. Vsa vprašanja pošljite na [email protected].

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