Programiranje

Kako uporabljati skupine potrošnikov v Redis Streams

Roshan Kumar je višja produktna vodja v laboratorijih Redis.

Redis Streams je nova podatkovna struktura, predstavljena v Redis 5.0, ki vam omogoča ustvarjanje in upravljanje podatkovnih tokov. V prejšnjem članku sem pokazal, kako dodati podatke v tok in kako jih prebrati na več načinov. V tem članku bom razložil, kako uporabljati skupine potrošnikov v Redis Streams. Skupina potrošnikov je način, kako razdeliti tok sporočil med več odjemalcev, da pospeši obdelavo ali olajša obremenitev za počasnejše potrošnike.

V popolnem svetu tako proizvajalci podatkov kot potrošniki delujejo enako hitro in ni izgub podatkov ali zaostankov. Na žalost v resničnem svetu ni tako. V skoraj vseh primerih uporabe podatkov za obdelavo podatkovnega toka v realnem času proizvajalci in potrošniki delajo z različno hitrostjo. Poleg tega obstaja več kot en tip potrošnikov, vsak s svojimi zahtevami in hitrostjo obdelave. Redis Streams to potrebo obravnava z naborom funkcij, ki močno teži k podpori potrošnikom. Ena najpomembnejših lastnosti je skupina potrošnikov.

Kdaj uporabiti skupino potrošnikov Redis Streams

Namen skupin potrošnikov je razširiti postopek porabe podatkov. Oglejmo si en primer - program za obdelavo slik. Rešitev zahteva tri glavne komponente:

  1. Producent (morda ena ali več kamer), ki zajema in shranjuje slike;
  2. Redis Stream, ki shrani slike (v shrambo podatkov v toku) v vrstnem redu, kot so prispele; in
  3. Slikovni procesor, ki obdela vsako sliko.
Redis Labs

Recimo, da vaš producent shrani 500 slik na sekundo, procesor slik pa v polni zmogljivosti obdela samo 100 slik na sekundo. Ta razlika v hitrosti bo ustvarila zaostanke in vaš slikovni procesor nikoli ne bo mogel nadoknaditi. Enostaven način za reševanje te težave je zagnati pet slikovnih procesorjev (kot je prikazano na sliki 2), od katerih vsak obdela vzajemno izključen nabor slik. To lahko dosežete s skupino potrošnikov, ki vam omogoča, da razdelite svoje delovne obremenitve in jih usmerite med različne potrošnike.

Redis Labs

Potrošniška skupina naredi več kot le razdelitev podatkov - zagotavlja varnost podatkov in omogoča obnovo po katastrofi.

Kako deluje skupina potrošnikov Redis Streams

Potrošniška skupina je podatkovna struktura v toku Redis. Kot je prikazano na sliki 3, lahko o skupini potrošnikov razmišljate kot o zbirki seznamov. Druga stvar, ki si jo lahko predstavljamo, je seznam izdelkov, ki jih potrošniki ne porabijo - za našo razpravo naj to imenujemo "nepotrošeni seznam". Ko podatki prispejo v tok, se takoj potisnejo na neuporabljeni seznam.

Redis Labs

Skupina potrošnikov vodi ločen seznam za vsakega potrošnika, običajno s priloženo vlogo. Na sliki 3 je naša rešitev N enake aplikacije (App 1, App 2,…. App n), ki berejo podatke prek Consumer 1, Consumer 2,… Consumer n.

Ko aplikacija bere podatke z ukazom XREADGROUP, se določeni vnosi podatkov odstranijo s seznama brez porabe in potisnejo na seznam čakajočih vnosov, ki pripada zadevnemu potrošniku. Tako nobena dva potrošnika ne bosta uživala enakih podatkov.

Nazadnje, ko aplikacija obvesti tok z ukazom XACK, bo izdelek odstranila s seznama čakajočih vnosov potrošnika.

Zdaj, ko sem razložil osnove potrošniških skupin, poglobimo v to, kako deluje ta življenjski cikel podatkov.

Ustvarjanje potrošniške skupine Redis Streams

Novo skupino potrošnikov lahko ustvarite z ukazom XGROUP CREATE, kot je prikazano spodaj.

XGROUP USTVARI mystream mygroup $ MKSTREAM

Tako kot pri XREAD, znak $ na koncu ukaza sporoča toku, naj od tega trenutka naprej posreduje samo nove podatke. Nadomestna možnost je 0 ali drug ID iz vnosa v toku. Ko uporabljate 0, bo tok dostavil vse podatke z začetka toka.

MKSTREAM ustvari nov tok, v tem primeru mystream, če že ne obstaja.

Branje in upravljanje podatkov Redis Stream

Predpostavimo, da imate Redis Stream (mystream) in ste že ustvarili skupino potrošnikov (mygroup), kot je prikazano zgoraj. Zdaj lahko dodate elemente z imeni a, b, c, d, e kot v naslednjem primeru.

XADD mystream * ime a

Zagon tega ukaza za imena od a do e bo zapolnil tok Redis, moj tok in neuporabljeni seznam potrošniške skupine moj tok. To je prikazano na sliki 4.

Redis Labs

Tu lahko vidite, da potrošnika Alice in Bob še nista začela delati. Aplikacija A porablja podatke prek potrošnika Alice, aplikacija B pa podatke prek Boba.

Poraba podatkov Redis Streams

Ukaz za branje podatkov iz skupine je XREADGROUP. V našem primeru, ko aplikacija A začne z obdelavo podatkov, pokliče potrošnika (Alice), da pridobi podatke, kot v:

XREADGROUP GROUP mygroup COUNT 2 Alice STREAMS mystream>

Podobno aplikacija B podatke prebere prek Boba, kot sledi:

XREADGROUP GROUP mygroup COUNT 2 Bob STREAMS mystream>

Posebni znak> na koncu pove Redis Streamsu, da pridobi samo vnose podatkov, ki niso dostavljeni nobenemu drugemu potrošniku. Upoštevajte tudi, da noben potrošnik ne bo porabil enakih podatkov, kar bo povzročilo premik podatkov s seznama, ki ni bil porabljen, na Alice in Bob, kot je prikazano na sliki 5.

Redis Labs

Odstranjevanje obdelanih sporočil s čakajočih seznamov vnosov

Podatki na čakajočih seznamih vnosov vaših potrošnikov bodo tam ostali, dokler App A in App B Redis Streams ne potrdita, da sta podatke uspešno porabila. To naredimo z ukazom XACK. Na primer, aplikacija A po zaužitju d in e, ki imata ID 1526569411111-0 in 1526569411112-0, potrdi naslednje.

XACK mystream mygroup 1526569411111-0 1526569411112-0

Kombinacija XREADGROUP in XACK je analogna zagonu transakcije in njenemu izvrševanju, kar zagotavlja varnost podatkov.

Po zagonu XACK-a predpostavimo, da je aplikacija A izvedla XREADGROUP, kot je prikazano spodaj. Zdaj je struktura podatkov videti kot slika 6.

XREADGROUP GROUP mygroup COUNT 2 Alice STREAMS mystream>
Redis Labs

Okrevanje po okvarah

Če se aplikacija B prekine zaradi okvare med obdelavo b in c, bi bila struktura podatkov videti kot slika 7.

Redis Labs

Zdaj imate dve možnosti:

1. Znova zaženite aplikacijo B in znova naložite podatke od potrošnika (Bob).

V tem primeru mora aplikacija B prebrati podatke vašega potrošnika (Bob) z ukazom XREADGROUP, vendar z eno razliko. Namesto> na koncu bi aplikacija B posredovala 0 (ali ID nižji od prejšnjega vnosa podatkov, ki je bil obdelan). Ne pozabite, da> potrošniku pošlje nove podatke z neuporabljenega seznama.

XREADGROUP GROUP mygroup COUNT 2 Bob STREAMS mystream 0

Zgornji ukaz bo pridobil vnose podatkov, ki so že shranjeni na seznamu za potrošnika Bob. Ne bo pridobil novih podatkov s seznama, ki ni porabljen. Aplikacija B bi lahko pred pridobivanjem novih podatkov ponovila vse podatke v potrošniškem Bobu.

2. Prisilite Alice, da zahteva vse podatke od Boba in jih obdela prek aplikacije A.

To je še posebej koristno, če aplikacije B ne morete obnoviti zaradi okvare vozlišča, diska ali omrežja. V takih primerih lahko kateri koli drug potrošnik (na primer Alice) zahteva Bobove podatke in nadaljuje z obdelavo teh podatkov ter tako prepreči izpad storitve. Če želite zahtevati Bobove podatke, morate zagnati dva sklopa ukazov:

XPENDING mystream mygroup - + 10 Bob

S tem bodo pridobljeni vsi čakajoči vnosi podatkov za Boba. Možnosti - in + prinese celoten obseg. Če sta imela b in c ID 1526569411113-0 oziroma 1526569411114-0, je ukaz, ki bo Bobove podatke premaknil v Alice, naslednji:

XCLAIM mystream mygroup Alice 0 1526569411113-0 1526569411114-0

Skupine potrošnikov vzdržujejo tekočo uro za podatke na seznamu porabljenih. Na primer, ko aplikacija B prebere b, se ura sproži, dokler Bob ne prejme ACK. Z možnostjo časa v ukazu XCLAIM lahko skupini potrošnikov naročite, naj premakne samo podatke, ki so nedejavni dlje od določenega časa. Tega lahko tudi prezrete tako, da prenesete 0, kot je prikazano v zgornjem primeru. Rezultat teh ukazov je prikazan na sliki 8. XCLAIM je prav priročen tudi, kadar je eden od vaših potrošniških procesorjev počasen, kar povzroči zaostanek nepredelanih podatkov.

Redis Labs

V prejšnjem članku smo zajeli osnove uporabe Redis Streams. V tem članku smo se poglobili in razložili, kdaj uporabiti skupine potrošnikov in kako delujejo. Skupine potrošnikov v Redis Streams zmanjšajo vaše breme pri upravljanju podatkovnih particij, njihovega življenjskega cikla in varnosti podatkov. Poleg tega lahko zmogljivosti skupin potrošnikov povečajo veliko aplikacij v realnem času.

V prihodnjem tretjem članku o Redis Streams bom predstavil, kako razviti aplikacijo za klasifikacijo v realnem času z uporabo Redis Streams in Lettuce, odprtokodne knjižnice za Redis, ki temelji na Javi. Medtem lahko več izveste z vadnico Redis Streams na spletnem mestu projekta Redis.

Roshan Kumar je višja vodja izdelkov priRedis Labs. Ima bogate izkušnje na področju razvoja programske opreme in trženja tehnologije. Roshan je delal v Hewlett-Packardu in številnih uspešnih zagonskih podjetjih v Silicijevi dolini, vključno z ZillionTV, Salorix, Alopa in ActiveVideo. Kot navdušen programer je zasnoval in razvil mindzeal.com, spletno platformo, ki gosti tečaje računalniškega programiranja za mlade študente. Roshan je diplomiral iz računalništva in MBA na univerzi Santa Clara.

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