Kies een bezorging op basis van berichten met wachtrijen

Voltooid

Stel dat u de architectuur voor uw toepassing voor het delen van muziek plant. U wilt ervoor zorgen dat muziekbestanden betrouwbaar van de mobiele app naar de web-API worden geüpload. Daarna wilt u informatie over nieuwe nummers rechtstreeks in de app aanbieden wanneer een artiest nieuwe muziek aan de collectie toevoegt. Dit scenario is een perfect gebruik van een systeem op basis van berichten en Azure biedt twee oplossingen voor dit probleem:

  • Azure Queue Storage
  • Azure Service Bus

Wat is Azure Queue Storage?

Queue Storage is een service die gebruikmaakt van Azure Storage voor het opslaan van grote aantallen berichten die overal ter wereld veilig toegankelijk zijn met een eenvoudige, op REST gebaseerde interface. Wachtrijen kunnen miljoenen berichten bevatten en zijn alleen beperkt door de capaciteit van het opslagaccount dat er eigenaar van is.

Wat zijn Azure Service Bus-wachtrijen?

Service Bus is een berichtenbrokersysteem dat is bedoeld voor bedrijfstoepassingen. Deze apps maken vaak gebruik van meerdere communicatieprotocollen, hebben verschillende gegevenscontracten en hogere beveiligingsvereisten en kunnen zowel cloud- als on-premises services bevatten. Service Bus is gebaseerd op een speciale infrastructuur voor berichten die voor precies deze scenario's is ontworpen.

Beide services zijn gebaseerd op het idee van een wachtrij waarin verzonden berichten worden vastgehouden totdat het doel gereed is om ze te ontvangen.

Wat zijn Azure Service Bus-onderwerpen?

Azure Service Bus-onderwerpen zijn vergelijkbaar met wachtrijen, maar kunnen meerdere abonnees hebben. Wanneer een bericht wordt verzonden naar een onderwerp in plaats van een wachtrij, kunnen meerdere onderdelen worden geactiveerd om hun taak uit te voeren. Stel dat een gebruiker naar een nummer luistert in een toepassing voor het delen van muziek. De mobiele app verzendt mogelijk een bericht naar het onderwerp Geluisterd. Dat onderwerp heeft een abonnement op 'UpdateUserListenHistory' en een ander abonnement op 'UpdateArtistsFanList'. Elk van deze functies wordt verwerkt door een ander onderdeel dat een eigen kopie van het bericht ontvangt.

Intern worden wachtrijen gebruikt voor onderwerpen. Wanneer u een bericht bij een onderwerp plaatst, wordt het gekopieerd en in de wachtrij voor elk abonnement geplaatst. De wachtrij betekent dat het kopiëren van berichten door elke abonnementsvertakking moet worden verwerkt, zelfs als het onderdeel dat het abonnement verwerkt te druk is om bij te blijven.

Voordelen van wachtrijen

Wachtrijinfrastructuren kunnen veel geavanceerde functies ondersteunen die ze op de volgende manieren nuttig maken:

Verbeterde betrouwbaarheid

Wachtrijen worden door gedistribueerde toepassingen gebruikt als een tijdelijke opslaglocatie voor berichten, waarvan de levering aan een bestemmingsonderdeel in behandeling is. Het brononderdeel kan een bericht aan de wachtrij toevoegen en onderdelen van de bestemming kunnen het bericht vooraan in de wachtrij voor verwerking ophalen. Dergelijke wachtrijen verhogen de betrouwbaarheid van de berichtuitwisseling, omdat berichten op piektijden in de wachtrij kunnen blijven staan tot ze door een doelonderdeel kunnen worden verwerkt.

Afleveringsgaranties voor berichten

Wachtrijsystemen bieden meestal de garantie dat elk bericht in de wachtrij wordt afgeleverd bij een doelonderdeel. Deze garanties kunnen echter op verschillende methoden zijn gebaseerd:

  • At-Least-Once Delivery: Bij deze benadering wordt gegarandeerd dat elk bericht wordt afgeleverd op ten minste één van de onderdelen die berichten uit de wachtrij ophalen. Houd er echter rekening mee dat in bepaalde omstandigheden hetzelfde bericht meerdere keren kan worden bezorgd. Bijvoorbeeld: als berichten uit een wachtrij worden opgehaald door twee exemplaren van een web-app, wordt het bericht gewoonlijk slechts bij één van beide exemplaren afgeleverd. Als het echter lang duurt voordat één exemplaar het bericht verwerkt en een time-out verloopt, kan het bericht ook naar het andere exemplaar worden verzonden. U dient met deze mogelijkheid rekening te houden in de code van uw web-app-ontwerp.

  • At-Most-Once Delivery: In deze benadering is elk bericht niet gegarandeerd voor bezorging en is er een kleine kans dat het niet aankomt. In tegenstelling tot de bezorging ten minste één keer, is er echter geen kans dat het bericht twee keer wordt bezorgd. Dit wordt soms automatische duplicaatdetectie genoemd.

  • First-In-First-Out (FIFO):in de meeste berichtensystemen blijven berichten meestal in dezelfde volgorde staan waarin ze zijn toegevoegd, maar u moet overwegen of deze levering gegarandeerd is. Als het voor uw gedistribueerde toepassing nodig is dat berichten precies in de juiste volgorde worden verwerkt, moet u kiezen voor een wachtrijsysteem met FIFO-garantie.

Transactionele ondersteuning

Sommige nauw verwante groepen berichten kunnen problemen veroorzaken wanneer de bezorging mislukt voor één bericht in de groep.

Neem bijvoorbeeld een e-commercetoepassing. Wanneer de gebruiker de knop Kopen selecteert, kan er een reeks berichten worden gegenereerd en verzonden naar verschillende verwerkingsbestemmingen:

  • Een bericht met details van de order wordt verzonden naar een uitvoercentrum
  • Er wordt een bericht met het totaal en de betalingsgegevens verzonden naar een creditcardverwerker
  • Een bericht met de ontvangstinformatie wordt verzonden naar een database om een factuur voor de klant te genereren

In dit geval willen we zeker weten dat alle berichten worden verwerkt, of dat ze allemaal niet worden verwerkt. We zullen niet lang in bedrijf zijn als het creditcardbericht niet wordt bezorgd en al onze bestellingen worden voldaan zonder betaling! U kunt dit soort problemen voorkomen door de twee berichten te combineren in een transactie. Berichttransacties slagen of mislukken als één eenheid, net als in de databasewereld. Als de bezorging van het bericht met de creditcardgegevens mislukt, mislukt ook het bericht met de ordergegevens.

Welke service moet ik kiezen?

Als u weet dat de communicatiestrategie voor deze architectuur een bericht moet zijn, moet u kiezen of u Azure Storage-wachtrijen of Azure Service Bus wilt gebruiken. U kunt beide technologieën gebruiken om berichten tussen uw onderdelen op te slaan en af te leveren. Elk heeft een iets andere functieset, wat betekent dat u een of meer functies kunt kiezen, of beide kunt gebruiken, afhankelijk van het probleem dat u wilt oplossen.

Gebruik Service Bus-wachtrijen als:

  • u een garantie voor At-Most-Once-levering wilt hebben.
  • u een FIFO-garantie wilt.
  • u berichten wilt groeperen in transacties.
  • u berichten wilt ontvangen zonder polling van de wachtrij.
  • u een model op basis van de rol aan de wachtrijen moet bieden.
  • Berichten moeten worden verwerkt die groter zijn dan 64 KB, maar kleiner dan 100 MB. De maximale berichtgrootte die wordt ondersteund door de standard-laag is 256 kB en de Premium-laag is 100 MB.
  • De wachtrijgrootte wordt niet groter dan 1 TB. De maximale wachtrijgrootte voor de standard-laag is 80 GB en voor de Premium-laag is dit 1 TB.
  • u batches van berichten wilt publiceren en gebruiken.

Gebruik Service Bus-onderwerpen als:

  • Alle functies van Service Bus-wachtrijen nodig hebben en daarnaast een pub-subpatroon implementeren waarin berichten kunnen worden gerouteerd naar een van meerdere abonnementen, elk met eigen onafhankelijke ontvangers

Wachtrijopslag is niet zo uitgebreid, maar als u geen van deze functies nodig hebt, kan het een eenvoudigere keuze zijn. Bovendien is het de beste oplossing als uw app een van de volgende vereisten heeft.

Gebruik wachtrij-opslag als:

  • u een audittrail nodig heeft van alle berichten die door de wachtrij gaan.
  • Verwacht dat de wachtrij groter is dan 1 TB.
  • u de voortgang wilt bijhouden voor het verwerken van een bericht in de wachtrij.

Een wachtrij is een eenvoudige, tijdelijke opslaglocatie voor berichten die worden verzonden tussen de onderdelen van een gedistribueerde toepassing. Gebruik een wachtrij om berichten te rangschikken en plotselinge pieken correct af te handelen.

Gebruik Storage-wachtrijen wanneer u een eenvoudig, gebruiksvriendelijk wachtrijsysteem nodig hebt. Gebruik Service Bus-wachtrijen als u behoefte hebt aan een geavanceerder wachtrijsysteem. Gebruik Service Bus-onderwerpen als u meerdere bestemmingen voor één bericht hebt, maar gedrag vergelijkbaar met wachtrijen nodig hebt.