Szerkesztés

Megosztás a következőn keresztül:


Elsőbbségi üzenetsor mintája

Azure Service Bus

A prioritási üzenetsor mintája lehetővé teszi, hogy a számítási feladatok gyorsabban dolgozzanak fel magas prioritású feladatokat, mint az alacsonyabb prioritású tevékenységek. Ez a minta egy vagy több üzenetsorba küldött üzeneteket használ, és olyan alkalmazásokban hasznos, amelyek különböző szolgáltatási szintű garanciákat nyújtanak az egyes ügyfelek számára.

Kontextus és probléma

A számítási feladatoknak gyakran különböző fontossági és sürgősségi szintű feladatokat kell kezelnie és feldolgoznia. Egyes feladatok azonnali figyelmet igényelnek, míg mások várakozhatnak. A magas prioritású feladatok nem kezelése hatással lehet a felhasználói élményre és a szolgáltatásszintű szerződések (SLA-k) megsértésére.

A feladatok prioritása alapján történő hatékony kezeléséhez a számítási feladatoknak olyan mechanizmusra van szükségük, amely ennek megfelelően rangsorolja és végrehajtja a feladatokat. A számítási feladatok általában a beérkezés sorrendjében dolgozzák fel a feladatokat egy első lépésben megjelenő (FIFO) üzenetsor-struktúra használatával. Ez a megközelítés nem veszi figyelembe a tevékenységek eltérő fontosságát.

Megoldás

A prioritási üzenetsorok lehetővé teszik a számítási feladatok feldolgozását a prioritásuk alapján, nem pedig az érkezési sorrendjük alapján. Az üzenetsorba üzenetet küldő alkalmazás prioritást rendel az üzenethez, a fogyasztók pedig prioritás alapján dolgozzák fel az üzeneteket. A prioritási üzenetsor mintáját akkor használja, ha a következő követelményekkel rendelkezik:

  • Kezelje a különböző sürgős és fontos feladatokat. Különböző sürgősségű és fontos feladatokkal rendelkezik, és biztosítania kell, hogy a kritikusabb feladatokat a kevésbé kritikus feladatok előtt dolgozza fel.

  • Különböző szolgáltatásiszint-szerződések kezelése. Különböző szolgáltatási szintű garanciákat kínál az ügyfelek számára, és gondoskodnia kell arról, hogy a magas prioritású ügyfelek jobb teljesítményt és rendelkezésre állást kapjanak.

  • Különböző számítási feladatok kezelési igényeinek kielégítése. Olyan számítási feladatokkal rendelkezik, amelyeknek azonnal meg kell felelniük bizonyos feladatoknak, és a kevésbé sürgős tevékenységek várhatnak.

A prioritási üzenetsor-minta implementálásának két fő megközelítése van:

  • Egyetlen üzenetsor: A rendszer minden üzenetet egy üzenetsorba küld, és mindegyik üzenet prioritást kap.

  • Több üzenetsor: Minden üzenet prioritásához külön üzenetsorok tartoznak.

Egysoros üzenetsor

Egyetlen üzenetsor esetén az alkalmazás (gyártó) prioritást rendel az egyes üzenetekhez, és elküldi az üzenetet az üzenetsornak. Az üzenetsor prioritás szerint rendeli meg az üzeneteket, így a felhasználók magasabb prioritású üzeneteket dolgoznak fel az alacsonyabb prioritású üzenetek előtt.

Az üzenet rangsorolását támogató üzenetsor-kezelési mechanizmust bemutató ábra.
1. ábra Egyetlen üzenetsor és egyetlen fogyasztói készlet architektúrája

Több üzenetsor

Több üzenetsor lehetővé teszi az üzenetek prioritás szerinti elkülönítését. Az alkalmazás prioritást rendel az egyes üzenetekhez, és a prioritásnak megfelelő üzenetsorra irányítja az üzenetet. A felhasználók feldolgozzák az üzeneteket. A többsoros megoldások egyetlen fogyasztói készletet vagy több fogyasztói készletet használnak.

Több fogyasztói készlet

Több fogyasztói készlet esetén minden üzenetsorhoz vannak dedikált fogyasztói erőforrások. A magasabb prioritású üzenetsoroknak több fogyasztót vagy magasabb teljesítményszintet kell használniuk az üzenetek gyorsabb feldolgozásához, mint az alacsonyabb prioritású üzenetsorok.

Használjon több fogyasztói készletet a következő esetekben:

  • Szigorú teljesítménykövetelmények: Több fogyasztói készletre van szükség, ha a különböző feladatprioritások szigorú teljesítménykövetelményeket támasztanak, amelyeket egymástól függetlenül kell teljesíteni.
  • Nagy megbízhatósági igények: Több fogyasztói készletre van szükség olyan alkalmazásokhoz, amelyeknél a megbízhatóság és a hibaelkülönítés kritikus fontosságú. Az egyik üzenetsor problémái nem befolyásolhatják a többi üzenetsort.
  • Összetett alkalmazások: Olyan összetett alkalmazások esetén előnyös, amelyek különböző feldolgozási jellemzőket és teljesítménygaranciát igényelnek a különböző feladatokhoz.

Diagram, amely az egyes prioritásokhoz tartozó üzenetsorok használatát mutatja be.
2. ábra Több üzenetsor és több fogyasztói készlet architektúrája.

Egyfelhasználós készlet

Egyetlen fogyasztói készlet esetén az összes üzenetsor egyetlen fogyasztói készlettel rendelkezik. A felhasználók először a legmagasabb prioritású üzenetsorból dolgozzák fel az üzeneteket, és csak akkor dolgozzák fel az alacsonyabb prioritású üzenetsorokból érkező üzeneteket, ha nincsenek magas prioritású üzenetek. Ennek eredményeképpen az egyetlen fogyasztói készlet mindig magasabb prioritású üzeneteket dolgoz fel az alacsonyabb prioritású üzenetek előtt. Ez a beállítás azt eredményezheti, hogy az alacsonyabb prioritású üzenetek folyamatosan késnek, és valószínűleg soha nem lesznek feldolgozva.

Használjon egyetlen fogyasztói készletet a következő célokra:

  • Egyszerű kezelés: Egyetlen fogyasztói készlet alkalmas olyan alkalmazásokhoz, ahol a könnyű beállítás és a karbantartás prioritást élvez. Csökkenti a konfiguráció és a monitorozás összetettségét.
  • Egységes feldolgozási igények: Egyetlen fogyasztói készlet akkor hasznos, ha a bejövő feladatok pontos jellege hasonló.

Diagram, amely az egyes prioritásokhoz tartozó üzenetsorok használatát mutatja be.
3. ábra Több üzenetsor és egyetlen fogyasztói készlet architektúrája.

Javaslatok a prioritási üzenetsor mintájához

A prioritási üzenetsor-minta implementálásának kiválasztásakor vegye figyelembe az alábbi javaslatokat:

Általános javaslatok

  • Határozza meg egyértelműen a prioritásokat. Hozzon létre a megoldás szempontjából releváns különálló és egyértelmű prioritási szinteket. Előfordulhat például, hogy egy magas prioritású üzenet feldolgozása 10 másodpercen belül szükséges. Azonosítsa a magas prioritású elemek kezelésére vonatkozó követelményeket, és ennek megfelelően foglalja le a szükséges erőforrásokat.

  • A fogyasztói készletek dinamikus beállítása. Skálázza a fogyasztói készletek méretét az általuk karbantartott üzenetsor hossza alapján.

  • A szolgáltatásszintek rangsorolása. Prioritási üzenetsorok implementálása olyan üzleti igények kielégítése érdekében, amelyek prioritási szintű rendelkezésre állást vagy teljesítményt igényelnek. A különböző ügyfélcsoportok például különböző szolgáltatási szinteket kaphatnak, így a magas prioritású ügyfelek jobb teljesítményt és rendelkezésre állást tapasztalhatnak.

  • Gondoskodjon az alacsony prioritású feldolgozásról. Az üzenetek rangsorolását támogató üzenetsorokban dinamikusan növelje az elavult üzenetek prioritását, ha a rendszer lehetővé teszi az alacsony prioritású üzenetek feldolgozását.

  • Fontolja meg az üzenetsor költségeit. Ügyeljen az üzenetsorok ellenőrzéséhez kapcsolódó pénzügyi és feldolgozási költségekre. Egyes üzenetsor-szolgáltatások díjakat számítanak fel az üzenetek közzétételéért, lekéréséért és lekérdezéséért, ami az üzenetsorok számával együtt nőhet.

Több üzenetsorra vonatkozó javaslat

  • A feldolgozási sebesség monitorozása. Annak érdekében, hogy az üzenetek feldolgozása a várt sebességgel történjen, folyamatosan monitorozza a magas és alacsony prioritású üzenetsorok feldolgozási sebességét.

  • Költségek minimalizálása. A kritikus feladatokat azonnal feldolgozzuk az elérhető felhasználókkal. Kevésbé kritikus háttérfeladatok ütemezése kevésbé elfoglalt időszakokban.

Egyfelhasználós készletre vonatkozó javaslatok

  • Preemption és felfüggesztés implementálása. Döntse el, hogy az összes magas prioritású elemet az alacsonyabb prioritású elemek előtt kell-e feldolgozni. Olyan algoritmust használjon, amely biztosítja, hogy a magas prioritású üzenetsorok mindig az alacsonyabb prioritású üzenetsorok előtt legyenek kiszolgálva, ha több üzenetsorhoz egyetlen felhasználói készletet használnak.

  • Költségek optimalizálása. Optimalizálhatja a működési költségeket a fogyasztók számának visszaskálázásával az egysoros megközelítés használatakor. Elsőként a magas prioritású üzeneteket kell feldolgozni, bár valószínűleg lassabban, míg az alacsonyabb prioritású üzenetek hosszabb késéssel szembesülhetnek.

Számítási feladatok tervezése

Az építészeknek értékelnie kell, hogy a prioritási üzenetsor-minta hogyan képes kezelni az Azure Well-Architected Framework pilléreiben szereplő célokat és alapelveket. Példa:

Pillér Hogyan támogatja ez a minta a pillércélokat?
A megbízhatósági tervezési döntések segítenek a számítási feladatnak ellenállóvá válni a hibás működéssel szemben, és biztosítani, hogy a hiba bekövetkezése után teljesen működőképes állapotba kerüljön. Az üzleti prioritás alapján elválasztó elemek lehetővé teszik, hogy a megbízhatósági erőfeszítéseket a legkritikusabb munkára összpontosítsa.

- RE:02 Kritikus folyamatok
- RE:07 Háttérfeladatok
A teljesítményhatékonyság a skálázás, az adatok és a kód optimalizálásával segíti a számítási feladatok hatékony kielégítését . Az üzleti prioritás alapján elválasztó elemek lehetővé teszik, hogy a teljesítményre irányuló erőfeszítéseket a leginkább időérzékeny munkára összpontosítsa.

- PE:09 Kritikus folyamatok

Mint minden tervezési döntésnél, fontolja meg az ezzel a mintával bevezethető többi pillér céljaival szembeni kompromisszumokat.

Példa a prioritási üzenetsor mintájára

A GitHub következő példája a prioritási üzenetsorok mintájának implementálását mutatja be az Azure Service Bus használatával.

Diagram, amely bemutatja, hogyan valósíthat meg prioritási üzenetsort a Service Bus használatával.
4. ábra A PriorityQueue-példa architektúrája a GitHubon

Az architektúra áttekintése:

  • Alkalmazás (gyártó): A példában egy olyan alkalmazás (PriorityQueueSender) található, amely üzeneteket hoz létre, és az egyes üzenetekben egy Priority egyéni tulajdonságot rendel hozzá. Priority értéke High vagy Lowértéke .

  • Üzenetközvetítő és üzenetsorok: A példa az Azure Service Bust használja üzenetközvetítőként. Két Azure Service Bus-üzenetsort használ, egyet az egyes üzenetprioritásokhoz (High és Low). Az alkalmazás (gyártó) üzeneteket küld a megfelelő üzenetsorba az üzenet Priorityalapján.

  • Több fogyasztói készlet: A példa több fogyasztói készletet (PriorityQueueConsumerHigh és PriorityQueueConsumerLow) használ az egyes üzenetsorok üzeneteinek olvasására.

Szerepkör a példaarchitektúrában Példa az Azure-szolgáltatásra Név a példában
Alkalmazás Azure Functions-alkalmazás PriorityQueueSender
Üzenetsor-közvetítő Azure Service Bus <a service bus-névtér>
Üzenetsorok Azure Service Bus-üzenetsorok <az üzenetsor nevei>
Fogyasztók Azure Functions-alkalmazás PriorityQueueConsumerHigh
PriorityQueueConsumerLow

A következő minták hasznosak lehetnek a minta megvalósításakor:

  • Versengő fogyasztók mintája: Ez a minta magában foglalja több olyan fogyasztó implementálását, amelyek ugyanazt az üzenetsort figyelik, és párhuzamosan dolgozzák fel a feladatokat az átviteli sebesség növelése érdekében. Az egyes üzeneteket csak egy fogyasztó dolgozza fel. A cikk részletesen ismerteti ennek a megközelítésnek az előnyeit és hátrányait.

  • Szabályozási minta: Ez a minta üzenetsorok használatával implementálható a kérések arányának kezeléséhez. A prioritásos üzenetkezelés használatával a kritikus alkalmazásoktól vagy a nagy értékű ügyfelektől érkező kérések elsőbbséget élveznek a kevésbé fontosakkal szemben.