Programavimas

Kodėl Redis muša „Memcached“ už talpyklą

Memcachedas ar Redis? Tai klausimas, kuris beveik visada kyla diskusijų metu apie tai, kaip išgauti daugiau našumo iš modernios, duomenų bazėmis pagrįstos žiniatinklio programos. Kai reikia pagerinti našumą, dažnai pirmas žingsnis tenka talpyklai, o „Memcached“ arba „Redis“ paprastai yra pirmosios vietos, į kurias reikia kreiptis.

Šie garsūs talpyklos varikliai turi daug panašumų, tačiau jie taip pat turi svarbių skirtumų. Redis, naujesnis ir universalesnis iš dviejų, beveik visada yra geriausias pasirinkimas.

Redis prieš Memcached už talpyklą

Pradėkime nuo panašumų. Tiek „Memcached“, tiek „Redis“ veikia kaip atmintyje esančios raktų vertės duomenų saugyklos, nors „Redis“ tiksliau apibūdinama kaip duomenų struktūros saugykla. Tiek „Memcached“, tiek „Redis“ priklauso „NoSQL“ duomenų valdymo sprendimų šeimai ir abu yra pagrįsti pagrindinės vertės duomenų modeliu. Jie abu saugo visus duomenis RAM atmintyje, todėl, be abejo, jie yra ypač naudingi kaip talpyklos sluoksnis. Kalbant apie našumą, abi duomenų saugyklos taip pat yra nepaprastai panašios, pasižyminčios beveik vienodomis charakteristikomis (ir metrikomis) pralaidumo ir vėlavimo atžvilgiu.

Tiek „Memcached“, tiek „Redis“ yra brandūs ir labai populiarūs atvirojo kodo projektai. Iš pradžių „Memcached“ sukūrė Bradas Fitzpatrickas 2003 m. „LiveJournal“ svetainei. Nuo tada „Memcached“ buvo perrašytas C (originalus diegimas buvo Perle) ir paskelbtas viešojoje erdvėje, kur tapo šiuolaikinių žiniatinklio programų kertiniu akmeniu. Dabartinė „Memcached“ plėtra yra orientuota į stabilumą ir optimizavimą, o ne į naujų funkcijų pridėjimą.

„Redis“ sukūrė Salvatore Sanfilippo 2009 m., O „Sanfilippo“ išlieka pagrindiniu projekto kūrėju ir šiandien. Redis kartais apibūdinamas kaip „Memcached on steroidai“, o tai nenuostabu, turint omenyje, kad Redis dalys buvo pastatytos reaguojant į pamokas, išmoktas naudojant Memcached. „Redis“ turi daugiau funkcijų nei „Memcached“, todėl yra galingesnis ir lankstesnis.

Tiek „Memcached“, tiek „Redis“ naudoja daugybė kompanijų ir daugybėje kritiškai svarbių gamybos aplinkų, klientų bibliotekos palaiko visas įmanomas programavimo kalbas ir yra įtrauktos į daugybę kūrėjams skirtų paketų. Tiesą sakant, tai yra retas žiniatinklio kaminas, kuriame nėra integruoto palaikymo nei „Memcached“, nei „Redis“.

Kodėl Memcachedas ir Redis yra tokie populiarūs? Jie ne tik yra nepaprastai veiksmingi, bet ir gana paprasti. Darbo pradžia su „Memcached“ arba „Redis“ laikoma lengvu kūrėjo darbu. Tai užtruks tik kelias minutes, kol juos nustatysite ir pradėsite dirbti su programa. Taigi, nedidelė laiko ir pastangų investicija gali turėti tiesioginį, dramatišką poveikį rezultatams - paprastai dydžių eilėmis. Paprastas sprendimas, turintis didžiulę naudą; tai kuo arčiau magijos.

Kada naudoti „Memcached“

„Memcached“ gali būti pageidautina, kai talpykloje yra gana maži ir statiški duomenys, pvz., HTML kodo fragmentai. „Memcached“ vidinės atminties valdymas, nors ir nėra toks sudėtingas, kaip „Redis“, yra efektyvesnis paprasčiausiais naudojimo atvejais, nes metaduomenims sunaudoja palyginti mažiau atminties išteklių. Stygos (vienintelis duomenų tipas, kurį palaiko „Memcached“) idealiai tinka saugoti tik skaitomus duomenis, nes eilutės nereikia toliau apdoroti.

Dideli duomenų rinkiniai dažnai apima serijinius duomenis, kuriems laikyti visada reikia daugiau vietos. Nors „Memcached“ iš tikrųjų apsiriboja duomenų saugojimu serijiniu pavidalu, „Redis“ duomenų struktūros gali saugoti bet kurį duomenų aspektą natūraliai, taip sumažinant nuoseklų pridėjimą.

Antrasis scenarijus, kai Memcachedas turi pranašumą prieš Redį, yra mastelio keitimas. Kadangi „Memcached“ yra daugialypė, galite lengvai išplėsti, suteikdami jai daugiau skaičiavimo išteklių, tačiau prarasite dalį ar visus talpykloje esančius duomenis (priklausomai nuo to, ar naudojate nuoseklų maišymą). „Redis“, kuris dažniausiai yra vieno sriegio, gali horizontaliai keisti mastelį, neprarasdamas duomenų. Grupavimas yra efektyvus mastelio keitimo sprendimas, tačiau jį nustatyti ir valdyti yra palyginti sudėtingiau.

Kada vartoti Redis

Beveik visada norėsite naudoti „Redis“ dėl jo duomenų struktūros. Naudodami „Redis“ kaip talpyklą, jūs įgyjate daug energijos (pvz., Galimybę tiksliai sureguliuoti talpyklos turinį ir ilgaamžiškumą) ir bendrą efektyvumą. Kai naudosite duomenų struktūras, efektyvumas padidės, kai bus taikomi konkretūs taikymo scenarijai.

Redis pranašumas akivaizdus beveik visuose talpyklos valdymo aspektuose. Talpyklos naudoja duomenų iškrovimo mechanizmą, kad atsirastų vietos naujiems duomenims ištrinant senus duomenis iš atminties. „Memcached“ duomenų iškeldinimo mechanizmas naudoja mažiausiai neseniai naudotą algoritmą ir šiek tiek savavališkai iškeldina duomenis, kurie savo dydžiu yra panašūs į naujus duomenis.

Redis, atvirkščiai, leidžia tiksliai kontroliuoti iškeldinimą, leidžiant pasirinkti iš šešių skirtingų iškeldinimo politikų. Redis taip pat taiko sudėtingesnius atminties valdymo ir kandidatų iškeldinimo metodus. Redis palaiko ir tingų, ir aktyvų iškeldinimą, kai duomenys iškeldinami tik tada, kai reikia daugiau vietos arba proaktyviai.

„Redis“ suteikia jums daug daugiau lankstumo objektų, kuriuos galite talpinti, talpykloje. Nors „Memcached“ apriboja raktų pavadinimus iki 250 baitų ir veikia tik su paprastomis eilutėmis, „Redis“ leidžia raktų pavadinimams ir reikšmėms būti iki 512 MB, ir jie yra dvejetainiai saugūs. Be to, „Redis“ turi penkias pagrindines duomenų struktūras, iš kurių programų kūrėjui atsiveria galimybių pasaulis, naudojant protingą talpyklą ir manipuliavimą talpykloje saugomais duomenimis.

Redis už duomenų patvarumą

Naudojant „Redis“ duomenų struktūras galima supaprastinti ir optimizuoti kelias užduotis - ne tik talpykloje, bet net ir tada, kai norite, kad duomenys būtų patvarūs ir visada prieinami. Pavyzdžiui, užuot saugoję objektus kaip serijines eilutes, kūrėjai gali naudoti „Redis Hash“ objekto laukams ir reikšmėms saugoti ir valdyti juos naudodami vieną raktą. „Redis Hash“ taupo kūrėjus, kad reikia gauti visą eilutę, panaikinti jos dezerializaciją, atnaujinti vertę, pakartotinai pritaikyti objektą ir pakeisti visą eilutę talpykloje nauja kiekvieno kiekvieno nereikšmingo atnaujinimo verte - tai reiškia mažesnį išteklių suvartojimą ir didesnį našumą.

Kitos „Redis“ siūlomos duomenų struktūros (tokios kaip sąrašai, rinkiniai, rūšiuojami rinkiniai, hiperlogogai, bitų žemėlapiai ir geoerdviniai rodikliai) gali būti naudojamos dar sudėtingesniems scenarijams įgyvendinti. Surūšiuoti duomenų eilučių duomenų rinkimo ir analizės rinkiniai yra dar vienas „Redis“ duomenų struktūros pavyzdys, kuris siūlo labai sumažintą sudėtingumą ir mažesnį pralaidumo suvartojimą.

Kitas svarbus „Redis“ privalumas yra tai, kad jo saugomi duomenys nėra matomi, todėl serveris gali jais tiesiogiai manipuliuoti. Nemaža dalis „Redis“ prieinamų 180 plius komandų yra skirta duomenų apdorojimo operacijoms ir logikos įtvirtinimui pačioje duomenų saugykloje naudojant serverio pusės „Lua“ scenarijus. Šios įmontuotos komandos ir vartotojo scenarijai suteikia jums lankstumo tvarkyti duomenų apdorojimo užduotis tiesiogiai sistemoje „Redis“, nereikalaujant duomenų tinkle siųsti į kitą sistemą apdoroti.

„Redis“ siūlo neprivalomą ir derinamą duomenų atkūrimą, skirtą įkelti talpyklą po planuojamo išjungimo ar neplanuoto gedimo. Nors mes linkę laikyti talpyklų duomenis nepastoviais ir laikinais, nuolatiniai duomenys į diską gali būti gana vertingi talpyklos scenarijuose. Turint talpyklos duomenis, kuriuos galima įkelti iškart po paleidimo, galima žymiai trumpiau sušildyti talpyklą ir pašalinti apkrovą, susijusią su talpyklos turinio perkėlimu ir perskaičiavimu iš pirminės duomenų saugyklos.

Redis atmintyje duomenų replikacija

„Redis“ taip pat gali pakartoti savo valdomus duomenis. Replikacija gali būti naudojama įgyvendinant labai prieinamą talpyklos sąranką, kuri gali atlaikyti gedimus ir teikti nenutrūkstamą programos aptarnavimą. Talpyklos gedimas yra tik šiek tiek trumpesnis nei programos gedimas, kalbant apie poveikį vartotojo patirčiai ir programos našumui, todėl turėti patikrintą sprendimą, kuris garantuoja talpyklos turinį ir paslaugų prieinamumą, daugeliu atvejų yra didelis privalumas.

Paskutinis, bet ne mažiau svarbus dalykas - kalbant apie operatyvumą, „Redis“ pateikia daugybę metrikų ir daug introspektyvių komandų, kuriomis galima stebėti ir stebėti naudojimą ir nenormalų elgesį. Realaus laiko statistika apie kiekvieną duomenų bazės aspektą, visų vykdomų komandų atvaizdavimą, klientų ryšių sąrašą ir valdymą - Redis turi visa tai ir dar daugiau.

Kai kūrėjai supranta „Redis“ atkaklumo ir atminties replikavimo galimybių efektyvumą, jie dažnai naudoja ją kaip duomenų bazę, kuri atsako pirmiausia, dažniausiai analizuodama ir apdorodama didelio greičio duomenis ir teikdama atsakymus vartotojui, o antrinė (dažnai lėtesnė) duomenų bazė prižiūri istorinis to įvykio įrašas. Tokiu būdu naudojant, „Redis“ taip pat gali būti idealus analizės naudojimo atvejais.

Redis duomenų analizei

Iš karto ateina į galvą trys analizės scenarijai. Pagal pirmąjį scenarijų, kai naudojate kažką panašaus į „Apache Spark“, kad pakartotinai apdorotumėte didelius duomenų rinkinius, galite naudoti „Redis“ kaip duomenų, kuriuos anksčiau apskaičiavo „Spark“, aptarnavimo sluoksnį. Pagal antrąjį scenarijų, naudojant „Redis“ kaip bendrą, atmintyje esančią paskirstytą duomenų saugyklą, „Spark“ apdorojimo greitis gali padidėti 45–100 kartų. Galiausiai, per daug įprastas scenarijus yra toks, kai ataskaitas ir analizę reikia pritaikyti vartotojui, bet per ilgai užtrunka gauti duomenis iš paketinių duomenų saugyklų (pvz., „Hadoop“ ar RDBMS). Šiuo atveju atmintyje esanti duomenų struktūros saugykla, pvz., „Redis“, yra vienintelis praktinis būdas gauti po milisekundžių ieškos ir atsakymo laiką.

Naudojant itin didelius operatyvinius duomenų rinkinius arba analizės darbo krūvius, viskas, kas yra atmintyje, gali būti nebrangu. Norėdami pasiekti mažesnį nei milisekundžių našumą mažesnėmis sąnaudomis, „Redis Labs“ sukūrė „Redis“ versiją, veikiančią kartu su RAM ir „flash“, su galimybe konfigūruoti RAM ir blykstės santykį. Nors tai atveria keletą naujų būdų paspartinti darbo krūvio apdorojimą, tai taip pat suteikia kūrėjams galimybę paprasčiausiai paleisti „talpyklą„ Flash “.

Atvirojo kodo programinė įranga ir toliau teikia geriausias šiandien pasiekiamas technologijas. Kalbant apie programų našumo didinimą naudojant talpyklą, „Redis“ ir „Memcached“ yra labiausiai įsitvirtinę ir labiausiai pasitvirtinę kandidatai. Tačiau atsižvelgiant į turtingesnį „Redis“ funkcionalumą, pažangesnį dizainą, daugybę galimų naudojimo būdų ir didesnį ekonominį efektyvumą, „Redis“ turėtų būti jūsų pirmas pasirinkimas beveik visais atvejais.

---

Itamaras Haberis (@itamarhaber) yra pagrindinis „Redis Labs“ kūrėjų advokatas, kuris siūlo „Memcached“ ir „Redis“ kaip visiškai valdomas debesų paslaugas kūrėjams. Įvairi patirtis apima programinės įrangos produktų kūrimą, valdymą ir vadovavimo pareigas „Xeround“, „Etagon“, „Amicada“ ir „MNS Ltd.“. Itamar turi verslo administravimo magistro laipsnį iš bendros Šiaurės Vakarų ir Tel Avivo universitetų Kellogg-Recanati programos, taip pat bakalauro laipsnį. mokslo kompiuterijos srityje.

Naujųjų technologijų forumas suteikia galimybę tyrinėti ir aptarti besiformuojančios įmonės technologijas beprecedentiame gylyje. Atranka yra subjektyvi, atsižvelgiant į mūsų pasirinktas technologijas, kurios, mūsų manymu, yra svarbios ir labiausiai domina skaitytojus. nepriima rinkodaros užtikrinimo priemonės paskelbimui ir pasilieka teisę redaguoti visą pateiktą turinį. Visus klausimus siųskite adresu [email protected]