Ohjelmointi

Kuinka käyttää Redis Streamin kuluttajaryhmiä

Roshan Kumar on Redis Labsin vanhempi tuotepäällikkö.

Redis Streams on uusi tietorakenne, joka on otettu käyttöön Redis 5.0: ssa, jonka avulla voit luoda ja hallita datavirtoja. Edellisessä artikkelissa osoitin, kuinka lisätä tietoja streamiin ja kuinka lukea tietoja monin tavoin. Tässä artikkelissa selitän kuinka käyttää Redis Streamin kuluttajaryhmiä. Kuluttajaryhmä on tapa jakaa viestivirta useiden asiakkaiden kesken käsittelyn nopeuttamiseksi tai hitaamman kuluttajan kuormituksen keventämiseksi.

Täydellisessä maailmassa sekä datan tuottajat että kuluttajat työskentelevät samassa tahdissa, eikä tietoja menetetä tai viivästy. Valitettavasti näin ei ole todellisessa maailmassa. Lähes kaikissa reaaliaikaisissa tietovirran käsittelytapauksissa tuottajat ja kuluttajat työskentelevät eri nopeuksilla. Lisäksi on olemassa useampi kuin yksi kuluttajatyyppi, jokaisella on omat vaatimukset ja käsittelynopeus. Redis Streams vastaa tähän tarpeeseen ominaisuusjoukolla, joka painottuu voimakkaasti kuluttajien tukemiseen. Yksi sen tärkeimmistä ominaisuuksista on kuluttajaryhmä.

Milloin käyttää Redis Streams -ryhmää

Kuluttajaryhmien tarkoituksena on laajentaa tietojesi kulutusprosessia. Tarkastellaan yhtä esimerkkiä - kuvankäsittelysovellusta. Ratkaisu vaatii kolme pääkomponenttia:

  1. Tuottaja (ehkä yksi tai useampi kamera), joka sieppaa ja tallentaa kuvia;
  2. Redis Stream, joka tallentaa kuvat (stream-tietovarastoon) saapumisjärjestyksessä; ja
  3. Kuvaprosessori, joka käsittelee jokaisen kuvan.
Redis Labs

Oletetaan, että tuottaja tallentaa 500 kuvaa sekunnissa, ja kuvaprosessori käsittelee vain 100 kuvaa sekunnissa täydellä kapasiteetillaan. Tämä nopeusero aiheuttaa myöhästymisen, eikä kuvaprosessorisi koskaan pysty saamaan kiinni. Helppo tapa ratkaista tämä ongelma on ajaa viisi kuvaprosessoria (kuten kuvassa 2 on esitetty), joista kukin käsittelee toisensa poissulkevaa kuvajoukkoa. Voit saavuttaa tämän kuluttajaryhmän kautta, jonka avulla voit jakaa työmäärät ja reitittää ne eri kuluttajille.

Redis Labs

Kuluttajaryhmä tekee enemmän kuin tietojen osiointi - se varmistaa tietoturvan ja mahdollistaa palautumisen katastrofeista.

Kuinka Redis Streams -ryhmä toimii

Kuluttajaryhmä on Redis Streamin tietorakenne. Kuten kuvassa 3 on esitetty, voit ajatella kuluttajaryhmää luetteloiden kokoelmana. Toinen ajateltavissa oleva asia on luettelo tuotteista, joita kukaan kuluttaja ei kuluta - kutsumme tätä keskustelussamme "kuluttamattomaksi luetteloksi". Kun tiedot saapuvat streamiin, ne työnnetään välittömästi kuluttamattomaan luetteloon.

Redis Labs

Kuluttajaryhmä ylläpitää erillistä luetteloa kullekin kuluttajalle, tyypillisesti sovelluksen mukana. Kuvassa 3 ratkaisumme on N identtiset sovellukset (sovellus 1, sovellus 2,…. sovellus n), jotka lukevat tietoja kuluttaja 1: n, kuluttaja 2: n tai… kuluttaja n: n kautta.

Kun sovellus lukee tietoja XREADGROUP-komennolla, tietyt tietueet poistetaan kuluttamattomasta luettelosta ja työnnetään kulloinkin olevalle kuluttajalle kuuluvaan odottavien merkintöjen luetteloon. Kukaan kuluttaja ei siis kuluta samoja tietoja.

Lopuksi, kun sovellus ilmoittaa streamista XACK-komennolla, se poistaa kohteen kuluttajan odottavien merkintöjen luettelosta.

Nyt kun olen selittänyt kuluttajaryhmien perusteet, tutkitaan tarkemmin, miten tämän tiedon elinkaari toimii.

Redis Streamin kuluttajaryhmän luominen

Voit luoda uuden kuluttajaryhmän käyttämällä komentoa XGROUP CREATE, kuten alla on esitetty.

XGROUP LUO mystream-ryhmäni $ MKSTREAM

Kuten XREAD: n kohdalla, $ -merkki komennon lopussa käskee virtaa toimittamaan vain uusia tietoja tuosta ajankohdasta eteenpäin. Vaihtoehtoinen vaihtoehto on 0 tai jokin muu tunnus stream-syötteestä. Kun käytetään 0, virta lähettää kaikki tiedot virran alusta.

MKSTREAM luo uuden virran, tässä tapauksessa mystream, jos sitä ei vielä ole olemassa.

Redis Stream -tietojen lukeminen ja hallinta

Oletetaan, että sinulla on Redis Stream (mystream) ja olet jo luonut kuluttajaryhmän (mygroup), kuten yllä on esitetty. Voit nyt lisätä kohteita nimillä a, b, c, d, e kuten seuraavassa esimerkissä.

XADD mystream * nimi a

Tämän komennon suorittaminen nimille a - e täyttää Redis Streamin, mystream-viestin ja mystream-kuluttajaryhmän käyttämättömän luettelon. Tämä on havainnollistettu kuvassa 4.

Redis Labs

Täältä näet, että kuluttajat Alice ja Bob eivät ole vielä aloittaneet työpaikkaansa. Sovellus A kuluttaa tietoja kuluttajan Alicen kautta, kun taas sovellus B kuluttaa tietoja Bobin kautta.

Redis Stream -tietojen käyttö

Käsky lukea tietoja ryhmästä on XREADGROUP. Esimerkissämme, kun sovellus A alkaa käsitellä tietoja, se kutsuu kuluttajaa (Alice) hakemaan tietoja, kuten:

XREADGROUP GROUP omaryhmä COUNT 2 Alice STREAMS mystream>

Samoin sovellus B lukee tiedot Bobin kautta seuraavasti:

XREADGROUP GROUP -ryhmä COUNT 2 Bob STREAMS mystream>

Erikoismerkki> lopussa käskee Redis Streamsia hakemaan vain sellaiset tiedot, joita ei toimiteta muille kuluttajille. Huomaa myös, että kaksi kuluttajaa ei käytä samoja tietoja, mikä johtaa tietojen siirtämiseen kuluttamattomasta luettelosta Aliceen ja Bobiin kuvan 5 mukaisesti.

Redis Labs

Käsiteltyjen viestien poistaminen odottavista merkintäluetteloista

Kuluttajien odottavien merkintäluetteloiden tiedot pysyvät siellä, kunnes sovellus A ja sovellus B tunnustavat Redis Streamille, että he ovat kuluttaneet tietoja onnistuneesti. Tämä tapahtuu käyttämällä komentoa XACK. Esimerkiksi sovellus A tunnustaisi seuraavat d: n ja e: n kulutuksen jälkeen, joilla on tunnukset 1526569411111-0 ja 1526569411112-0.

XACK mystream -ryhmäni 1526569411111-0 1526569411112-0

XREADGROUPin ja XACK: n yhdistelmä on analoginen tapahtuman aloittamiselle ja sen suorittamiselle, mikä varmistaa tietoturvan.

Oletetaan, että XACK on suoritettu, sovelluksen A suorittama XREADGROUP alla olevan kuvan mukaisesti. Nyt tietorakenne näyttää kuvalta 6.

XREADGROUP GROUP omaryhmä COUNT 2 Alice STREAMS mystream>
Redis Labs

Toipuminen epäonnistumisista

Jos sovellus B lopetetaan virheiden vuoksi käsittelyssä b ja c, tietorakenne näyttäisi kuvalta 7.

Redis Labs

Nyt sinulla on kaksi vaihtoehtoa:

1. Käynnistä sovellus B uudelleen ja lataa tiedot uudelleen kuluttajalta (Bob).

Tällöin sovelluksen B on luettava tietoja asiakkaaltasi (Bob) XREADGROUP-komennolla, mutta yhdellä erolla. Lopun> sijasta sovellus B läpäisi 0 (tai tunnuksen, joka oli alhaisempi kuin edellinen käsitelty tieto). Muista, että> lähettää uusia tietoja kuluttamattomasta luettelosta kuluttajalle.

XREADGROUP GROUP -ryhmä COUNT 2 Bob STREAMS mystream 0

Yllä oleva komento hakee tietueet, jotka on jo tallennettu luetteloon kuluttaja Bobille. Se ei noutaa uusia tietoja käyttämättömästä luettelosta. Sovellus B voisi iteroida kaikki kuluttaja Bobin tiedot ennen uusien tietojen hakemista.

2. Pakota Alice vaatimaan kaikki tiedot Bobilta ja käsittelemään niitä sovelluksen A kautta.

Tämä on erityisen hyödyllistä, jos et voi palauttaa sovellusta B solmun, levyn tai verkon vian vuoksi. Tällaisissa tapauksissa kuka tahansa muu kuluttaja (kuten Alice) voi vaatia Bobin tietoja ja jatkaa näiden tietojen käsittelyä estäen siten palvelun seisokkeja. Lunastaaksesi Bobin tiedot sinun on suoritettava kaksi komentosarjaa:

XPENDING mystream -ryhmäni - + 10 Bob

Tämä noutaa kaikki Bobin odottavat tiedot. Vaihtoehdot - ja + hae koko alue. Jos b: llä ja c: llä oli vastaavasti tunnukset 1526569411113-0 ja 1526569411114-0, komento, joka siirtää Bobin tiedot Aliceen, on seuraava:

XCLAIM mystream -ryhmäni Alice 0 1526569411113-0 1526569411114-0

Kuluttajaryhmät ylläpitävät kulunutta kulutusluettelossa olevan datan kelloa. Esimerkiksi, kun sovellus B lukee b, kello käynnistyy, kunnes Bob saa ACK: n. XCLAIM-komennon aika-asetuksella voit kehottaa kuluttajaryhmää siirtämään vain tietoja, jotka ovat käyttämättömiä tietyn ajan. Voit myös ohittaa sen välittämällä 0, kuten yllä olevassa esimerkissä on esitetty. Näiden komentojen tulos on havainnollistettu kuvassa 8. XCLAIM on myös kätevä, kun joku kuluttajaprosessoreistasi on hidas, mikä johtaa käsittelemättömien tietojen myöhästymiseen.

Redis Labs

Edellisessä artikkelissa käsittelimme Redis Streamin käytön perusteet. Menimme tässä artikkelissa hieman syvemmälle ja selitimme, milloin kuluttajaryhmiä tulisi käyttää ja miten ne toimivat. Redis Streamin kuluttajaryhmät vähentävät taakkaa, kun hallitset dataosioita, niiden elinkaareja ja tietoturvaa. Lisäksi kuluttajaryhmien laajennusominaisuudet voivat hyödyttää monia reaaliaikaisia ​​sovelluksia.

Tulevassa kolmannessa Redis Streams -artikkelissa esittelen kuinka kehittää reaaliaikainen luokittelusovellus käyttämällä Redis Streamsia ja Lettuce-Java-pohjaista avoimen lähdekoodin kirjastoa Redikselle. Sillä välin voit oppia lisää työskentelemällä Redis Streams -opetusohjelman kautta Redis-projektin verkkosivustolla.

Roshan Kumar on vanhempi tuotepäällikköRedis Labs. Hänellä on laaja kokemus ohjelmistokehityksestä ja teknologiamarkkinoinnista. Roshan on työskennellyt Hewlett-Packardilla ja monissa menestyvissä Silicon Valley -aloitusyrityksissä, kuten ZillionTV, Salorix, Alopa ja ActiveVideo. Innostuneena ohjelmoijana hän suunnitteli ja kehitti mindzeal.com-verkkoalustaa, joka isännöi tietokoneohjelmointikursseja nuorille opiskelijoille. Roshanilla on kandidaatin tutkinto tietojenkäsittelytieteessä ja MBA Santa Claran yliopistossa.

New Tech Forum tarjoaa mahdollisuuden tutkia ja keskustella kehittyvistä yritysteknologioista ennennäkemättömällä syvyydellä ja laajuudella. Valinta on subjektiivinen, perustuu valitsemiemme tekniikoihin, joiden uskomme olevan tärkeitä ja kiinnostavia lukijoille. ei hyväksy markkinointivakuuksia julkaisua varten ja pidättää oikeuden muokata kaikkea lähetettyä sisältöä. Lähetä kaikki tiedustelut osoitteeseen[email protected].

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