Een op berichten gebaseerde bezorging met wachtrijen kiezen
Stel dat u de architectuur voor uw toepassing voor het delen van muziek plant. U wilt ervoor zorgen dat muziekbestanden betrouwbaar vanuit de mobiele app naar de web-API worden geüpload. Vervolgens wilt u de details over nieuwe nummers rechtstreeks aan de app leveren wanneer een artiest nieuwe muziek toevoegt aan hun collectie. Dit scenario is een perfect gebruik van een systeem op basis van berichten en Azure biedt twee oplossingen voor dit probleem:
- Azure Queue-opslag
- Azure Service Bus
Wat is Azure Queue Storage?
Queue Storage is een service die gebruikmaakt van Azure Storage om grote aantallen berichten op te slaan die veilig toegankelijk zijn vanaf elke locatie ter wereld met behulp van een eenvoudige REST-interface. Wachtrijen kunnen miljoenen berichten bevatten, alleen beperkt door de capaciteit van het opslagaccount waarvan het de eigenaar is.
Wat is 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 gebouwd op basis van een toegewezen berichteninfrastructuur die is ontworpen voor precies deze scenario's.
Beide services zijn gebaseerd op het idee van een wachtrij, die verzonden berichten bevat totdat het doel klaar is om ze te ontvangen.
Wat zijn Azure Service Bus-onderwerpen?
Azure Service Bus-onderwerpen zijn net als 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 werk te doen. Stel dat een gebruiker naar een nummer luistert in een toepassing voor het delen van muziek. De mobiele app kan een bericht verzenden naar een onderwerp Listened
. Dit onderwerp heeft een abonnement voor UpdateUserListenHistory
en een ander abonnement voor UpdateArtistsFanList
. Elk van deze functies wordt verwerkt door een ander onderdeel dat een eigen kopie van het bericht ontvangt.
Onderwerpen gebruiken intern wachtrijen. Wanneer u een bericht naar een onderwerp plaatst, wordt het bericht voor elk abonnement gekopieerd en in de wachtrij geplaatst. De wachtrij zorgt ervoor dat een kopie van het bericht kan blijven bestaan voor verwerking door elke abonnementsvertakking, zelfs als de component die het abonnement verwerkt te druk is om bij te houden.
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 die wachten op bezorging naar een bestemmingscomponent. Het brononderdeel kan een bericht toevoegen aan de wachtrij en doelonderdelen kunnen het bericht vooraan in de wachtrij ophalen voor verwerking. Wachtrijen verhogen de betrouwbaarheid van de berichtenuitwisseling, omdat berichten op momenten van hoge vraag kunnen wachten totdat een doelonderdeel gereed is om ze te verwerken.
Garanties voor berichtbezorging
Wachtrijsystemen garanderen meestal de bezorging van elk bericht in de wachtrij naar een doelonderdeel. Deze garanties kunnen echter verschillende benaderingen aannemen:
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 wordt bezorgd. Als er bijvoorbeeld twee exemplaren van een web-app zijn die berichten ophalen uit een wachtrij, gaat elk bericht meestal naar slechts één van deze exemplaren. 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. Uw web-app-code moet worden ontworpen met deze mogelijkheid in gedachten.
Op-Most-Once Levering: Bij deze benadering is de levering van elk bericht niet gegarandeerd en is er een kleine kans dat het bericht mogelijk niet aankomt. In tegenstelling tot at-Least-Once levering, is er echter geen kans dat het bericht twee keer wordt bezorgd. Dit wordt soms ook wel automatische dubbele detectiegenoemd.
FIFO -First-Out (First-In-: In de meeste berichtensystemen laten berichten meestal de wachtrij in dezelfde volgorde staan waarin ze zijn toegevoegd, maar u moet overwegen of deze levering gegarandeerd is. Als uw gedistribueerde toepassing vereist dat berichten precies in de juiste volgorde worden verwerkt, moet u een wachtrijsysteem kiezen dat een FIFO-garantie bevat.
Transactionele ondersteuning
Sommige nauw verwante groepen berichten kunnen problemen veroorzaken wanneer de bezorging mislukt voor één bericht in de groep.
Denk bijvoorbeeld aan een e-commercetoepassing. Wanneer de gebruiker de knop Kopen selecteert, kan er een reeks berichten worden gegenereerd en verzonden naar verschillende verwerkingsbestemmingen:
- Er wordt een bericht met de ordergegevens verzonden naar een uitvoeringscentrum
- Er wordt een bericht met het totaal en de betalingsgegevens verzonden naar een creditcardverwerker
- Een bericht met de ontvangstgegevens wordt verzonden naar een database om een factuur voor de klant te genereren
In dit geval willen we ervoor zorgen dat alle berichten worden verwerkt of dat ze niet worden verwerkt. We zijn niet lang bezig als het creditcardbericht niet wordt afgeleverd en al onze bestellingen worden uitgevoerd zonder betaling. U kunt dit soort problemen voorkomen door de twee berichten in een transactie te groeperen. Boodschaptransacties slagen of mislukken als een enkel geheel, net als in de databasewereld. Als de bezorging van het bericht met creditcardgegevens mislukt, zal het bericht met ordergegevens ook mislukken.
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 leveringsgarantie voor At-Most-Once is nodig.
- U hebt een FIFO-garantie nodig.
- Berichten moeten worden gegroepeerd in transacties.
- U wilt berichten ontvangen zonder de wachtrij te peilen.
- Moet een op rollen gebaseerd toegangsmodel voor de wachtrijen 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.
- Wilt u batches berichten publiceren en gebruiken.
Gebruik Service Bus-onderwerpen als u:
- 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
Queue Storage is niet helemaal zo uitgebreid, maar als u geen van deze functies nodig hebt, kan het een eenvoudigere keuze zijn. Daarnaast is het de beste oplossing als uw app een van de volgende vereisten heeft.
Gebruik Queue Storage als u:
- U hebt een audittrail nodig van alle berichten die door de wachtrij lopen.
- Verwacht dat de wachtrij groter is dan 1 TB.
- Wilt u de voortgang 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 organiseren en onvoorspelbare pieken in de vraag correct af te handelen.
Gebruik Storage-wachtrijen wanneer je een eenvoudig en gemakkelijk te programmeren wachtrijsysteem wilt. Gebruik Service Bus-wachtrijen voor meer geavanceerde behoeften. Als u meerdere bestemmingen voor één bericht hebt, maar wachtrijachtig gedrag nodig hebt, gebruikt u Service Bus-onderwerpen.