Kako koristiti potrošačke grupe u Redis Streams

Roshan Kumar viši je voditelj proizvoda u Redis Labs.

Redis Streams nova je struktura podataka, uvedena u Redis 5.0, koja vam omogućuje stvaranje i upravljanje protocima podataka. U prethodnom članku pokazao sam kako dodati podatke u stream i kako ih čitati na više načina. U ovom ću članku objasniti kako koristiti skupine potrošača u Redis Streams. Skupina potrošača način je na koji se tok poruka dijeli između više klijenata kako bi se ubrzala obrada ili olakšao teret sporijim potrošačima.

U savršenom svijetu i proizvođači podataka i potrošači rade istim tempom i nema gubitka podataka ili zaostataka u podacima. Nažalost, u stvarnom svijetu to nije slučaj. U gotovo svim slučajevima korištenja obrade toka podataka u stvarnom vremenu proizvođači i potrošači rade različitim brzinama. Uz to, postoji više vrsta potrošača, svaki sa svojim zahtjevima i brzinom obrade. Redis Streams rješava ovu potrebu s nizom značajki koje uvelike gravitiraju potpori potrošačima. Jedna od najvažnijih karakteristika je skupina potrošača.

Kada upotrebljavati potrošačku skupinu Redis Streams

Svrha potrošačkih grupa je proširiti vaš postupak potrošnje podataka. Razmotrimo jedan primjer - program za obradu slika. Rješenje zahtijeva tri glavne komponente:

  1. Producent (možda jedan ili više fotoaparata) koji snima i pohranjuje slike;
  2. Redis Stream koji sprema slike (u stream podatke) redoslijedom kojim stižu; i
  3. Procesor slike koji obrađuje svaku sliku. 
Redis laboratoriji

Pretpostavimo da vaš producent spremi 500 slika u sekundi, a procesor slika obrađuje samo 100 slika u sekundi u svom punom kapacitetu. Ova razlika u stopama stvorit će zaostatak i vaš procesor slika nikad neće moći sustići. Jednostavan način rješavanja ovog problema je pokretanje pet procesora za obradu slika (kao što je prikazano na slici 2), od kojih svaki obrađuje međusobno isključivi skup slika. To možete postići putem grupe potrošača, koja vam omogućuje da podijelite svoja radna opterećenja i usmjerite ih prema različitim potrošačima.

Redis laboratoriji

Potrošačka skupina čini više od particioniranja podataka - osigurava sigurnost podataka i omogućuje oporavak od katastrofe.

Kako radi potrošačka grupa Redis Streams

Potrošačka skupina je struktura podataka unutar Redis Streama. Kao što je prikazano na slici 3, o skupini potrošača možete razmišljati kao o zbirci popisa. Druga stvar koju treba zamisliti je popis predmeta koje ne konzumira nijedan potrošač - za našu raspravu nazovimo ovo „nepotrošenim popisom“. Kako podaci stižu u tok, oni se odmah guraju na nepotrošeni popis.

Redis laboratoriji

Skupina potrošača održava zaseban popis za svakog potrošača, obično s priloženom aplikacijom. Na slici 3, naše rješenje ima N identičnih aplikacija (aplikacija 1, aplikacija 2, ... aplikacija n) koje čitaju podatke putem potrošača 1, potrošača 2, odnosno potrošača n.

Kada aplikacija čita podatke pomoću naredbe XREADGROUP, određeni unosi podataka uklanjaju se s nepotrošenog popisa i guraju na popis unosa na čekanju koji pripada odgovarajućem potrošaču. Dakle, neće dva potrošača trošiti iste podatke.

Konačno, kada aplikacija obavijesti stream naredbom XACK, uklonit će stavku s popisa unosa na čekanju.

Sad kad sam objasnio osnove potrošačkih grupa, zaronimo dublje u to kako funkcionira ovaj životni ciklus podataka.

Stvaranje potrošačke grupe Redis Streams

Možete stvoriti novu grupu potrošača pomoću naredbe XGROUP CREATE, kao što je prikazano dolje.

XGROUP IZRADI mystream mygroup $ MKSTREAM

Kao i kod XREAD-a, znak $ na kraju naredbe govori streamu da isporučuje samo nove podatke od tog trenutka prema naprijed. Alternativna opcija je 0 ili drugi ID iz unosa streama. Kada koristite 0, stream će isporučiti sve podatke s početka streama.

MKSTREAM stvara novi stream, u ovom slučaju mystream, ako već ne postoji.

Čitanje i upravljanje podacima Redis Streama

Pretpostavimo da imate Redis Stream (mystream) i već ste stvorili potrošačku skupinu (mygroup) kao što je prikazano gore. Sada možete dodati stavke s imenima a, b, c, d, e kao u sljedećem primjeru.

XADD mystream * ime a

Pokretanjem ove naredbe za imena od a do e popunit će Redis Stream, mystream i nepotrošeni popis potrošačke grupe mystream. To je prikazano na slici 4.

Redis laboratoriji

Ovdje možete vidjeti da potrošači Alice i Bob još nisu započeli posao. Aplikacija A troši podatke putem potrošača Alice, dok aplikacija B troši podatke putem Boba.

Potrošnja podataka Redis Streamova

Naredba za čitanje podataka iz grupe je XREADGROUP. U našem primjeru, kada aplikacija A započne obrađivati ​​podatke, poziva potrošača (Alice) da dohvati podatke, kao u:

XREADGROUP GROUP mygroup COUNT 2 Alice STREAMING mystream>

Slično tome, aplikacija B podatke čita putem Boba, kako slijedi:

XREADGROUP GROUP mygroup COUNT 2 Bob STREAMS mystream>

Posebni znak> na kraju govori Redis Streamsu da preuzima samo unose podataka koji se ne isporučuju drugim potrošačima. Također imajte na umu da nijedna dva potrošača neće trošiti iste podatke, što će rezultirati premještanjem podataka s nepotrošenog popisa na Alice i Bob, kao što je prikazano na slici 5.

Redis laboratoriji

Uklanjanje obrađenih poruka sa popisa unosa na čekanju

Podaci na popisima unosa na čekanju vaših potrošača ostat će tamo dok App A i App B ne priznaju Redis Streamsu da su uspješno potrošili podatke. To se radi pomoću naredbe XACK. Na primjer, aplikacija A prepoznat će sljedeće nakon konzumiranja d i e, koji imaju ID-ove 1526569411111-0 i 1526569411112-0.

XACK mystream mygroup 1526569411111-0 1526569411112-0

Kombinacija XREADGROUP i XACK analogna je pokretanju i izvršavanju transakcije, što osigurava sigurnost podataka. 

Nakon pokretanja XACK-a, pretpostavimo da je aplikacija A izvršena XREADGROUP kao što je prikazano dolje. Sada struktura podataka izgleda kao na slici 6.

XREADGROUP GROUP mygroup COUNT 2 Alice STREAMING mystream>
Redis laboratoriji

Oporavak od neuspjeha

Ako se aplikacija B prekine zbog kvara tijekom obrade b i c, tada bi struktura podataka izgledala kao na slici 7.

Redis laboratoriji

Sada su vam ostale dvije mogućnosti:

1. Ponovo pokrenite aplikaciju B i ponovo učitajte podatke od potrošača (Bob).

U ovom slučaju, aplikacija B mora pročitati podatke vašeg potrošača (Boba) pomoću naredbe XREADGROUP, ali s jednom razlikom. Umjesto> na kraju, aplikacija B dodala bi 0 (ili ID niži od prethodnog unosa podataka koji je obrađen). Zapamtite da> potrošaču šalje nove podatke s nepotrošenog popisa.

XREADGROUP GROUP mygroup COUNT 2 Bob STREAMS mystream 0

Gornja naredba dobit će unose podataka koji su već pohranjeni na popisu za potrošača Boba. Neće dohvatiti nove podatke s nepotrošenog popisa. Aplikacija B mogla bi pregledati sve podatke u potrošačkom Bobu prije dohvaćanja novih podataka.

2. Prisilite Alice da zatraži sve podatke od Boba i obradi ih putem aplikacije A.

Ovo je osobito korisno ako ne možete oporaviti aplikaciju B zbog kvara čvora, diska ili mreže. U takvim slučajevima, bilo koji drugi potrošač (poput Alice) može zatražiti Bobove podatke i nastaviti obrađivati ​​te podatke, čime se sprječava zastoj usluge. Da biste zatražili Bobove podatke, morate pokrenuti dva skupa naredbi:

XPENDING mystream mygroup - + 10 Bob

Ovo će dohvatiti sve unose podataka na čekanju za Boba. Opcije - i + dohvaćanje cijelog raspona. Ako su b i c imali ID-ove 1526569411113-0, odnosno 1526569411114-0, naredba koja će Bobove podatke premjestiti u Alice je sljedeća:

XCLAIM mystream mygroup Alice 0 1526569411113-0 1526569411114-0

Skupine potrošača održavaju radni sat za podatke na popisu konzumiranih. Na primjer, kada aplikacija B pročita b, sat se uključuje dok Bob ne primi ACK. Opcijom vremena u naredbi XCLAIM možete poručiti grupi potrošača da premješta samo podatke koji su neaktivni duže od određenog vremena. To također možete zanemariti dodavanjem 0 kao što je prikazano u gornjem primjeru. Rezultat ovih naredbi prikazan je na slici 8. XCLAIM također dobro dođe kada je jedan od vaših potrošačkih procesora spor, što rezultira zaostatkom neprerađenih podataka.

Redis laboratoriji

U prethodnom smo članku pokrili osnove upotrebe Redis Streamova. Ušli smo malo dublje u ovaj članak i objasnili kada koristiti skupine potrošača i kako oni rade. Grupe potrošača u Redis Streams smanjuju vaš teret kada je riječ o upravljanju particijama podataka, njihovim životnim ciklusima i sigurnosti podataka. Osim toga, mogućnosti smanjenja potrošačkih skupina mogu koristiti mnogim aplikacijama u stvarnom vremenu.

U predstojećem trećem članku o Redis Streams, pokazat ću kako razviti aplikaciju za klasifikaciju u stvarnom vremenu koristeći Redis Streams i Lettuce, Java otvorenu biblioteku za Redis. U međuvremenu, možete saznati više radeći kroz tutorial za Redis Streams na web stranici projekta Redis. 

Roshan Kumar viši je voditelj proizvoda u  Redis Labs . Ima veliko iskustvo u razvoju softvera i tehnološkom marketingu. Roshan je radio u Hewlett-Packardu i mnogim uspješnim startup tvrtkama u Silicijskoj dolini, uključujući ZillionTV, Salorix, Alopa i ActiveVideo. Kao entuzijastični programer, dizajnirao je i razvio mindzeal.com, internetsku platformu koja organizira tečajeve računalnog programiranja za mlade studente. Roshan je diplomirao računalne znanosti i stekao MBA na Sveučilištu Santa Clara.

-

New Tech Forum pruža mjesto za istraživanje i raspravu o novonastaloj tehnologiji poduzeća u neviđenoj dubini i širini. Izbor je subjektivan, zasnovan na našem odabiru tehnologija za koje vjerujemo da su važne i da najviše zanimaju čitatelje. ne prihvaća marketinške kolaterale za objavljivanje i zadržava pravo uređivanja cjelokupnog sadržaja. Pošaljite sve upite na  [email protected] .