Dummy útmutatója az elosztott várólistákhoz

Ha valaha is elgondolkodott azon, hogy miről szól a Kafka, a Heron, a valós idejű streaming, az SQS vagy a RabbitMQ , akkor ez a cikk az Ön számára készült. Részletesen megvitatom, miért van szükségünk sorra a mai modern szoftverarchitektúrához, mik az általánosan használt technológiák, és hogyan használják a sorokat az iparban. Ha tetszik ez a cikk, van egy tanfolyamom az elosztott rendszerek méretezéséről, ahol részletesebben tárgyalom ezeket a témákat.

OK, menjünk bele!

Először is, miért van szükség sor / üzenetközvetítőre?

Az a történet, hogy egy sor hogyan mentette meg a limonádéállványokat

Képzelje el, hogy limonádét fut? standot, és kiépített egy remek kis webalkalmazást, amely nyomon követi, hogy ügyfelei milyen gyakran térnek vissza limonádé standjához.

A webalkalmazásnak van egy végpontja, mondjuk a yourlemonade.com/traffic, és minden alkalommal, amikor egy gombra kattint, a forgalom száma 1- gyel növekszik . Gyönyörű.

Ahogy nő a limonádé állvány forgalma, egyre többet kattint a gombra. Nos, mivel viszonylag kis környéken élsz, naponta csak 10–20 embert kapsz. Az Ön értékesítése a szokásos módon halad, a webalkalmazás remekül kezeli a forgalmat, és minden rendben van. Tökéletes.

A virágzó vállalkozás rémálma

Most, hogy limonádé állványa hírnevet szerzett magának, a város minden tájáról érkeznek emberek, hogy ízelítőt kapjanak híres limonádéból. És egy szép vasárnap reggel a helyi hírek úgy döntöttek, hogy népszerűsítik az Ön standját, és a forgalom felrobban .

Ahogy el lehet képzelni, a limonádé standjának forgalma napi 10–20 emberről napi 10 000 főre nő. Dühödten koppintasz a forgalom gombjára, ami viszont hívást indít a yourlemonade.com/traffic címre, és webes alkalmazásod folyamatosan növeli a forgalom mennyiségét.

Sajnos a webalkalmazás egy 8 bites, 128 MB RAM-kiszolgálón van házad garázsában. A virágzó vállalkozással és a megnövekedett forgalommal az Ön webalkalmazása nem képes tovább kezelni a forgalom nagyságát.

Végül a szervere meghal. ☠️

Ezzel az egész webalkalmazás lehúzódik. A forgalmat már nem követheti nyomon. Az emberek rohannak, megrendelések halmozódnak fel, ennek ellenére a webalkalmazás nem működik, és addig nem kezelhet semmilyen tranzakciót, amíg újra nem tudja elkezdeni a forgalom naplózását.

Mit csinálsz?

Sor a mentéshez

Egy pillanatnyi ragyogás támad rád, mi van, ha leteszek egy dobozt a pult elé, ahová minden ügyfél csak dobhat egy cetlit, mondván, hogy ott vannak?

Valahányszor az ügyfél belép az ajtón, és megrendelést ad, arra kéred őket, hogy udvariasan tegyék le a megrendelőlapokat a fizetési pult előtt elhelyezett kis dobozba. Kiemelkedő! Lényegében bevezett egy mechanizmust az érkezések nyomon követésére, miközben továbbra is lehetővé teszi vállalkozásának a szokásos működését.

Ezt nevezzük aszinkron feldolgozásnak , és üdvözöljük a sorok világában . ?

Amikor elindítja a szoftverek építését, hasonlóan a fent említett limonádé standhoz, gyakran előfordul, hogy egy feladat elvégzi

  1. hívjon egy szolgáltatást
  2. várja meg a szolgáltatás befejezését, majd
  3. folytassa a következő feladattal.

Ezt hívják szinkron feldolgozásnak. Az aszinkron feldolgozás viszont lehetővé teszi a feladat számára, hogy hívjon egy szolgáltatást, és továbblépjen a következő feladatra, miközben a szolgáltatás a kérelmet a saját ütemében dolgozza fel. Ezért a várólista egy gyönyörű, elegáns módszer a rendszerek feloldásának feloldására, mert egy réteget tesz a szolgáltatásai elé, és lehetővé teszi számukra, hogy a saját tempójukban kezeljék a feladatokat.

Ha egy sor olyan hatalmas, miért nem tesszük csak minden elé?

Amint bárki tanúskodhat az elosztott rendszerekről, az elosztott rendszer méretezése rendkívül bonyolult és bonyolult. Néhány olyan dolgot érdemes tudni a sorokról, amelyek miatt a sor nem vonzó javaslat a rendszer számára.

Néhány kérdés, amelyet feltennék, mielőtt eldöntenék, hogy a sor a megfelelő megoldás-e az Ön számára:

  • A szolgáltatásának problémái vannak a nagy forgalom miatt? Ha nem, akkor talán utána kellene néznie, mi a szűk keresztmetszet, mielőtt sorba ugrana. Ahogy Donald Knuth híresen mondta, az idő előtti optimalizálás minden gonosz gyökere.
  • Van-e házon belüli szakértelme a sor kezelésében? Vagy esetleg fel kell vennie egy csapatot, hogy megtegye az Ön számára? A karbantartási költségek, például a sor méretének növelése, az egekbe szökhetnek, ha nem vigyázol. Vannak olyan szolgáltatások, mint az Amazon SQS (Simple Queuing Service), amelyek felügyelt megoldást kínálnak (azaz önnek semmit sem kell fenntartania).
  • Lehetséges, hogy ismétlődő bejegyzések legyenek a sorban? Ha igen, ez elfogadható?
  • Nyilvántartást kell vezetnie az összes tranzakcióról, ha sor csökken?
  • Abban az esetben, ha egy sor csökken, a sornak képesnek kell lennie az összes bejegyzés visszajátszására? Milyen biztonsági mentési lehetőségei vannak?

Sokkal több olyan aggodalom merülhet fel, amely konkrétan az Ön felhasználási esetére vonatkozhat, de remélhetőleg kijelentettem, hogy a sor hozzáadása nem olyan egyszerű, mint az ujjaival való csettintés.

Hogyan használják a várólistákat a modern építészetben

A várakozási sorok mindenütt jelen vannak a mai modern elosztott rendszerek architektúrájában - amelyeket a különféle iparágakban alkalmaznak különböző felhasználási esetekre, és minden nap több újszerű eset is előfordul.

Íme néhány a várakozási sorok valós felhasználási esetei:

Valós idejű streaming

Amikor a MapReduce megjelent, óriási jelenség volt az iparban, mert lehetővé tette, hogy az egyszerű halandók petabájtnyi adatot dolgozzanak fel ésszerű időn belül, napoktól órákig. Ez abszurdnak tűnhet ma, amikor az adatok szinte másodpercek alatt elérhetők, de a MapReduce előtt nem volt könnyű felhasználható adatokat kinyerni rendkívül nagy adathalmazokból.

Az adatelemzés iránti étvágy megnövekedett, és most néhány órán belül, és néha ezredmásodperceken belül feldolgozzuk az adatokat .

Az alacsony késleltetésű elemzés és teljesítmény folyamatos elérése érdekében a valós idejű streaming koncepcióját fogalmazták meg.

Hasznos példa itt a hirdetésekre való gondolkodás: például a Twitteren megjelenő hirdetéseket naponta emberek milliói mutatják meg. Annak érdekében, hogy a felhasználók ne láthassák ugyanazt a hirdetést többször egy meghatározott időtartamon belül, a Twitternek valahogyan tudnia kell, hogy a felhasználó mikor volt utoljára kitéve egy bizonyos hirdetésnek.

Ha a MapReduce-ra támaszkodtunk volna a művelet végrehajtása során, az még nem is lenne megoldás, mert az összes adat feldolgozása több órát vesz igénybe. Ehelyett a valós idejű közvetítés lehetővé teszi számunkra a hirdetésmegjelenítések feldolgozását, amint megérkeznek. Mindez lehetővé válik az olyan sorok miatt, amelyek lehetővé teszik az adatok folyamatos továbbítását és feldolgozását valós időben.

Bizonyos technológiák, amelyekről valós idejű streaming használat esetén gyakran hallani, a Kafka, a Kafka stream, a Redis, a Spark Streaming (amely különbözik a Sparktól) és így tovább.

Eseményvezérelt architektúra

A várólistákat az eseményvezérelt architektúra kritikus komponenseként használják, vagy köznyelven Pub (lisher) - Sub (scriber) néven ismertek . Az eseményvezérelt architektúra a Wikipedia szerint:

Az eseményvezérelt architektúra (EDA) egy szoftverarchitektúra, amely elősegíti az események előállítását, detektálását, fogyasztását és az azokra való reagálást.

Ezt úgy szeretném elképzelni, hogy feliratkozom egy hírlevélre: mint hírlevél gyártója tudja, hogy ki iratkozott fel a hírlevelére és ki nem. Ön megírja a tartalmat, majd elküldi az előfizetőknek.

Másrészt előfizetőként előfordulhat, hogy több hírlevelet is feliratkozott, de nem tudja, kik a többi előfizető. De ez nem igazán érdekel. Ez egy nagyon jó szolgáltatás, mert most olyan szoftvert írhat, amely egy csomó eseményre hallgat, és csak azokra válaszol, amelyek érdeklik.

A RabbitMQ és az Amazon SQS (Simple Queuing Service) az ilyen típusú esetekhez gyakran használt technológiák.

Elosztott, hibatűrő, méretezhető infrastruktúra

Az elosztott rendszerek hajlamosak a hibákra, és a várakozási sor az architektúra rugalmasságának növelésének számos módjának egyike. Mikroszolgáltatás-architektúrában (vagy szolgáltatás-orientált architektúrában) több mikroszolgáltatás kommunikál egymással várólistákon, megosztott interfészként.

Ha egy mikraszolgáltatás váratlanul meghibásodik, a sor továbbra is képes üzeneteket fogadni. Ez lényegében puffert biztosít a mikroszolgáltatásunk helyreállításához. Miután a mikroszolgáltatás újra online állapotban van, felveheti az üzeneteket a sorból, és újra feldolgozhatja azokat.

Gondoljon arra, mint a postaládájára. Ha éppen nyaralni megy Hawaii-on, a postai küldemény továbbra is kézbesíti a postaládát. Miután visszatért a nyaralásból, átveheti a leveleket, és szabadidejében feldolgozhatja azokat.

Köszönöm, hogy elolvasta! Remélem, megtudtál egy-két dolgot az elosztott sorokról a cikkemből. Ha tetszett olvasni, hagyjon egy tapsot, és csatlakozzon ide a hírlevelemhez, ahol szoftveres és technikai interjúkról írok!

Források, amelyeket ajánlok

A sorok és a fent említett különféle témák jobb megértése érdekében az alábbi forrásokat nagyon ajánlom. Vagy csatlakozzon az elosztott rendszerek méretezésével kapcsolatos tanfolyamomhoz , hogy többet tudjon meg a várólistákról :)

  • Adatintenzív alkalmazások tervezése: Félelmetes könyv az elosztott rendszerek méretezésének megismeréséhez! Nagyon ajánlott.
  • Kafka a kalauz: Ezt a könyvet referencia útmutatóként használtam, és élveztem a magas szintű leíráshoz.
  • Kafka-adatfolyamok: Ez a Confluent informatív cikke, amely néhány magas szintű részletességgel beszél a Kafka adatfolyam-feldolgozásának megvalósításáról.
  • A programozási interjúk elemei: Nagyszerűek a kódolási problémák megoldására.
  • A kódolási interjú feltörése: kiválóan alkalmas az alapozó CS kódolási problémák fedezésére.
  • Daily Coding Problem.com: Ez egy ingyenesen kipróbálható webhely, amely ingyenes napi kódolási problémákat kínál. Feliratkozhat érdekes napi kódolási kihívásokra, és ha akar, fizethet a megoldásokért. Ha a hivatkozási linkemet használja (dailycodingproblem.com/zhiachong), 10 dollár kedvezményt kap!

(FYI, több forrást osztok meg a webhelyemen: zhiachong.com, ahol személyesen is kipróbáltam és tesztelek, és minden szintű szoftvermérnöknek ajánlom.)

Egészségére!