Programavimas

Kaip naudotis vartotojų grupėmis „Redis Streams“

Roshanas Kumaras yra „Redis Labs“ vyresnysis produktų vadovas.

„Redis Streams“ yra nauja duomenų struktūra, pristatyta „Redis 5.0“, leidžianti kurti ir valdyti duomenų srautus. Ankstesniame straipsnyje aš parodžiau, kaip pridėti duomenis prie srauto ir kaip juos skaityti keliais būdais. Šiame straipsnyje paaiškinsiu, kaip naudotis vartotojų grupėmis „Redis Streams“. Vartotojų grupė yra būdas suskaidyti pranešimų srautą keliems klientams, kad pagreitėtų apdorojimas arba palengvėtų apkrova lėtesniems vartotojams.

Tobulame pasaulyje tiek duomenų gamintojai, tiek vartotojai dirba tuo pačiu tempu ir nėra duomenų praradimo ar atsilikimo. Deja, realiame pasaulyje taip nėra. Beveik visais duomenų srautų apdorojimo realiuoju laiku naudojimo atvejais gamintojai ir vartotojai dirba skirtingu greičiu. Be to, yra daugiau nei vienos rūšies vartotojai, kurių kiekvienas turi savo reikalavimus ir apdorojimo tempą. „Redis Streams“ patenkina šį poreikį naudodamas funkcijų rinkinį, kuris labai remia vartotojus. Viena svarbiausių jos savybių yra vartotojų grupė.

Kada naudoti „Redis Streams“ vartotojų grupę

Vartotojų grupių tikslas yra išplėsti jūsų duomenų vartojimo procesą. Panagrinėkime vieną pavyzdį - vaizdo apdorojimo programą. Sprendimui reikalingi trys pagrindiniai komponentai:

  1. Gamintojas (galbūt viena ar kelios kameros), kuris fiksuoja ir saugo vaizdus;
  2. „Redis Stream“, kuris išsaugo vaizdus (srauto duomenų saugykloje) jų atvykimo tvarka; ir
  3. Vaizdo procesorius, kuris apdoroja kiekvieną vaizdą.
„Redis Labs“

Tarkime, kad jūsų gamintojas išsaugo 500 vaizdų per sekundę, o vaizdo procesorius visu pajėgumu apdoroja tik 100 vaizdų per sekundę. Šis tarifų skirtumas sukurs neatsilikimą ir jūsų vaizdo procesorius niekada negalės pasivyti. Lengvas būdas išspręsti šią problemą yra paleisti penkis vaizdo procesorius (kaip parodyta 2 paveiksle), kurių kiekvienas apdoroja vienas kitą išskiriančių vaizdų rinkinį. Tai galite pasiekti per vartotojų grupę, kuri leidžia suskirstyti savo darbo krūvius ir nukreipti juos skirtingiems vartotojams.

„Redis Labs“

Vartotojų grupė daro daugiau nei duomenų skaidymas - tai užtikrina duomenų saugumą ir leidžia atkurti nelaimę.

Kaip veikia „Redis Streams“ vartotojų grupė

Vartotojų grupė yra „Redis Stream“ duomenų struktūra. Kaip parodyta 3 paveiksle, galite galvoti apie vartotojų grupę kaip apie sąrašų rinkinį. Kitas dalykas, kurį reikia įsivaizduoti, yra daiktų, kurių nevartoja vartotojai, sąrašas - mūsų diskusijai pavadinkime tai „nenaudojamu sąrašu“. Kai duomenys patenka į srautą, jie nedelsiant perkeliami į nenaudojamą sąrašą.

„Redis Labs“

Vartotojų grupė tvarko atskirą kiekvieno vartotojo sąrašą, paprastai su pridedama paraiška. 3 paveiksle mūsų sprendimas yra N identiškos programos (1 programa, 2 programa,…. „App n“), kurios duomenis skaito atitinkamai per „Consumer 1“, „Consumer 2“ ir „Consumer n“.

Kai programa skaito duomenis naudodama komandą XREADGROUP, konkretūs duomenų įrašai pašalinami iš nenaudojamo sąrašo ir įtraukiami į laukiančių įrašų sąrašą, kuris priklauso atitinkamam vartotojui. Taigi du vartotojai nenaudos tų pačių duomenų.

Galiausiai, kai programa praneša srautui naudodama komandą XACK, ji pašalins elementą iš laukiančių vartotojo įrašų sąrašo.

Dabar, kai paaiškinau vartotojų grupių pagrindus, įsigilinkime į tai, kaip veikia šis duomenų gyvavimo ciklas.

„Redis Streams“ vartotojų grupės sukūrimas

Galite sukurti naują vartotojų grupę naudodami komandą XGROUP CREATE, kaip parodyta žemiau.

„XGROUP“ sukuria „mystream“ grupę „$ MKSTREAM“

Kaip ir naudojant XREAD, komandos pabaigoje $ ženklas liepia srautui pateikti tik naujus duomenis nuo to laiko momento. Alternatyvi parinktis yra 0 arba kitas ID iš srauto įrašo. Naudojant 0, srautas pateiks visus duomenis nuo srauto pradžios.

MKSTREAM sukuria naują srautą, šiuo atveju „mystream“, jei jo dar nėra.

Redis Stream duomenų skaitymas ir tvarkymas

Tarkime, kad turite „Redis Stream“ („mystream“) ir jau sukūrėte vartotojų grupę („mygroup“), kaip parodyta aukščiau. Dabar galite pridėti elementus pavadinimais a, b, c, d, e, kaip parodyta šiame pavyzdyje.

XADD mystream * pavadinimas a

Vykdydami šią komandą vardams nuo a iki e, bus užpildytas „Redis Stream“, „mystream“ ir nenaudojamas vartotojų grupės „mystream“ sąrašas. Tai pavaizduota 4 paveiksle.

„Redis Labs“

Čia galite pamatyti, kad vartotojai Alice ir Bob dar nepradėjo savo darbo. Programa A duomenis vartoja per vartotoją Alice, o B programa - Bobą.

Redis Stream duomenų naudojimas

Komanda nuskaityti duomenis iš grupės yra XREADGROUP. Mūsų pavyzdyje, kai A programa pradeda apdoroti duomenis, ji kviečia vartotoją (Alice) gauti duomenis, kaip nurodyta:

„XREADGROUP GROUP“ grupės 2 GRUPĖS Alice STREAMS mystream>

Panašiai „App B“ nuskaito duomenis per Bobą taip:

XREADGROUP GROUP mygroup COUNT 2 Bob STREAMS mystream>

Specialus simbolis> pabaigoje liepia „Redis Streams“ gauti tik tuos duomenų įrašus, kurie nėra pristatomi kitiems vartotojams. Taip pat atkreipkite dėmesį, kad du vartotojai nevartos tų pačių duomenų, todėl duomenys iš nenaudojamo sąrašo bus perkelti į Alice ir Bob, kaip parodyta 5 paveiksle.

„Redis Labs“

Apdorotų pranešimų pašalinimas iš laukiančių įrašų sąrašų

Duomenys laukiančiuose jūsų vartotojų įrašų sąrašuose išliks tol, kol „A“ ir „B“ programos „Redis Streams“ patvirtins, kad jie sėkmingai suvartojo duomenis. Tai atliekama naudojant komandą XACK. Pvz., A programa, suvartojusi d ir e, kurių ID yra 1526569411111-0 ir 1526569411112-0, pripažintų taip.

„XACK mystream mygroup“ 1526569411111-0 1526569411112-0

„XREADGROUP“ ir „XACK“ derinys yra analogiškas operacijos pradžiai ir įvykdymui, o tai užtikrina duomenų saugumą.

Paleidę „XACK“, tarkime, kad „App A“ vykdė „XREADGROUP“, kaip parodyta žemiau. Dabar duomenų struktūra atrodo kaip 6 paveiksle.

„XREADGROUP GROUP“ grupės 2 GRUPĖS Alice STREAMS mystream>
„Redis Labs“

Atsigauna po nesėkmių

Jei programa B bus nutraukta dėl gedimo apdorojant b ir c, duomenų struktūra atrodys kaip 7 paveiksle.

„Redis Labs“

Dabar jums lieka dvi galimybės:

1. Perkraukite „B“ programą ir iš naujo įkelkite duomenis iš vartotojo (Bobo).

Tokiu atveju „App B“ turi skaityti duomenis iš jūsų vartotojo (Bobo) naudodama komandą XREADGROUP, tačiau su vienu skirtumu. Vietoj> pabaigoje „App B“ perduotų 0 (arba ID, mažesnį nei ankstesnis apdorotas duomenų įvedimas). Atminkite, kad> vartotojui siunčia naujus duomenis iš nenaudojamo sąrašo.

XREADGROUP GROUP mygroup COUNT 2 Bob STREAMS mystream 0

Pirmiau nurodyta komanda nuskaitys duomenų įrašus, kurie jau saugomi vartotojo Bobo sąraše. Ji nepaims naujų duomenų iš nenaudojamo sąrašo. Prieš gaudama naujus duomenis, B programa galėjo pakartoti visus vartotojo Bobo duomenis.

2. Priverskite Alisą reikalauti iš Bobo visų duomenų ir juos apdoroti per A programą.

Tai ypač naudinga, jei negalite atkurti „B“ programos dėl mazgo, disko ar tinklo gedimo. Tokiais atvejais bet kuris kitas vartotojas (pvz., Alice) gali reikalauti Bobo duomenų ir tęsti tų duomenų tvarkymą, taip išvengdamas paslaugos prastovos. Norėdami pareikšti teises į Bobo duomenis, turite paleisti du komandų rinkinius:

XPENDING mystream mygroup - + 10 Bobas

Taip bus gauti visi laukiantys Bobo duomenų įrašai. Parinktys - ir + pareikšti visą diapazoną. Jei b ir c turėjo atitinkamai ID 1526569411113-0 ir 1526569411114-0, komanda, perkelianti Bobo duomenis į Alice, yra tokia:

„XCLAIM mystream mygroup Alice 0“ 1526569411113-0 1526569411114-0

Vartotojų grupės palaiko suvartotų duomenų duomenų laikrodį. Pvz., Kai programa B skaito b, laikrodis spusteli, kol Bobas gauna ACK. Naudodami laiko parinktį komandoje XCLAIM, galite nurodyti vartotojų grupei perkelti tik tuos duomenis, kurie neveikia ilgiau nei nurodytas laikas. Taip pat galite to nepaisyti perduodami 0, kaip parodyta aukščiau pateiktame pavyzdyje. Šių komandų rezultatas pavaizduotas 8 paveiksle. „XCLAIM“ taip pat praverčia, kai vienas iš jūsų vartotojų procesorių yra lėtas, todėl susidaro neperdirbtų duomenų.

„Redis Labs“

Ankstesniame straipsnyje mes aptarėme pagrindus, kaip naudoti „Redis Stream“. Šiame straipsnyje mes nuodugniau paaiškinome, kada naudoti vartotojų grupes ir kaip jie veikia. „Redis Streams“ vartotojų grupės sumažina jūsų naštą tvarkant duomenų skaidinius, jų gyvavimo ciklus ir duomenų saugumą. Be to, vartotojų grupių išplėtimo galimybės gali būti naudingos daugeliui programų realiuoju laiku.

Būsimame trečiame straipsnyje apie „Redis Streams“ pademonstruosiu, kaip sukurti realaus laiko klasifikavimo programą naudojant „Redis Streams“ ir „Lettuce“, „Java“ pagrindu veikiančią „Redis“ atvirojo kodo biblioteką. Tuo tarpu galite sužinoti daugiau dirbdami „Redis Streams“ pamokoje projekto „Redis“ svetainėje.

Roshan Kumar yra vyresnysis produktų vadovas„Redis Labs“. Jis turi didelę programinės įrangos kūrimo ir technologijų rinkodaros patirtį. Roshanas dirbo „Hewlett-Packard“ ir daugelyje sėkmingų Silicio slėnio startuolių, įskaitant „ZillionTV“, „Salorix“, „Alopa“ ir „ActiveVideo“. Būdamas entuziastingas programuotojas, jis sukūrė ir sukūrė internetinę platformą „mindzeal.com“, kurioje rengiami kompiuterių programavimo kursai jauniems studentams. Roshan turi informatikos bakalauro laipsnį ir MBA Santa Clara universitete.

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