Programmēšana

Kāpēc Redis pārspēj Memcached par kešatmiņu

Memčahs vai Redis? Tas ir jautājums, kas gandrīz vienmēr rodas diskusijās par modernas, uz datu bāzēm balstītas tīmekļa lietojumprogrammas veiktspējas uzlabošanu. Kad ir jāuzlabo veiktspēja, kešatmiņa bieži ir pirmais solis, un Memcached vai Redis parasti ir pirmās vietas, kur pagriezties.

Šiem slavenajiem kešatmiņas dzinējiem ir daudz līdzību, taču tiem ir arī būtiskas atšķirības. Redis, jaunākais un daudzpusīgākais no abiem, gandrīz vienmēr ir labākā izvēle.

Redis pret Memcached par kešatmiņu

Sāksim ar līdzībām. Gan Memcached, gan Redis kalpo kā atmiņā ievietoti, atslēgas vērtību datu krājumi, lai gan Redis precīzāk tiek raksturots kā datu struktūras krājums. Gan Memcached, gan Redis pieder NoSQL datu pārvaldības risinājumu saimei, un abi ir balstīti uz atslēgas vērtības datu modeli. Viņi abi glabā visus datus RAM, kas, protams, padara tos par visnoderīgākajiem kā kešatmiņas slāni. Runājot par veiktspēju, abi datu krājumi ir arī ļoti līdzīgi, tiem ir gandrīz identiskas īpašības (un metrika) attiecībā uz caurlaidspēju un latentumu.

Gan Memcached, gan Redis ir nobrieduši un ļoti populāri atvērtā koda projekti. Memcached sākotnēji izstrādāja Breds Ficpatriks 2003. gadā vietnē LiveJournal. Kopš tā laika Memcached ir pārrakstīts C (sākotnējā versija bija Perlā) un ievietota publiskā domēnā, kur tas ir kļuvis par mūsdienu tīmekļa lietojumprogrammu stūrakmeni. Pašreizējā Memcached izstrāde ir vērsta uz stabilitāti un optimizāciju, nevis jaunu funkciju pievienošanu.

Redis izveidoja Salvatore Sanfilippo 2009. gadā, un šodien Sanfilippo joprojām ir galvenais projekta attīstītājs. Redisu dažreiz raksturo kā “Memcached uz steroīdiem”, kas gandrīz nav pārsteidzoši, ņemot vērā, ka Redis daļas tika uzceltas, reaģējot uz pieredzi, kas gūta, lietojot Memcached. Redisam ir vairāk funkciju nekā Memcached, un tāpēc tas ir jaudīgāks un elastīgāks.

Daudzi Memcached un Redis, kurus izmanto daudzi uzņēmumi un neskaitāmās, kritiski svarīgās ražošanas vidēs, klientu bibliotēkas atbalsta visās iedomājamās programmēšanas valodās, un tas ir iekļauts daudzos izstrādātāju paketēs. Faktiski tā ir reta tīmekļa kaudze, kas neietver iebūvētu atbalstu ne Memcached, ne Redis.

Kāpēc Memcached un Redis ir tik populāri? Tie ir ne tikai ārkārtīgi efektīvi, bet arī salīdzinoši vienkārši. Darba sākšana ar Memcached vai Redis tiek uzskatīta par vieglu darbu izstrādātājam. Lai iestatītu un darbotos ar lietojumprogrammu, nepieciešamas tikai dažas minūtes. Tādējādi nelielam laika un pūļu ieguldījumam var būt tūlītēja, dramatiska ietekme uz sniegumu - parasti pēc lieluma pakāpēm. Vienkāršs risinājums ar milzīgu labumu; tas ir tik tuvu burvībai, cik vien iespējams.

Kad lietot Memcached

Memchached varētu būt vēlams, ja kešatmiņā saglabājat salīdzinoši mazus un statiskus datus, piemēram, HTML koda fragmentus. Lai gan Memcached iekšējā atmiņas pārvaldība nav tik sarežģīta kā Redis, tā ir efektīvāka vienkāršākajos lietošanas gadījumos, jo tā metadatiem patērē salīdzinoši mazāk atmiņas resursu. Stīgas (vienīgais datu tips, ko atbalsta Memcached) ir ideāli piemērotas tikai lasītu datu glabāšanai, jo virknes nav nepieciešamas tālākai apstrādei.

Lielās datu kopās bieži tiek izmantoti sērijveida dati, kuru glabāšanai vienmēr ir nepieciešams vairāk vietas. Kamēr Memcached faktiski aprobežojas ar datu glabāšanu tā sērijveida formā, Redis datu struktūras var saglabāt visus datu aspektus dabiski, tādējādi samazinot sērijveida pieskaitāmās izmaksas.

Otrais scenārijs, kurā Memcached ir priekšrocības salīdzinājumā ar Redisu, ir mērogošana. Tā kā Memcached ir daudzsavienots, varat viegli palielināt, piešķirot tam vairāk skaitļošanas resursu, taču jūs zaudēsiet daļu vai visus kešatmiņā saglabātos datus (atkarībā no tā, vai izmantojat konsekventu jaukšanu). Redis, kas galvenokārt ir ar vienu pavedienu, var horizontāli mērogot, izmantojot kopas, nezaudējot datus. Klasteru veidošana ir efektīvs mērogošanas risinājums, taču tā iestatīšana un darbība ir salīdzinoši sarežģītāka.

Kad lietot Redis

Gandrīz vienmēr vēlaties izmantot Redis datu struktūras dēļ. Izmantojot Redis kā kešatmiņu, jūs iegūstat daudz enerģijas (piemēram, spēju precīzi pielāgot kešatmiņas saturu un izturību) un kopumā lielāku efektivitāti. Tiklīdz izmantojat datu struktūras, efektivitātes palielinājums kļūst milzīgs noteiktiem lietojuma scenārijiem.

Redisa pārākums ir acīmredzams gandrīz visos kešatmiņas pārvaldības aspektos. Kešatmiņā tiek izmantots mehānisms, ko sauc par datu izlikšanu, lai atbrīvotu vietu jauniem datiem, izdzēšot vecos datus no atmiņas. Memcached datu izlikšanas mehānisms izmanto vismazāk izmantoto algoritmu un nedaudz patvaļīgi izliek datus, kuru izmērs ir līdzīgs jaunajiem datiem.

Redis savukārt ļauj precīzi kontrolēt izlikšanu, ļaujot izvēlēties no sešām dažādām izlikšanas politikām. Redis izmanto arī sarežģītākas pieejas atmiņas pārvaldībai un kandidātu izraidīšanai. Redis atbalsta gan slinku, gan aktīvu izlikšanu, kur dati tiek izlikti tikai tad, kad nepieciešams vairāk vietas vai proaktīvi.

Redis dod jums daudz lielāku elastību attiecībā uz objektiem, kurus varat saglabāt kešatmiņā. Kamēr Memcached ierobežo atslēgu nosaukumus līdz 250 baitiem un darbojas tikai ar vienkāršām virknēm, Redis ļauj atslēgu nosaukumiem un vērtībām būt tikpat lielām kā 512 MB, un tās ir bināri drošas. Turklāt Redisam ir piecas primārās datu struktūras, no kurām izvēlēties, atverot iespēju pasauli lietojumprogrammu izstrādātājam, izmantojot viedo kešatmiņu un manipulējot ar kešatmiņā saglabātajiem datiem.

Redis par datu noturību

Redis datu struktūru izmantošana var vienkāršot un optimizēt vairākus uzdevumus - ne tikai kešatmiņā, bet pat tad, ja vēlaties, lai dati būtu noturīgi un vienmēr pieejami. Piemēram, tā vietā, lai objektus uzglabātu kā sērijveida virknes, izstrādātāji var izmantot Redis Hash, lai saglabātu objekta laukus un vērtības un pārvaldītu tos, izmantojot vienu atslēgu. Redis Hash ietaupa izstrādātājiem nepieciešamību ielādēt visu virkni, deserializēt to, atjaunināt vērtību, reserializēt objektu un aizstāt visu kešatmiņā esošo virkni ar katru mazsvarīgā atjauninājuma jauno vērtību - tas nozīmē zemāku resursu patēriņu un paaugstinātu veiktspēju.

Citas Redis piedāvātās datu struktūras (piemēram, saraksti, kopas, sakārtotās kopas, hiperlogogi, bitu kartes un ģeotelpiskie indeksi) var izmantot vēl sarežģītāku scenāriju īstenošanai. Kārtotas kopas laika rindu datu uzņemšanai un analīzei ir vēl viens Redis datu struktūras piemērs, kas piedāvā ievērojami samazinātu sarežģītību un zemāku joslas platuma patēriņu.

Vēl viena svarīga Redis priekšrocība ir tā, ka tā glabātie dati nav necaurspīdīgi, tāpēc serveris var tieši tos manipulēt. Ievērojama daļa Redis pieejamo 180 plus komandu ir veltīta datu apstrādes darbībām un loģikas iegulšanai pašā datu krātuvē, izmantojot servera puses Lua skriptu. Šīs iebūvētās komandas un lietotāju skripti ļauj jums elastīgi apstrādāt datu apstrādes uzdevumus tieši Redis tīklā, nenododot datus visā tīklā apstrādei citā sistēmā.

Redis piedāvā izvēles un noskaņojamu datu noturību, kas paredzēta kešatmiņas sāknēšanai pēc plānotas izslēgšanas vai neplānotas kļūmes. Kaut arī mēs mēdzam uzskatīt, ka kešatmiņā saglabātie dati ir nepastāvīgi un pārejoši, pastāvīgi dati diskā var būt diezgan vērtīgi kešatmiņas scenārijos. Ja kešatmiņas dati ir pieejami ielādēšanai tūlīt pēc restartēšanas, kešatmiņa tiek iesildīta daudz īsāk un tiek noņemta slodze, kas saistīta ar kešatmiņas satura atkārtotu aizpildīšanu un pārrēķināšanu no primārā datu krātuves.

Redis atmiņā datu replikāciju

Redis var arī atkārtot savus pārvaldītos datus. Replikāciju var izmantot, lai ieviestu augsti pieejamu kešatmiņas iestatīšanu, kas var izturēt kļūmes un nodrošināt nepārtrauktu programmas lietojumprogrammu. Kešatmiņas kļūme tikai nedaudz pietrūkst lietojumprogrammas kļūmei attiecībā uz ietekmi uz lietotāja pieredzi un lietojumprogrammas veiktspēju, tāpēc pārbaudīta risinājuma pieejamība, kas garantē kešatmiņas saturu un pakalpojumu pieejamību, vairumā gadījumu ir liela priekšrocība.

Visbeidzot, runājot par darbības redzamību, Redis nodrošina virkni metriku un daudz introspektīvu komandu, ar kurām uzraudzīt un izsekot lietošanu un neparastu uzvedību. Reāllaika statistika par visiem datu bāzes aspektiem, visu izpildāmo komandu parādīšanu, klientu savienojumu uzskaitīšanu un pārvaldīšanu - Redis ir viss un vēl vairāk.

Kad izstrādātāji saprot Redisa noturības un atmiņas replikācijas iespēju efektivitāti, viņi bieži to izmanto kā pirmās atbildes datu bāzi, parasti, lai analizētu un apstrādātu ātrdarbīgus datus un sniegtu atbildes lietotājam, kamēr tiek uzturēta sekundārā (bieži lēnāka) datu bāze. vēsturisks ieraksts par notikušo. Šādi lietojot, Redis var būt ideāli piemērots arī analīzes lietošanai.

Redis datu analītikai

Tūlīt ienāk prātā trīs analīzes scenāriji. Pirmajā scenārijā, lietojot kaut ko līdzīgu Apache Spark lielu datu kopu iteratīvai apstrādei, Redis varat izmantot kā apkalpojošo slāni datiem, ko iepriekš aprēķinājusi Spark. Otrajā scenārijā, izmantojot Redis kā koplietojamu atmiņā sadalītu datu krātuvi, Spark apstrādes ātrums var palielināties par koeficientu no 45 līdz 100. Visbeidzot, pārāk izplatīts scenārijs ir tāds, ka pārskatus un analīzi ir jāpielāgo lietotājs, bet datu izgūšana no būtībā pakešdatu krātuvēm (piemēram, Hadoop vai RDBMS) aizņem pārāk ilgu laiku. Šajā gadījumā datu struktūras atmiņā, kas atrodas atmiņā, piemēram, Redis, ir vienīgais praktiskais veids, kā iegūt mazāk nekā milisekundes peidžeru un atbildes laiku.

Izmantojot ārkārtīgi lielas operatīvās datu kopas vai analītiskās slodzes, visa atmiņā palaišana var nebūt rentabla. Lai sasniegtu mazāk nekā sekundes lielu veiktspēju par zemākām izmaksām, Redis Labs izveidoja Redis versiju, kas darbojas ar RAM un flash kombināciju, ar iespēju konfigurēt operatīvās atmiņas un zibspuldzes attiecību. Lai gan tas paver vairākas jaunas iespējas, kā paātrināt darba slodzes apstrādi, tas arī dod izstrādātājiem iespēju vienkārši palaist savu kešatmiņu zibatmiņā.

Atvērtā pirmkoda programmatūra joprojām nodrošina dažas no labākajām mūsdienu pieejamajām tehnoloģijām. Runājot par lietojumprogrammu veiktspējas uzlabošanu, izmantojot kešatmiņu, Redis un Memcached ir visizplatītākie un pārbaudītākie kandidāti. Tomēr, ņemot vērā Redis bagātīgāko funkcionalitāti, modernāku dizainu, daudzus potenciālos pielietojumus un lielāku izmaksu efektivitāti, Redis ir jābūt jūsu pirmajai izvēlei gandrīz visos gadījumos.

---

Itamārs Habers (@itamarhaber) ir Redis Labs galvenais izstrādātāju advokāts, kas piedāvā Memcached un Redis kā pilnībā pārvaldītus mākoņpakalpojumus izstrādātājiem. Viņa daudzveidīgā pieredze ietver programmatūras produktu izstrādi un pārvaldību, kā arī līdera lomu uzņēmumos Xeround, Etagon, Amicada un MNS Ltd. Itamar ir ieguvis uzņēmējdarbības maģistra grādu Ziemeļrietumu un Telavivas universitāšu kopīgajā Kellogg-Recanati programmā, kā arī bakalaura grādu. zinātnes datorzinātnēs.

Jauno tehnoloģiju forums nodrošina vietu, kur bezprecedenta dziļumā un plašumā izpētīt un pārrunāt topošās uzņēmuma tehnoloģijas. Izvēle ir subjektīva, balstoties uz mūsu izvēlētajām tehnoloģijām, kuras, mūsuprāt, ir svarīgas un interesē lasītājus. nepieņem mārketinga nodrošinājumu publicēšanai un patur tiesības rediģēt visu ieguldīto saturu. Nosūtiet visus jautājumus uz [email protected].

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