Programmēšana

Kā izmantot patērētāju grupas Redis straumēs

Roshans Kumars ir uzņēmuma Redis Labs vecākais produktu vadītājs.

Redis Streams ir jauna datu struktūra, kas ieviesta Redis 5.0, kas ļauj jums izveidot un pārvaldīt datu plūsmas. Iepriekšējā rakstā es parādīju, kā straumei pievienot datus un kā tos lasīt vairākos veidos. Šajā rakstā es paskaidrošu, kā Redis Streams izmantot patērētāju grupas. Patērētāju grupa ir veids, kā sadalīt ziņojumu straumi starp vairākiem klientiem, lai paātrinātu apstrādi vai atvieglotu slodzi lēnākiem patērētājiem.

Ideālā pasaulē gan datu ražotāji, gan patērētāji strādā vienādā tempā, un nav datu zudumu vai datu kavēšanās. Diemžēl tas tā nav reālajā pasaulē. Gandrīz visos reāllaika datu plūsmas apstrādes izmantošanas gadījumos ražotāji un patērētāji strādā dažādos ātrumos. Turklāt ir vairāk nekā viena veida patērētāji, kuriem katram ir savas prasības un apstrādes temps. Redis Streams risina šo vajadzību, izmantojot funkciju komplektu, kas ļoti pievērš uzmanību patērētāju atbalstam. Viena no vissvarīgākajām iezīmēm ir patērētāju grupa.

Kad jāizmanto Redis Streams patērētāju grupa

Patērētāju grupu mērķis ir paplašināt jūsu datu patēriņa procesu. Apskatīsim vienu piemēru - attēlu apstrādes lietojumprogrammu. Risinājumam nepieciešamas trīs galvenās sastāvdaļas:

  1. Ražotājs (iespējams, viena vai vairākas kameras), kas uzņem un saglabā attēlus;
  2. Redis Stream, kas saglabā attēlus (straumes datu krātuvē) to secībā; un
  3. Attēlu procesors, kas apstrādā katru attēlu.
Redis Labs

Pieņemsim, ka jūsu producents saglabā 500 attēlus sekundē, un attēlu procesors ar pilnu jaudu apstrādā tikai 100 attēlus sekundē. Šī likmju starpība radīs neizpildītu laiku, un jūsu attēlu procesors nekad nespēs panākt. Vienkāršs veids, kā risināt šo problēmu, ir palaist piecus attēlu procesorus (kā parādīts 2. attēlā), katrs apstrādājot savstarpēji izslēdzošu attēlu kopu. To var sasniegt, izmantojot patērētāju grupu, kas ļauj sadalīt darba slodzi un novirzīt tos dažādiem patērētājiem.

Redis Labs

Patērētāju grupa dara vairāk nekā datu sadalīšana - tā nodrošina datu drošību un ļauj atjaunot katastrofas.

Kā darbojas Redis Streams patērētāju grupa

Patērētāju grupa ir Redis Stream datu struktūra. Kā parādīts 3. attēlā, jūs varat domāt par patērētāju grupu kā sarakstu kolekciju. Vēl viena lieta, ko iedomāties, ir to preču saraksts, kuras neviens patērētājs nelieto - mūsu diskusijai to sauksim par “neizlietoto sarakstu”. Kad dati nonāk straumē, tie nekavējoties tiek pārvietoti uz neizmantoto sarakstu.

Redis Labs

Patērētāju grupa uztur atsevišķu sarakstu katram patērētājam, parasti pievienojot lietojumprogrammu. 3. attēlā mūsu risinājums ir N identiskas lietojumprogrammas (1. lietotne, 2. lietotne,…. lietotne n), kas datus nolasa attiecīgi caur 1., 2. un 2. patērētāju.

Kad lietotne nolasa datus, izmantojot komandu XREADGROUP, konkrēti datu ieraksti tiek noņemti no neizmantotā saraksta un tiek ievietoti gaidošo ierakstu sarakstā, kas pieder attiecīgajam patērētājam. Tādējādi divi patērētāji neizmantos vienus un tos pašus datus.

Visbeidzot, kad lietotne paziņo straumei ar komandu XACK, tā noņems vienumu no patērētāja gaidošo ierakstu saraksta.

Tagad, kad esmu izskaidrojis patērētāju grupu pamatus, iedziļināsimies, kā darbojas šis datu dzīves cikls.

Redis Streams patērētāju grupas izveide

Jūs varat izveidot jaunu patērētāju grupu, izmantojot komandu XGROUP CREATE, kā parādīts zemāk.

XGROUP izveido mystream mygroup $ MKSTREAM

Tāpat kā ar XREAD, $ zīme komandas beigās liek straumei no šī laika uz priekšu piegādāt tikai jaunus datus. Alternatīvā opcija ir 0 vai cits ID no straumes ieraksta. Izmantojot 0, straume piegādās visus datus no straumes sākuma.

MKSTREAM izveido jaunu straumi, šajā gadījumā mystream, ja tāda vēl nav.

Redis Stream datu lasīšana un pārvaldīšana

Pieņemsim, ka jums ir Redis straume (mystream), un jūs jau esat izveidojis patērētāju grupu (mygroup), kā parādīts iepriekš. Tagad varat pievienot vienumus ar nosaukumiem a, b, c, d, e, kā parādīts šajā piemērā.

XADD mystream * nosaukums a

Palaidot šo komandu nosaukumiem no a līdz e, tiks aizpildīts Redis Stream, mystream un patērētāju grupas mystream neizlietotais saraksts. Tas ir parādīts 4. attēlā.

Redis Labs

Šeit jūs varat redzēt, ka patērētāji Alise un Bobs vēl nav sākuši darbu. Lietotne A patērē datus, izmantojot patērētāju Alisi, savukārt lietotne B - datus caur Bobu.

Redis Streams datu patēriņš

Komanda datu nolasīšanai no grupas ir XREADGROUP. Mūsu piemērā, kad lietotne A sāk apstrādāt datus, tā aicina patērētāju (Alisi) ielādēt datus, kā norādīts:

Mana grupa GRUPA 2 Alise STREAMS mystream>

Līdzīgi App B nolasa datus, izmantojot Bobu, šādi:

Grupas XREADGROUP GROUP 2 GRUPA Bobs STREAMS mystream>

Īpašais raksturs> beigās liek Redis Streams ielādēt tikai tos datu ierakstus, kuri netiek piegādāti citiem patērētājiem. Ņemiet vērā arī to, ka divi patērētāji neizmantos vienus un tos pašus datus, kā rezultātā dati no neizmantotā saraksta tiks pārvietoti uz Alisi un Bobu, kā parādīts 5. attēlā.

Redis Labs

Apstrādāto ziņojumu noņemšana no gaidošo ierakstu sarakstiem

Dati jūsu patērētāju gaidošo ierakstu sarakstos paliks tur, līdz A un App B apstiprinās Redis Streams, ka viņi ir veiksmīgi patērējuši datus. Tas tiek darīts, izmantojot komandu XACK. Piemēram, lietotne A pēc d un e patērēšanas atzīs šādi, kuru ID ir 1526569411111-0 un 1526569411112-0.

XACK mystream mygroup 1526569411111-0 1526569411112-0

XREADGROUP un XACK kombinācija ir analoga darījuma sākšanai un tā izdarīšanai, kas nodrošina datu drošību.

Pēc XACK palaišanas pieņemsim, ka App A izpildīta XREADGROUP, kā parādīts zemāk. Tagad datu struktūra izskatās kā 6. attēls.

Mana grupa GRUPA 2 Alise STREAMS mystream>
Redis Labs

Atgūšanās no neveiksmēm

Ja lietotne B tiek pārtraukta kļūmes dēļ, apstrādājot b un c, datu struktūra izskatās kā 7. attēls.

Redis Labs

Tagad jums ir divas iespējas:

1. Restartējiet lietotni B un atkārtoti ielādējiet datus no patērētāja (Bob).

Šajā gadījumā lietotnei B ir jāizlasa dati no jūsu patērētāja (Boba), izmantojot komandu XREADGROUP, taču ar vienu atšķirību. Tā vietā, lai beigās> lietotne B nokārtotu 0 (vai ID, kas ir zemāks par iepriekšējo apstrādāto datu ievadi). Atcerieties, ka> nosūta patērētājam jaunus datus no neizmantotā saraksta.

XREADGROUP GROUP mygroup COUNT 2 Bobs STREAMS mystream 0

Iepriekš minētā komanda izgūs datu ierakstus, kas jau ir saglabāti patērētāja Boba sarakstā. Tas neizgūs jaunus datus no neizmantotā saraksta. Pirms jaunu datu iegūšanas lietotne B varēja atkārtot visus patērētāja Boba datus.

2. Piespiediet Alisi pieprasīt visus datus no Boba un apstrādāt tos, izmantojot lietotni A.

Tas ir īpaši noderīgi, ja nevarat atkopt lietotni B mezgla, diska vai tīkla kļūmes dēļ. Šādos gadījumos jebkurš cits patērētājs (piemēram, Alise) var pieprasīt Boba datus un turpināt šo datu apstrādi, tādējādi novēršot pakalpojumu dīkstāvi. Lai pieprasītu Boba datus, jums jāpalaiž divas komandu kopas:

XPENDING mystream mygroup - + 10 Bobs

Tas iegūs visus gaidāmos Boba datu ierakstus. Opcijas - un + ienes visu diapazonu. Ja b un c bija attiecīgi ID 1526569411113-0 un 1526569411114-0, komanda, kas Boba datus pārvietos uz Alisi, ir šāda:

XCLAIM mystream mygroup Alice 0 1526569411113-0 1526569411114-0

Patērētāju grupas uztur patērēto datu datu pulksteni. Piemēram, kad lietotne B lasa b, pulkstenis sāk darboties, līdz Bobs saņem ACK. Izmantojot laika opciju komandā XCLAIM, varat ieteikt patērētāju grupai pārvietot tikai tos datus, kas ir dīkstāvē ilgāk par norādīto laiku. Varat arī to ignorēt, nokārtojot 0, kā parādīts iepriekšējā piemērā. Šo komandu rezultāts ir parādīts 8. attēlā. XCLAIM ir noderīgs arī tad, ja viens no jūsu patērētāju procesoriem ir lēns, kā rezultātā tiek izveidots nepārstrādātu datu uzkrājums.

Redis Labs

Iepriekšējā rakstā mēs apskatījām Redis Stream izmantošanas pamatus. Šajā rakstā mēs iedziļinājāmies nedaudz dziļāk un paskaidrojām, kad jāizmanto patērētāju grupas un kā tās darbojas. Redis Streams patērētāju grupas samazina jūsu slogu, pārvaldot datu nodalījumus, to dzīves ciklus un datu drošību. Turklāt patērētāju grupu paplašināšanas iespējas var dot labumu daudzām reāllaika lietojumprogrammām.

Gaidāmajā trešajā rakstā par Redis Streams es parādīšu, kā izstrādāt reāllaika klasifikācijas lietojumprogrammu, izmantojot Redis Streams un Lettuce, Redis Java Java atvērtā pirmkoda bibliotēku. Tikmēr jūs varat uzzināt vairāk, izmantojot Redis Streams apmācību projekta Redis vietnē.

Roshan Kumar ir vecākais produktu menedžerisRedis Labs. Viņam ir liela pieredze programmatūras izstrādē un tehnoloģiju mārketingā. Roshans ir strādājis Hewlett-Packard un daudzos veiksmīgos Silīcija ielejas jaunuzņēmumos, tostarp ZillionTV, Salorix, Alopa un ActiveVideo. Kā entuziasma pilns programmētājs viņš izstrādāja un izstrādāja tiešsaistes platformu mindzeal.com, kurā jaunajiem studentiem tika organizēti datorprogrammēšanas kursi. Roshans ir ieguvis bakalaura grādu datorzinātnēs un MBA Santa Clara universitātē.

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].