Bewerken

Delen via


Patroon voor wachtrij met prioriteit

Azure Service Bus

Met het prioriteitswachtrijpatroon kan een workload taken met een hoge prioriteit sneller verwerken dan taken met een lagere prioriteit. Dit patroon maakt gebruik van berichten die naar een of meer wachtrijen worden verzonden en is handig in toepassingen die verschillende serviceniveaugaranties bieden aan afzonderlijke clients.

Context en probleem

Workloads moeten vaak taken beheren en verwerken met verschillende urgentieniveaus en urgentie. Voor sommige taken is direct aandacht vereist, terwijl anderen kunnen wachten. Het oplossen van taken met hoge prioriteit kan van invloed zijn op gebruikerservaring en sla's (Service Level Agreements) schenden.

Als u taken efficiënt wilt afhandelen op basis van hun prioriteit, hebben workloads een mechanisme nodig om taken dienovereenkomstig te prioriteren en uit te voeren. Normaal gesproken verwerken workloads taken in de volgorde waarin ze binnenkomen, met behulp van een FIFO-wachtrijstructuur (first-in, first-out). Deze benadering houdt geen rekening met het verschillende belang van taken.

Oplossing

Met wachtrijen met prioriteit kunnen workloads taken verwerken op basis van hun prioriteit in plaats van hun aankomstvolgorde. De toepassing die een bericht naar de wachtrij verzendt, wijst een prioriteit toe aan het bericht en consumenten verwerken de berichten op prioriteit. Gebruik het patroon prioriteitswachtrij als u de volgende vereisten hebt:

  • Taken van verschillende urgentie en urgentie verwerken. U hebt taken met verschillende urgentieniveaus en urgentieniveaus en u moet ervoor zorgen dat u meer kritieke taken verwerkt voordat ze minder kritiek zijn.

  • Verschillende serviceovereenkomsten verwerken. U biedt verschillende serviceniveaugaranties voor clients die vereist zijn en moet ervoor zorgen dat clients met een hoge prioriteit betere prestaties en beschikbaarheid krijgen.

  • Geschikt voor verschillende behoeften voor workloadbeheer. U hebt een workload die bepaalde taken onmiddellijk moet aanpakken en minder urgente taken kunnen wachten.

Er zijn twee hoofdmethoden voor het implementeren van het patroon Prioriteitswachtrij:

  • Eén wachtrij: alle berichten worden naar één wachtrij verzonden en elk bericht heeft een prioriteit toegewezen.

  • Meerdere wachtrijen: afzonderlijke wachtrijen worden gebruikt voor elke berichtprioriteit.

Eén wachtrij

Met één wachtrij wijst de toepassing (producent) een prioriteit toe aan elk bericht en verzendt het bericht naar de wachtrij. De wachtrij bestelt berichten op prioriteit, zodat consumenten berichten met een hogere prioriteit verwerken vóór berichten met een lagere prioriteit.

Diagram dat een wachtrijmechanisme illustreert dat ondersteuning biedt voor prioriteitstelling van berichten.
Figuur 1. Architectuur van één wachtrij en één consumentengroep

Meerdere wachtrijen

Met meerdere wachtrijen kunt u berichten scheiden op prioriteit. De toepassing wijst een prioriteit toe aan elk bericht en stuurt het bericht door naar de wachtrij die overeenkomt met de prioriteit ervan. De gebruikers verwerken de berichten. Een oplossing voor meerdere wachtrijen maakt gebruik van één consumentengroep of meerdere consumentengroepen.

Meerdere consumentengroepen

Met meerdere consumentengroepen heeft elke wachtrij consumentenbronnen toegewezen. Wachtrijen met een hogere prioriteit moeten meer consumenten of hogere prestatielagen gebruiken om berichten sneller te verwerken dan wachtrijen met lagere prioriteit.

Gebruik meerdere consumentengroepen wanneer u het volgende hebt:

  • Strikte prestatievereisten: meerdere consumentengroepen zijn nodig wanneer verschillende taakprioriteiten strikte prestatievereisten hebben waaraan onafhankelijk moet worden voldaan.
  • Hoge betrouwbaarheidsbehoeften: er zijn meerdere consumentengroepen vereist voor toepassingen waarbij betrouwbaarheid en foutisolatie essentieel zijn. Problemen in de ene wachtrij mogen geen invloed hebben op andere wachtrijen.
  • Complexe toepassingen: Nuttig voor complexe toepassingen met taken waarvoor verschillende verwerkingskenmerken en prestatiegaranties voor verschillende taken zijn vereist.

Diagram dat het gebruik van afzonderlijke berichtenwachtrijen voor elke prioriteit illustreert.
Figuur 2. Architectuur van meerdere wachtrijen en meerdere consumentengroepen.

Eén consumentengroep

Met één consumentengroep delen alle wachtrijen één groep consumenten. Gebruikers verwerken berichten van de wachtrij met de hoogste prioriteit eerst en verwerken alleen berichten van wachtrijen met lagere prioriteit wanneer er geen berichten met hoge prioriteit zijn. Als gevolg hiervan verwerkt de groep met één consumentengroep altijd berichten met een hogere prioriteit voordat berichten met een lagere prioriteit worden verwerkt. Deze instelling kan ertoe leiden dat berichten met een lagere prioriteit voortdurend worden vertraagd en mogelijk nooit worden verwerkt.

Gebruik één consumentengroep voor:

  • Eenvoudig beheer: Een individuele consumentengroep is geschikt voor toepassingen waarbij het instellen en onderhoud een prioriteit is. Het vermindert de complexiteit van configuratie en bewaking.
  • Geïntegreerde verwerkingsbehoeften: één consumentengroep is handig wanneer de exacte aard van de binnenkomende taken vergelijkbaar is.

Diagram dat het gebruik van afzonderlijke berichtenwachtrijen voor elke prioriteit illustreert.
Figuur 3. Architectuur van meerdere wachtrijen en één consumentengroep.

Aanbevelingen voor het patroon Prioriteitswachtrij

Houd rekening met de volgende aanbevelingen wanneer u besluit hoe u het prioriteitswachtrijpatroon implementeert:

Algemene aanbevelingen

  • Prioriteiten duidelijk definiëren. Bepaal afzonderlijke en duidelijke prioriteitsniveaus die relevant zijn voor uw oplossing. Een bericht met hoge prioriteit kan bijvoorbeeld binnen 10 seconden worden verwerkt. Identificeer de vereisten voor het verwerken van items met hoge prioriteit en wijs de benodigde resources dienovereenkomstig toe.

  • Gebruikersgroepen dynamisch aanpassen. Schaal de grootte van consumentengroepen op basis van de wachtrijlengte die ze onderhouden.

  • Prioriteit geven aan serviceniveaus. Implementeer prioriteitswachtrijen om te voldoen aan bedrijfsbehoeften waarvoor prioriteit moet worden gegeven aan beschikbaarheid of prestaties. Verschillende klantgroepen kunnen bijvoorbeeld verschillende serviceniveaus ontvangen, zodat klanten met een hoge prioriteit betere prestaties en beschikbaarheid ervaren.

  • Zorg voor verwerking met lage prioriteit. In wachtrijen die prioriteit geven aan berichten, verhoogt u dynamisch de prioriteit van verouderde berichten als het systeem toestaat dat berichten met een lage prioriteit uiteindelijk worden verwerkt.

  • Houd rekening met wachtrijkosten. Houd rekening met de financiële en verwerkingskosten voor het controleren van wachtrijen. Voor sommige wachtrijservices worden kosten in rekening gebracht voor het boeken, ophalen en opvragen van berichten, wat kan toenemen met het aantal wachtrijen.

Aanbevelingen voor meerdere wachtrijen

  • Bewaak de verwerkingssnelheden. Om ervoor te zorgen dat berichten met de verwachte snelheid worden verwerkt, controleert u continu de verwerkingssnelheid van wachtrijen met hoge en lage prioriteit.

  • Kosten minimaliseren. Kritieke taken direct verwerken met beschikbare consumenten. Plan minder kritieke achtergrondtaken tijdens minder drukke tijden.

Aanbevelingen voor één consumentengroep

  • Preemption en ophanging implementeren. Bepaal of alle items met hoge prioriteit moeten worden verwerkt voor items met een lagere prioriteit. Gebruik een algoritme dat ervoor zorgt dat wachtrijen met hoge prioriteit altijd worden onderhouden voor wachtrijen met lagere prioriteit wanneer u één groep consumenten voor meerdere wachtrijen gebruikt.

  • Kosten optimaliseren. Optimaliseer de operationele kosten door het aantal consumenten terug te schalen wanneer u de benadering met één wachtrij gebruikt. Berichten met hoge prioriteit worden eerst verwerkt, maar mogelijk langzamer, terwijl berichten met een lagere prioriteit langere vertragingen kunnen ondervinden.

Workloadontwerp

Een architect moet evalueren hoe het patroon Priority Queue de doelen en principes kan aanpakken die worden behandeld in de pijlers van het Azure Well-Architected Framework. Voorbeeld:

Pijler Hoe dit patroon ondersteuning biedt voor pijlerdoelen
Beslissingen over betrouwbaarheidsontwerp helpen uw workload bestand te worden tegen storingen en ervoor te zorgen dat deze herstelt naar een volledig functionerende status nadat er een fout is opgetreden. Door items te scheiden op basis van bedrijfsprioriteit kunt u de betrouwbaarheidsinspanningen richten op het meest kritieke werk.

- RE:02 Kritieke stromen
- RE:07 Achtergrondtaken
Prestatie-efficiëntie helpt uw workload efficiënt te voldoen aan de vereisten door optimalisaties in schalen, gegevens, code. Door items te scheiden op basis van bedrijfsprioriteit kunt u zich richten op prestatie-inspanningen voor het meest tijdgevoelige werk.

- PE:09 Kritieke stromen

Net als bij elke ontwerpbeslissing moet u rekening houden met eventuele compromissen ten opzichte van de doelstellingen van de andere pijlers die met dit patroon kunnen worden geïntroduceerd.

Voorbeeld van het patroon Prioriteitswachtrij

In het volgende voorbeeld in GitHub ziet u een implementatie van het patroon Priority Queues met behulp van Azure Service Bus.

Diagram waarin wordt getoond hoe u een prioriteitswachtrij implementeert met behulp van Service Bus.
Figuur 4. Architectuur van het PriorityQueue-voorbeeld in GitHub

Hier volgt een overzicht van de architectuur:

  • Toepassing (producent): het voorbeeld heeft een toepassing (PriorityQueueSender) waarmee berichten worden gemaakt en een aangepaste eigenschap wordt toegewezen die in elk bericht wordt aangeroepen Priority . Priority heeft een waarde van High of Low.

  • Berichtenbroker en wachtrijen: In het voorbeeld wordt Azure Service Bus gebruikt als berichtbroker. Er worden twee Azure Service Bus-wachtrijen gebruikt, één voor elke berichtprioriteit (High en Low). De toepassing (producent) verzendt berichten naar de juiste wachtrij op basis van het bericht Priority.

  • Meerdere consumentengroepen: in het voorbeeld worden meerdere consumentengroepen (PriorityQueueConsumerHigh en PriorityQueueConsumerLow) gebruikt die zijn toegewezen om berichten uit elk van de wachtrijen te lezen.

Rol in voorbeeldarchitectuur Azure-service in voorbeeld Naam in voorbeeld
Toepassing Azure Functions-app PriorityQueueSender
Berichtenwachtrijbroker Azure Service Bus <uw Service Bus-naamruimte>
Berichtenwachtrijen Azure Service Bus-wachtrijen <uw wachtrijnamen>
Consumenten Azure Functions-app PriorityQueueConsumerHigh
PriorityQueueConsumerLow

De volgende patronen kunnen nuttig zijn voor u wanneer u dit patroon implementeert:

  • Patroon concurrerende consumenten: dit patroon omvat het implementeren van meerdere consumenten die parallel naar dezelfde wachtrij- en procestaken luisteren om de doorvoer te verhogen. Slechts één consument verwerkt elk bericht. Het artikel bevat gedetailleerde informatie over de voor- en nadelen van deze aanpak.

  • Beperkingspatroon: Dit patroon kan worden geïmplementeerd met behulp van wachtrijen voor het beheren van aanvraagsnelheden. Door prioriteitsberichten te gebruiken, kunnen aanvragen van kritieke toepassingen of hoogwaardige klanten prioriteit krijgen boven minder belangrijke toepassingen.