Vyberte doručení založené na zprávě pomocí front

Dokončeno

Předpokládejme, že plánujete architekturu pro aplikaci pro sdílení hudby. Chcete zajistit spolehlivé nahrávání hudebních souborů do webového rozhraní API z mobilní aplikace. Pak budete chtít doručovat podrobnosti o nových skladbách přímo do aplikace, když interpret přidá novou hudbu do své kolekce. Tento scénář představuje ideální použití systému založeného na zprávách a Azure nabízí dvě řešení tohoto problému:

  • Azure Queue Storage
  • Azure Service Bus

Co je Azure Queue Storage?

Queue Storage je služba, která využívá Azure Storage k ukládání velkého množství zpráv. Ke zprávám je možné snadno získat přístup odkudkoli na světě prostřednictvím jednoduchého rozhraní založeného na architektuře REST. Fronty můžou obsahovat miliony zpráv: jejich počet je omezen jen kapacitou účtu úložiště, který je vlastní.

Co jsou fronty služby Azure Service Bus?

Service Bus je systém zprostředkovatele zpráv určený pro podnikové aplikace. Tyto aplikace často využívají více komunikačních protokolů, mají různé kontrakty dat a vyšší požadavky na zabezpečení a můžou zahrnovat cloudové i místní služby. Service Bus je postavený na vyhrazené infrastruktuře pro zasílání zpráv vytvořené přímo pro tyto scénáře.

Obě tyto služby jsou založené na konceptu fronty, kde odeslané zprávy zůstanou, dokud cíl není připravený je přijmout.

Co jsou témata služby Azure Service Bus?

Témata služby Azure Service Bus jsou jako fronty, ale mohou mít více odběratelů. Když je zpráva odeslána do tématu místo fronty, může se aktivovat více komponent, aby dělaly svou práci. Představte si, že uživatel naslouchá skladbě v aplikaci pro sdílení hudby. Mobilní aplikace může odeslat zprávu do tématu „Poslechnuto“. Toto téma bude mít odběr pro „UpdateUserListenHistory“ a jiný odběr pro „UpdateArtistsFanList“. Každá z těchto funkcí je zpracovávána jinou komponentou, která obdrží vlastní kopii zprávy.

Interně témata používají fronty. Když přidáte příspěvek do tématu, zpráva se zkopíruje a přemístí do fronty pro jednotlivé odběry. Fronta znamená, že kopírování zpráv zůstává v provozu, aby bylo možné zpracovat každou větev odběru, i když zpracování této součásti je příliš zaneprázdněné, aby se zachovalo.

Výhody front

Infrastruktury front můžou podporovat mnoho pokročilých funkcí, díky kterým jsou užitečné následujícími způsoby:

Vyšší spolehlivost

Distribuované aplikace využívají fronty jako dočasné umístění úložiště pro zprávy, které čekají na doručení do cílové komponenty. Zdrojová komponenta může přidat zprávu do fronty a cílová komponenta může načíst zprávu ze začátku fronty za účelem zpracování. Fronty zvyšují spolehlivost výměny zpráv, protože v dobách vysokého zatížení můžou zprávy počkat, dokud nebude cílová komponenta připravená je zpracovat.

Záruky doručení zpráv

Systémy řazení do front většinou zaručují doručení každé zprávy ve frontě do cílové komponenty. Přístupy k těmto zárukám ale můžou být různé:

  • Alespoň jedno doručení: V tomto přístupu je zaručeno doručení každé zprávy alespoň jedné ze součástí, které načítají zprávy z fronty. Upozorňujeme však, že za určitých okolností je možné, že stejná zpráva může být doručena vícekrát. Pokud například existují dvě instance webové aplikace načítající zprávy z fronty, většinou se každá zpráva doručí jenom do jedné z těchto instancí. Pokud však zpracování zprávy trvá dlouhou dobu a vyprší časový limit, může se zpráva odeslat i do druhé instance. To by měl kód vaší webové aplikace zohledňovat.

  • Nanejvýš jedno doručení: V tomto přístupu není zaručené doručení každé zprávy a existuje malá šance, že nedorazí. Na rozdíl od doručení alespoň jednou ale není možné, že se zpráva doručí dvakrát. Tento přístup se někdy označuje jako automatická detekce duplicit.

  • FiFO (First-In-First-Out): Ve většině systémů zasílání zpráv zprávy obvykle opustí frontu ve stejném pořadí, v jakém byly přidány, ale měli byste zvážit, jestli je toto doručení zaručené. Pokud vaše distribuovaná aplikace vyžaduje zpracování zpráv přesně ve správném pořadí, je potřeba zvolit systém řazení do front, který obsahuje záruku FIFO.

Podpora transakcí

Některé úzce související skupiny zpráv můžou způsobit problémy při selhání doručení jedné zprávy ve skupině.

Představte si například aplikaci pro elektronické obchodování. Když uživatel vybere tlačítko Koupit , může se vygenerovat řada zpráv a odeslat je do různých cílů zpracování:

  • Zpráva s podrobnostmi o objednávce se odešle do centra pro vyřizování objednávek.
  • Zpráva s celkovým součtem a platebními údaji se odešle procesoru platebních karet.
  • Zpráva s informacemi o vyúčtování se odešle do databáze, která pro zákazníka vygeneruje fakturu.

V takovém případě chceme mít jistotu, že se zpracují buď všechny zprávy, nebo žádná z nich. Nebudeme ve firmě dlouho, pokud se zpráva o platební kartě nedoručí a všechny naše objednávky jsou splněny bez platby! Takovýmto potížím se můžete vyhnout tím, že obě zprávy seskupíte do transakce. Transakce zpráv jsou úspěšné nebo neúspěšné jako jedna jednotka, stejně jako v databázovém světě. Pokud se nepodaří doručit zprávu s údaji o platební kartě, nepodaří se ani doručit zprávu s podrobnostmi o objednávce.

Kterou službu mám zvolit?

Porozumíte tomu, že komunikační strategie pro tuto architekturu by měla být zprávou, musíte zvolit, jestli se mají používat fronty Azure Storage nebo Azure Service Bus. Obě technologie můžete použít k ukládání a doručování zpráv mezi komponentami. Každá z nich má mírně odlišnou sadu funkcí, což znamená, že můžete zvolit jednu nebo druhou nebo použít obojí v závislosti na problému, který řešíte.

Fronty služby Service Bus použijte v případě, že:

  • Potřebujete záruku nanejvýš jednoho doručení.
  • Potřebujete záruku FIFO.
  • Potřebujete seskupovat zprávy do transakcí.
  • Chcete dostávat zprávy bez dotazování fronty.
  • Potřebujete na fronty uplatnit řízení přístupu na základě role.
  • Potřebujete zpracovat zprávy větší než 64 kB, ale méně než 100 MB. Maximální velikost zprávy podporovaná úrovní Standard je 256 kB a úroveň Premium je 100 MB.
  • Velikost fronty nebude větší než 1 TB. Maximální velikost fronty pro úroveň Standard je 80 GB a pro úroveň Premium je to 1 TB.
  • Chcete publikovat a přijímat dávky zpráv.

Témata služby Service Bus použijte v případě, že:

  • Potřebujete všechny funkce poskytované frontami služby Service Bus a kromě toho implementujte vzor pub-sub, kde je možné zprávy směrovat do jednoho z více odběrů, z nichž každý má vlastní nezávislé příjemce.

Služba Queue Storage nenabízí tak širokou škálu funkcí, ale pokud žádnou z těchto funkcí nepotřebujete, může to být jednodušší volba. Kromě toho je to nejlepší řešení, pokud má vaše aplikace některé z následujících požadavků.

Službu Queue Storage použijte v případě, že:

  • Potřebujete záznam pro audit pro všechny zprávy, které projdou frontou.
  • Očekává, že fronta překročí velikost 1 TB.
  • Chcete sledovat průběh zpracování zprávy ve frontě.

Fronta je jednoduché dočasné úložiště zpráv odesílaných mezi komponentami distribuované aplikace. Fronty slouží k uspořádání zpráv a hladkému zvládnutí nepředvídatelných špiček zatížení.

Pokud chcete jednoduchý systém front se snadným kódováním, použijte fronty služby Storage. Pokud máte pokročilejší potřeby, použijte fronty služby Service Bus. Pokud máte pro jednu zprávu více cílů, ale potřebujete chování jako u front, použijte témata služby Service Bus.