Várakozási rendszert keres? Vagy talán jobbat keres? Itt található az összes szükséges információ!


A várólista-rendszerek a háttér-fejlesztés legjobban őrzött titka.

Anélkül, hogy megkíséreltem volna egy verset kiírni a sorba állító rendszerek dicséretére, azt mondanám, hogy egy junior backend fejlesztő középszintű backend fejlesztõvé válik, miután megtanulta integrálni a sorokat a rendszerbe. A várólisták javítják az ügyfelek tapasztalatait (meglátjuk, hogyan), csökkentik a bonyolultságot és javítják a rendszer megbízhatóságát.

Természetesen a nagyon nulla forgalomhoz és a brosúra-webhelyekhez tartozó nagyon egyszerű internetes alkalmazásokhoz a sorok átfogóak lehetnek (vagy akár lehetetlen telepíteni, ha egy tipikus megosztott tárhely környezetben működnek), de a nem triviális alkalmazások mind profitálnak a sorba állításból. rendszerek és a nagy alkalmazások sorba állítás nélkül lehetségesek.

Mielőtt elkezdenénk, felelősségi nyilatkozat: ha Ön már jól ismeri a sorbaállítási rendszereket, és szeretné összehasonlítani a különböző lehetőségeket, a következő néhány bevezető szakasz nagyobb alvást idéz elő. �� Tehát nyugodtan ugorj előre. A bevezető szakaszok azoknak szólnak, akiknek csak egy homályos elképzelése van a sorba állítási rendszerekről, vagy csak hallják a nevet a múltban.

Mi az a sorbaállítási rendszer??

Kezdjük azzal, hogy megértjük, mi a sor.

A sor a számítógépes tudomány adatstruktúrája, amely utánozza a valós idejű várólistákat, amelyeket körülöttünk látunk. Például egy jegypultnál megy észre, hogy a sor végén kell állnia, miközben a sor elején lévő személy először kapja meg a jegyet. Ezt hívjuk az „érkezési sorrendben” jelenségnek. A számítástechnikában olyan programokat lehet írni, amelyek sorban tárolják a feladataikat, és ezeket egyenként feldolgozzák, ugyanazon az érkezési sorrendben alapon.

Ne feledje, hogy a sor nem végez tényleges feldolgozást. Ez csak a fajta ideiglenes tárolása, ahol a feladatok várnak, amíg valami fel nem veszi őket. Ha ez mind kicsit túl elvontnak hangzik, ne aggódjon. Ez egy elvont fogalom, de a következő szakaszban világos példákat látunk. ��

Miért van szüksége sorbaállítási rendszerekre??

Anélkül, hogy nagyon hosszú leírásba kerülnék, azt mondanám, hogy a sorba rendezési rendszerek fő szükségessége a háttérfeldolgozás, a párhuzamos végrehajtás és a hiba helyreállítása. Nézzük meg ezeket példák segítségével:

Háttér feldolgozása

Tegyük fel, hogy olyan e-kereskedelmi marketing kampányt futtat, amelyben alapvető fontosságú az idő, és hogy az alkalmazás úgy van felépítve, hogy megerősítő e-mailt küld ki közvetlenül azelőtt, hogy az ügyfél befejezi a fizetést, és megjelenik a „köszönöm” oldal. Ha az a levelezőszerver, amelyhez csatlakozik, nem működik, a weboldal egyszerűen elpusztul, megszakítva a felhasználói élményt.

Képzelje el, hogy mekkora támogatási igényt szeretne kapni! Ebben az esetben jobb, ha ezt az e-mail küldési feladatot egy munkavárakozási sorba helyezi, és az ügyféllel megmutatja a siker oldalt.

Párhuzamos végrehajtás

Sok fejlesztő, különösen azok, akik többnyire egyszerűbb, alacsony forgalmú alkalmazásokat kódolnak, a szokásos, hogy cron feladatokat használnak háttérfeldolgozásra. Ez mindaddig rendben van, amíg a bemenet mérete annyira növekszik, hogy azt nem lehet megtisztítani. Tegyük fel például, hogy van egy cron feladata, amely elemző jelentéseket készít és e-maileket küld a felhasználóknak, és hogy a rendszer képes percenként 100 jelentést feldolgozni.

Amint az alkalmazás növekszik, és percenként több mint 100 kérést kap, az egyre inkább elmarad, és soha nem lesz képes elvégezni az összes munkát.

Sorban álló rendszerben ezt a helyzetet el lehet kerülni, ha több munkavállalót állít fel, amelyek mindegyik kiválaszthat munkát (mindegyik 100 jelentést tartalmaz), és párhuzamosan dolgozhatnak, hogy sokkal hamarabb elvégezzék a feladatot..

Felépülés kudarcból

Általában nem gondolunk webes fejlesztőkként a kudarcra. Magától értetődik, hogy szervereink és az általunk használt API-k mindig online vannak. De a valóság más – a hálózati áramkimaradások túlságosan általánosak, és a kiváló API-k, amelyekre támaszkodik, infrastrukturális problémák miatt lemerülhetnek (mielőtt azt mondanád, hogy „nem én!”, Ne felejtsd el a hatalmas Amazon S3 kiesés). Tehát, visszatérve a jelentési példához, ha a jelentésgeneráció egy része megköveteli, hogy csatlakozzon a kifizetések API-jához, és ez a kapcsolat 2 percig nem működik, akkor mi történik a 200 jelentéstel, amely nem sikerült?

A sorba rendezési rendszerek azonban jelentős költségekkel járnak. A tanulási görbe meglehetősen meredek, amikor egy teljesen új domainbe lépsz, az alkalmazás és a telepítés összetettsége növekszik, és a sorban lévő feladatokat nem mindig lehet 100% -os pontossággal ellenőrizni. Ennek ellenére vannak olyan helyzetek, amikor sorok nélküli alkalmazás létrehozása egyszerűen nem lehetséges.

Ha nincs ilyen lehetőség, vessünk egy pillantást a manapság leggyakrabban használt lehetőségekre a háttér-rendszerek / rendszerek sorba állítása között.

Redis

Redis kulcsérték-tárolóként ismert, amely csak tárolja, frissíti és lekérdezi az adatsorokat anélkül, hogy tudná az adatok szerkezetét. Bár ez korábban igaz volt, ma a Redis hatékony és rendkívül hasznos adatstruktúrákkal rendelkezik, mint például listák, rendezett halmazok és még egy Pub-Sub rendszer, ami rendkívül kívánatosvá teszi a sorok megvalósítását..

A Redis előnyei a következők:

  • Teljesen a memóriában lévő adatbázis, gyorsabb olvasást / írást eredményezve.
  • Rendkívül hatékony: másodpercenként több mint 100 000 olvasási / írási műveletet képes támogatni.
  • Rendkívül rugalmas perzisztencia rendszer. Vagy lehetősége van maximális teljesítmény elérésére az esetleges adatvesztés árán, hiba esetén, vagy beállíthat teljesen konzervatív módban a teljesítmény feláldozása érdekében a következetesség érdekében.
  • A dobozból támogatott klaszterek

Felhívjuk figyelmét, hogy a Redisnek nincs üzenetküldési, sorbaállítási és helyreállítási absztrakciója, ezért vagy használnia kell egy csomagot, vagy saját magának kell építenie egy könnyű rendszert. Példa erre: a Redis az alapértelmezett sor háttere a Laravel PHP keretrendszerhez, ahol az ütemezőt a keretkészítők végrehajtották.

Tanulás Redis könnyű.

RabbitMQ

Van néhány finom különbség a Redis és a Redis között RabbitMQ, szóval engedjük el előbb őket az útból.

Mindenekelőtt a RabbitMQ speciálisabb, jobban definiált szerepet tölt be, és ezért ezt tükrözi – üzenetküldés. Más szavakkal, kedvező pontja az, hogy közvetítőként működik a két rendszer között, ez nem így van a Redis esetében, amely adatbázisként működik. Ennek eredményeként a RabbitMQ további néhány eszközt biztosít, amelyek hiányoznak a Redisből: üzenet útválasztás, újrapróbálkozások, terheléselosztás stb..

Ha gondolkodik rajta, akkor a feladatvonalakat üzenetküldő rendszernek is lehet tekinteni, ahol az ütemező, a munkavállalók és a „beküldő” feladatok olyan szervezetekre gondolhatók, amelyek részt vesznek az üzenetküldésben..

A RabbitMQ a következő előnyökkel rendelkezik:

  • Jobb absztrakciók az üzenetek továbbításához, csökkentve az alkalmazás szintű munkát, ha az üzenetküldés az, amire szüksége van.
  • Rugalmasabb az áramkimaradások és áramkimaradások szempontjából (mint a Redis, legalább alapértelmezés szerint).
  • Fürt és szövetség támogatása az elosztott telepítésekhez.
  • Hasznos eszközök a telepítések kezelésére és figyelésére.
  • Támogatás gyakorlatilag az összes nem triviális programozási nyelv számára.
  • Telepítés a választott eszközzel (Docker, Chef, Báb, stb.).

Mikor kell használni a RabbitMQ-t? Azt mondanám, hogy ez nagyszerű választás, ha tudja, hogy aszinkron üzenetküldést kell használnia, de nem hajlandó kezelni a listán szereplő többi sorbaállási lehetőség tornyosító bonyolultságát (lásd alább).

ActiveMQ

Ha vállalkozási térbe tartózkodik (vagy egy nagyon elosztott és nagyszabású alkalmazást épít), és nem akarja, hogy folyamatosan feltalálja a kereket (és hibákat kövessen el az út során), ActiveMQ érdemes megnézni.

Íme, ahol az ActiveMQ kiemelkedik:

  • A Java alkalmazásban valósult meg, így valóban ügyes Java integrációval rendelkezik (a JMS szabványt követi).
  • Több támogatott protokoll: AMQP, MQTT, STOMP, OpenWire stb.
  • A biztonságot, az útválasztást, az üzenet lejáratát, az elemzést stb. Kezeli a dobozból.
  • Beépített támogatás a népszerű elosztott üzenetküldési mintákhoz, időt és költséges hibákat takaríthat meg.

Ez nem azt jelenti, hogy az ActiveMQ csak a Java számára érhető el. Ügyfelei vannak a Python, C / C ++, Node, .Net és más ökoszisztémák számára, így a jövőben esetleges összeomlásnak nem kell aggódnia. Ezen túlmenően az ActiveMQ teljesen nyitott szabványokra épül, és a könnyű ügyfelek felépítésének egyszerűnek kell lennie.

Mindezt, amit elmondott és tett, kérjük, vegye figyelembe, hogy az ActiveMQ csak bróker, és nem tartalmaz háttérprogramot. Az üzenetek tárolásához továbbra is a támogatott háttérképeket kell használnia. Ide tartoztam, mert nem kapcsolódik egy adott programozási nyelvhez (mint más népszerű megoldások, mint például a Zeller, a Sidekiq stb.)

Amazon MQ

Amazon MQ itt egy gyors, de fontos említést érdemel. Ha úgy gondolja, hogy az ActiveMQ ideális megoldás az Ön igényeinek, de nem akar éppen az építéssel és az infrastruktúra karbantartásával foglalkozni, akkor az Amazon MQ menedzselt szolgáltatást kínál erre a célra. Támogatja az összes ActiveMQ protokollt – a szolgáltatásokban nincs különbség – mivel az ActiveMQ-t maga használja a felület alatt.

Ennek az az előnye, hogy kezelt szolgáltatásnak minősül, így nem kell másért aggódnia, mint a használata. Még inkább értelme van azoknak a telepítéseknek, amelyek az AWS-en vannak, mivel más szolgáltatásokat és ajánlatokat kihasználhat közvetlenül a telepítésen belül (például gyorsabb adatátvitel).

Amazon SQS

Nem számíthatunk arra, hogy az Amazon csendesen ül, amikor a kritikus infrastruktúra szempontjából fontos, ugye? ��

És így van Amazon SQS, amely a jól ismert óriás AWS teljesen hostolt, egyszerű soros szolgáltatása (egészen szó szerint). Még egyszer, a finom különbségek fontosak, ezért kérjük, vegye figyelembe, hogy az SQS-nek nincs az üzenetküldés fogalma. Mint a Redis, ez egy egyszerű háttér a feladatok várólistákban történő elfogadására és elosztására.

Tehát, mikor szeretné használni az Amazon SQS-t? Íme néhány ok:

  • Ön egy AWS rajongó, és semmi mással nem érintkezik (őszintén szólva, nagyon sok ember van odakint, és azt hiszem, hogy nincs semmi baj).
  • Szüksége van egy tárolt megoldásra, így ügyeljen arra, hogy a hibaarány nulla és a feladatok egyike sem veszítsen el.
  • Nem akarja létrehozni egy klasztert, és saját magának kell felügyelnie azt. Vagy ami még rosszabb, meg kell építeni a felügyeleti eszközöket, amikor ezt az időt felhasználhatja produktív fejlesztésre.
  • Jelentős beruházásokkal rendelkezik az AWS platformon, és üzleti szempontból ésszerű marad a bezárás.
  • Fókuszált, egyszerű sorbaállítási rendszert szeretne, az üzenettovábbításhoz, a protokollokhoz és az összes üzenethez kapcsolódó bolygó nélkül.

Mindent összevetve, az Amazon SQS szilárd választás mindenkinek, aki a munkasorokat be akarja építeni a rendszerébe, és nem kell aggódnia, hogy a dolgokat saját maguk telepítik / figyelik..

Beanstalkd

Beanstalkd hosszú ideje működik, és csata-tesztelt, gyors, egyszerű háttérrendszer a munkavégzéshez. A Beanstalkd néhány jellemzője miatt ez jelentősen különbözik a Redistől:

  • Szigorúan a munkavégzés sorrendje és semmi más. Munkahelyeket tolsz rá, amelyeket később a munkavállalók vonzanak. Tehát ha az alkalmazásnak még apró szüksége van az üzenet továbbítására, akkor kerülje a Beanstalkd alkalmazást.
  • Nincsenek fejlett adatstruktúrák, például halmazok, prioritási sorok stb.
  • A Beanstalkd-t úgy hívják, mint a First In, First Out (FIFO) sor. Nincs mód a munkahelyek prioritások szerinti rendezésére.
  • A fürtözésnek nincs lehetősége.

Mindez azt mondta, hogy a Beanstalkd lassú és gyors sorrendszert tesz lehetővé egyetlen kiszolgálón élő egyszerű projektek számára. Sokak számára ez gyorsabb és stabilabb, mint a Redis. Tehát ha van problémák Redis-szel, hogy úgy tűnik, hogy nem számít, bármi is megoldja, és az Ön igényei egyszerűek, a Beanstalkd megér egy próbát.

Következtetés

Ha eddig elolvasta (vagy itt elérte a szomorú olvasást ��), nagyon jó esély van arra, hogy érdekli a sorba rendezési rendszerek, vagy szüksége van rá. Ha igen, az ezen az oldalon található lista jól szolgálja Önt, hacsak nem nyelvi / keretspecifikus sorrendszert keres.

Bárcsak megmondanám neked, hogy a sorba állítás egyszerű és 100% -ban megbízható, de nem az. Rossz, és mivel a háttérben van, és nagyon gyorsan történik (a hibák észrevétlenül maradhatnak és nagyon költségesek lehetnek). Ennek ellenére a sorok egy ponton túl nagyon szükségesek, és rájössz, hogy erős fegyver (talán még a legerősebb is) az arzenáljában. Sok szerencsét! ��

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me