Upravit

Sdílet prostřednictvím


Model prioritní fronty

Azure Service Bus

Model prioritní fronty umožňuje úlohám zpracovávat úlohy s vysokou prioritou rychleji než úkoly s nižší prioritou. Tento model používá zprávy odeslané do jedné nebo více front a je užitečný v aplikacích, které nabízejí různé záruky na úrovni služeb jednotlivým klientům.

Kontext a problém

Úlohy často potřebují spravovat a zpracovávat úlohy s různými úrovněmi důležitosti a naléhavosti. Některé úkoly vyžadují okamžitou pozornost, zatímco ostatní můžou čekat. Selhání řešení úloh s vysokou prioritou může mít vliv na uživatelské prostředí a porušení smluv o úrovni služeb (SLA).

Aby úlohy efektivně zpracovávaly na základě jejich priority, potřebují úlohy mechanismus pro stanovení priority a provádění úkolů odpovídajícím způsobem. Úlohy obvykle zpracovávají úkoly v pořadí, v jakém přicházejí, pomocí struktury fronty FIFO (first-in). Tento přístup nebere v úvahu různou důležitost úkolů.

Řešení

Prioritní fronty umožňují úlohám zpracovávat úlohy na základě jejich priority místo pořadí doručení. Aplikace, která odesílá zprávu do fronty, přiřadí zprávě prioritu a příjemci zprávy zpracovávají podle priority. Vzor fronty priority použijte, pokud máte následující požadavky:

  • Zpracujte úkoly s různou naléhavostí a důležitostí. Máte úkoly s různými úrovněmi naléhavosti a důležitosti a potřebujete zajistit, abyste zpracovávali důležitější úkoly před méně kritickými úkoly.

  • Zpracování různých smluv o úrovni služeb Klientům nabízíte různé záruky na úrovni služeb a potřebujete zajistit, aby klienti s vysokou prioritou dostávali lepší výkon a dostupnost.

  • Pojmout různé potřeby správy úloh Máte úlohu, která potřebuje okamžitě řešit určité úkoly a méně naléhavé úkoly můžou čekat.

Existují dva hlavní přístupy k implementaci modelu Prioritní fronta:

  • Jedna fronta: Všechny zprávy se odesílají do jedné fronty a každá zpráva má přiřazenou prioritu.

  • Více front: Pro každou prioritu zprávy se používají samostatné fronty.

Jedna fronta

S jednou frontou přiřadí aplikace (producent) prioritu každé zprávě a odešle zprávu do fronty. Fronta objednává zprávy podle priority a zajišťuje, aby příjemci zpracovávali zprávy s vyšší prioritou před zprávami s nižší prioritou.

Diagram znázorňující mechanismus řazení front, který podporuje stanovení priorit zpráv
Obrázek č. 1. Architektura jedné fronty a fondu příjemců

Více front

Více front umožňuje oddělit zprávy podle priority. Aplikace přiřadí každé zprávě prioritu a směruje zprávu do fronty odpovídající její prioritě. Příjemci zpracovávají zprávy. Řešení s více frontou používá buď jeden fond příjemců, nebo více fondů příjemců.

Více fondů příjemců

U více fondů příjemců má každá fronta vyhrazené prostředky příjemců. Fronty s vyšší prioritou by měly používat více příjemců nebo vyšší úrovně výkonu ke zpracování zpráv rychleji než fronty s nižší prioritou.

Pokud máte, použijte více fondů příjemců:

  • Přísné požadavky na výkon: V případě, že různé priority úkolů mají přísné požadavky na výkon, které musí být splněny nezávisle, je nutné splnit více fondů příjemců.
  • Požadavky na vysokou spolehlivost: Pro aplikace, u kterých je důležitá spolehlivost a izolace chyb, je vyžadováno více fondů příjemců. Problémy v jedné frontě nesmí mít vliv na jiné fronty.
  • Složité aplikace: Přínosné pro složité aplikace s úlohami, které vyžadují různé charakteristiky zpracování a záruky výkonu pro různé úlohy.

Diagram znázorňující použití samostatných front zpráv pro každou prioritu
Obrázek č. 2. Architektura více front a více fondů příjemců

Fond s jedním příjemcem

S jedním fondem příjemců sdílejí všechny fronty jeden fond příjemců. Příjemci zpracovávají zprávy z fronty s nejvyšší prioritou jako první a zpracovávají pouze zprávy z front s nižší prioritou, pokud neexistují žádné zprávy s vysokou prioritou. V důsledku toho fond příjemců vždy zpracovává zprávy s vyšší prioritou před zprávami s nižší prioritou. Toto nastavení může vést k neustálému zpoždění zpráv s nižší prioritou a potenciálně nikdy ke zpracování.

Použijte jeden fond příjemců pro:

  • Jednoduchá správa: Jeden fond příjemců je vhodný pro aplikaci, kde je prioritou snadné nastavení a údržby. Snižuje složitost konfigurace a monitorování.
  • Potřeby sjednoceného zpracování: Jeden fond příjemců je užitečný, když je přesná povaha příchozích úkolů podobná.

Diagram znázorňující použití samostatných front zpráv pro každou prioritu
Obrázek č. 3. Architektura více front a jednoho fondu příjemců

Doporučení pro model prioritní fronty

Při rozhodování o implementaci vzoru prioritní fronty zvažte následující doporučení:

Obecná doporučení

  • Jasně definujte priority. Vytvořte jedinečné a jasné úrovně priority, které jsou pro vaše řešení relevantní. Například zpráva s vysokou prioritou může vyžadovat zpracování do 10 sekund. Určete požadavky na zpracování položek s vysokou prioritou a odpovídajícím způsobem přidělte potřebné prostředky.

  • Dynamicky upravte fondy příjemců. Škálujte velikost fondů příjemců na základě délky fronty, kterou obsluhují.

  • Určete prioritu úrovní služeb. Implementujte prioritní fronty pro splnění obchodních potřeb, které vyžadují prioritní dostupnost nebo výkon. Různé skupiny zákazníků můžou například přijímat různé úrovně služeb, aby zákazníci s vysokou prioritou mohli dosáhnout lepšího výkonu a dostupnosti.

  • Zajistěte zpracování s nízkou prioritou. Ve frontách, které podporují stanovení priority zpráv, dynamicky zvyšte prioritu zastaralých zpráv, pokud systém umožňuje zajistit, aby se zprávy s nízkou prioritou nakonec zpracovávaly.

  • Zvažte náklady na frontu. Mějte na paměti finanční a zpracovávané náklady spojené s kontrolou front. Některé služby fronty účtují poplatky za účtování, načítání a dotazování zpráv, které se můžou zvýšit o počet front.

Doporučení pro více front

  • Monitorujte rychlost zpracování. Aby se zajistilo, že se zprávy zpracovávají očekávaným tempem, nepřetržitě monitorujte rychlost zpracování front s vysokou a nízkou prioritou.

  • Minimalizujte náklady. Zpracování kritických úloh okamžitě s dostupnými příjemci Naplánujte méně důležité úlohy na pozadí během méně zaneprázdněných časů.

Doporučení pro jeden fond příjemců

  • Implementujte preemption a pozastavení. Rozhodněte se, jestli musí být všechny položky s vysokou prioritou zpracovány před všemi položkami s nižší prioritou. Použijte algoritmus, který zajišťuje, že fronty s vysokou prioritou se vždy obsluhují před frontami s nižší prioritou při použití jednoho fondu příjemců pro více front.

  • Optimalizujte náklady. Optimalizujte provozní náklady škálováním počtu příjemců při použití přístupu s jednou frontou. Zprávy s vysokou prioritou se nejprve zpracovávají, ale možná pomaleji, zatímco zprávy s nižší prioritou můžou čelit delším zpožděním.

Návrh úloh

Architekt by měl vyhodnotit, jak model prioritní fronty může řešit cíle a principy popsané v pilířích architektury Azure Well-Architected Framework. Příklad:

Pilíř Jak tento model podporuje cíle pilíře
Rozhodnutí o návrhu spolehlivosti pomáhají vaší úloze stát se odolnou proti selhání a zajistit, aby se po selhání obnovila do plně funkčního stavu. Oddělení položek na základě obchodní priority umožňuje soustředit se na nejdůležitější práci na spolehlivost.

- RE:02 Kritické toky
- RE:07 Úlohy na pozadí
Efektivita výkonu pomáhá vaší úloze efektivně splňovat požadavky prostřednictvím optimalizací škálování, dat a kódu. Oddělení položek na základě obchodní priority umožňuje soustředit se na výkon na většinu práce citlivé na čas.

- PE:09 Kritické toky

Stejně jako u jakéhokoli rozhodnutí o návrhu zvažte jakékoli kompromisy proti cílům ostatních pilířů, které by mohly být s tímto vzorem zavedeny.

Příklad vzoru prioritní fronty

Následující příklad na GitHubu ukazuje implementaci modelu Prioritní fronty pomocí služby Azure Service Bus.

Diagram znázorňující, jak implementovat prioritní frontu pomocí služby Service Bus
Obrázek č. 4. Architektura příkladu PriorityQueue na GitHubu

Tady je přehled architektury:

  • Aplikace (producent): Příklad obsahuje aplikaci (PriorityQueueSender), která vytváří zprávy a přiřazuje vlastní vlastnost volanou Priority v každé zprávě. Priority má hodnotu High nebo Low.

  • Zprostředkovatel zpráv a fronty: V příkladu se jako zprostředkovatel zpráv používá Azure Service Bus. Používá dvě fronty služby Azure Service Bus, jednu pro každou prioritu zpráv (High a Low). Aplikace (producent) odesílá zprávy do správné fronty na základě zprávy Priority.

  • Více fondů příjemců: Příklad používá více fondů příjemců (PriorityQueueConsumerHigh a PriorityQueueConsumerLow) vyhrazených ke čtení zpráv z každé fronty.

Role v ukázkové architektuře Příklad služby Azure Název v příkladu
Aplikace Aplikace Azure Functions PriorityQueueSender
Zprostředkovatel front zpráv Azure Service Bus <váš obor názvů služby Service Bus>
Fronty zpráv Fronty Azure Service Bus <názvy front>
Příjemci Aplikace Azure Functions PriorityQueueConsumerHigh
PriorityQueueConsumerLow

Při implementaci tohoto modelu vám můžou být užitečné následující vzory:

  • Model konkurenčních příjemců: Tento model zahrnuje implementaci více příjemců, kteří paralelně naslouchají stejným úlohám fronty a procesů za účelem zvýšení propustnosti. Každá zpráva zpracovává pouze jeden příjemce. Článek obsahuje podrobné informace o výhodách a nevýhodách tohoto přístupu.

  • Model omezování: Tento model lze implementovat pomocí front ke správě sazeb požadavků. Díky využití prioritního zasílání zpráv můžou být žádosti od kritických aplikací nebo zákazníků s vysokou hodnotou prioritní upřednostňovány před méně důležitými.