Használjon olyan üzenetsort, amely pufferként működik egy tevékenység és egy általa meghívott szolgáltatás között, hogy zökkenőmentes legyen az időszakos, nagy terhelés, amely a szolgáltatás meghiúsulását vagy a feladat időtúllépését okozhatja. Ez segíthet minimalizálni az igény csúcspontjainak a rendelkezésre állásra és a válaszképességre gyakorolt hatását mind a tevékenység, mind a szolgáltatás esetében.
A felhőben számos megoldás futtat szolgáltatásokat meghívó feladatokat. Ebben a környezetben ha egy szolgáltatás időszakos nagy terheléseknek van kitéve, az a teljesítménnyel és a megbízhatósággal kapcsolatos problémákat okozhat.
A szolgáltatások ugyanazon megoldás részei lehetnek, mint az azt használó feladatok, vagy külső szolgáltatások lehetnek, amelyek hozzáférést nyújtanak a gyakran használt erőforrásokhoz, például egy gyorsítótárhoz vagy egy társzolgáltatáshoz. Ha több egyidejűleg futó feladat ugyanazt a szolgáltatást használja, egy adott időpillanatban nehéz lehet megjósolni a szolgáltatás felé irányuló kérések mennyiségét.
A szolgáltatásban időszakonként csúcsok jelentkezhetnek az igényekben, amelyek túlterhelést okozhatnak, így a szolgáltatás nem tud időben válaszolni a kérésekre. A szolgáltatások számos egyidejű kéréssel való elárasztása is a szolgáltatás meghiúsulását eredményezheti, ha nem tudja kezelni a kérések okozta versenyt.
Bontsa újra a megoldást, és vezessen be egy üzenetsort a feladat és a szolgáltatás között. A feladatok és a szolgáltatás aszinkron módon fut. A feladat közzéteszi a szolgáltatás számára szükséges adatokat tartalmazó üzenetet egy üzenetsorba. Az üzenetsor pufferként működik, addig tárolja az üzenetet, amíg azt a szolgáltatás le nem kéri. A szolgáltatás lekéri az üzeneteket az üzenetsorból, és feldolgozza őket. Egy adott üzenetsorban számos különféle feladatból származó kérés adható át a szolgáltatásnak, amelyek rendkívül változó sebességgel jöhetnek létre. Ez az ábra egy szolgáltatás terhelésének kiegyenlítésére szolgáló üzenetsor használatát mutatja be.
Az üzenetsor leválasztja a feladatokat a szolgáltatásról, és a szolgáltatás a saját tempójában tudja kezelni az üzeneteket az egyidejű feladatoktól érkező kérések mennyiségétől függetlenül. Emellett a feladatok nem késnek, ha a szolgáltatás nem érhető el, amikor üzenetet tesznek közzé az üzenetsorba.
Ez a minta az alábbi előnyökkel jár:
Maximálisra növeli a rendelkezésre állást, mert a szolgáltatásokban felmerülő késések nincsenek azonnali és közvetlen hatással az alkalmazásra, amely akkor is folytathatja az üzenetek üzenetsorba való közzétételét, amikor a szolgáltatás nem érhető el vagy épp nem dolgoz fel üzeneteket.
Segít a skálázhatóság maximalizálásában, mert az üzenetsorok száma és a szolgáltatások száma is módosítható igény szerint.
A segítségével kézben tarthatók a költségek, mert az üzembe helyezett szolgáltatáspéldányok számának csak az átlagos terheléshez kell elegendőnek lennie, a csúcsterheléshez nem.
Egyes szolgáltatások szabályozást alkalmaznak, amikor az igények elérnek egy olyan küszöbértéket, amelyet követően a rendszer meghibásodhat. A szabályozás csökkentheti az elérhető funkciókat. Ezekkel a szolgáltatásokkal terheléskiegyenlítést valósíthat meg annak érdekében, hogy ne érje el ezt a küszöbértéket.
A minta megvalósítása során az alábbi pontokat vegye figyelembe:
- Olyan alkalmazáslogikát kell megvalósítani, amely szabályozza a szolgáltatások általi üzenetkezelés sebességét, hogy a cél erőforrás ne legyen túlterhelve. Ne adjon át igénybevételi csúcsokat a rendszer más részeinek. Tesztelje a terhelés alatti rendszert annak ellenőrzéséhez, hogy az biztosítja-e a megfelelő terheléskiegyenlítést, és ennek megfelelően módosítsa az üzeneteket kezelő üzenetsorok és szolgáltatáspéldányok számát.
- Az üzenetsorok egyirányú kommunikációs mechanizmusok. Ha egy feladat válaszra vár egy szolgáltatástól, előfordulhat, hogy olyan mechanizmust kell implementálni, amellyel a szolgáltatás választ tud küldeni. További információkért lásd az aszinkron üzenetkezelés ismertetését.
- Legyen óvatos, ha automatikus skálázást alkalmaz azokra a szolgáltatásokra, amelyek figyelik az üzenetsoron lévő kéréseket. Ez megnövekedett versenyt eredményezhet az ezen szolgáltatások által megosztott erőforrásokért, és csökkenti az üzenetsor hatékonyságát a terhelés kiegyenlítése terén.
- A szolgáltatás terhelésétől függően olyan helyzetbe is belefuthat, amikor hatékonyan mindig lemarad, ahol a rendszer mindig több kérést állít össze, mint amennyit feldolgoz. Figyelembe kell venni az alkalmazás bejövő forgalmának variabilitását
- A minta adatvesztést okozhat a várólista megőrzésétől függően. Ha az üzenetsor összeomlik vagy adatokat töröl (a rendszer korlátai miatt), előfordulhat, hogy nem rendelkezik garantált kézbesítéssel. A megoldás igényeinek megfelelően figyelembe kell venni az üzenetsor és a rendszer korlátainak viselkedését.
Ez a minta olyan alkalmazásokhoz hasznos, amelyek gyakran túlterhelt szolgáltatásokat használnak.
Ez a minta nem használható jól, ha az alkalmazás minimális késéssel vár választ a szolgáltatástól.
Az építészeknek értékelniük kell, hogyan használható a várólista-alapú terheléselosztási minta a számítási feladat kialakításában az Azure Well-Architected Framework pilléreiben foglalt célok és alapelvek kezelésére. 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 ebben a mintában leírt megközelítés rugalmasságot biztosíthat a hirtelen megnövekedett kereslet ellen azáltal, hogy leválasztja a tevékenységek érkezését a feldolgozásukról. Elkülönítheti az üzenetsor-feldolgozás hibáit is, hogy ne befolyásolják a bevitelt. - RE:06 Skálázás - RE:07 Háttérfeladatok |
A költségoptimalizálás a számítási feladatok megtérülésének fenntartására és javítására összpontosít. | Mivel a terhelésfeldolgozás leválasztva van a kérésről vagy a tevékenységbevitelről, ezzel a módszerrel csökkentheti az erőforrások túlterheltségének szükségességét a csúcsterhelés kezeléséhez. - CO:12 skálázási költségek |
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 . | Ez a megközelítés lehetővé teszi az átviteli sebesség szándékos tervezését, mivel a kérelmek bevitelének nem kell korrelálnia a feldolgozásuk sebességével. - PE:05 Skálázás és particionálás |
Mint minden tervezési döntésnél, fontolja meg az ezzel a mintával bevezethető többi pillér céljaival szembeni kompromisszumokat.
Egy webalkalmazás adatokat ír egy külső adattárba. Ha a webalkalmazás nagy számú példánya fut egyidejűleg, előfordulhat, hogy az adattár nem tud elég gyorsan válaszolni a kérésekre, így a kérések időtúllépést, szabályozást vagy egyéb módon meghiúsulást okoznak. Az alábbi ábra azt mutatja be, hogy egy adattárat túlterhelt egy alkalmazás példányaitól érkező nagyszámú egyidejű kérés.
Ennek megoldásához egy üzenetsor használatával simítheti a terhelést az alkalmazáspéldányok és az adattár között. Egy Azure Functions-alkalmazás beolvassa az üzeneteket az üzenetsorból, és végrehajtja az olvasási/írási kéréseket az adattárba. A függvényalkalmazás alkalmazáslogika szabályozhatja, hogy milyen sebességgel továbbítja a kéréseket az adattárnak, hogy megakadályozza az áruház túlterheltségét. (Ellenkező esetben a függvényalkalmazás csak újra bevezeti ugyanazt a problémát a háttérrendszerben.)
Az alábbi útmutatók segíthetnek a minta megvalósításakor:
Az aszinkron üzenetkezelés ismertetése. Az üzenetsorok eredendően aszinkron típusúak. Előfordulhat, hogy egy feladatban újra kell tervezni az alkalmazáslogikát a szolgáltatással való közvetlen kommunikációról üzenetsor használatára. Hasonlóképpen szükség lehet a szolgáltatások újrabontására, hogy kéréseket fogadjanak el egy üzenetsortól. Másik lehetőségként meg lehet valósítani egy proxyszolgáltatást a példában bemutatott módon.
Válasszon az Azure-üzenetkezelési szolgáltatások közül. Információkat biztosít az üzenetkezelési és sorkezelési mechanizmusok kiválasztásáról Azure-alkalmazásokban.
- Web-Queue-Worker architektúrastílus. A web és a feldolgozó is állapot nélküli. A munkamenet-állapot tárolható egy megosztott gyorsítótárban. A hosszan futó munkákat a feldolgozó aszinkron módon végzi el. A feldolgozó aktiválható üzenetekkel az üzenetsoron, vagy futhat egy ütemezésben a kötegelt feldolgozáshoz.
A minta megvalósításakor az alábbi minták is relevánsak lehetnek:
Versengő felhasználókat ismertető minta. Egy szolgáltatás több példánya is futtatható lehet, amelyek mindegyike üzenetfogyasztóként viselkedik a terheléskiegyenlítő üzenetsorból. Ezzel a módszerrel beállíthatja az üzenetek szolgáltatásból való fogadásának és a szolgáltatásba küldésének sebességét.
Szabályozási minta. A szolgáltatás általi szabályozás megvalósításának egyszerű módja az üzenetsoralapú terheléskiegyenlítés és a szolgáltatásokra érkező összes kérés átirányítása egy üzenetsorba. A szolgáltatás olyan sebességgel dolgozza fel a kéréseket, amely biztosítja, hogy a szolgáltatás számára szükséges erőforrások ne merüljenek ki, és hogy csökkenjen az esetleges verseny mennyisége.