Med mönstret För anspråkskontroll kan arbetsbelastningar överföra nyttolaster utan att lagra nyttolasten i ett meddelandesystem. Mönstret lagrar nyttolasten i ett externt datalager och använder en "anspråkskontroll" för att hämta nyttolasten. Anspråkskontrollen är en unik, obskyr token eller nyckel. För att hämta nyttolasten måste program presentera token för anspråkskontroll till det externa datalagret.
Kontext och problem
Traditionella meddelandesystem är optimerade för att hantera en stor mängd små meddelanden och har ofta begränsningar för den meddelandestorlek som de kan hantera. Stora meddelanden riskerar inte bara att överskrida dessa gränser utan kan också försämra hela systemets prestanda när meddelandesystemet lagrar dem.
Lösning
Använd mönstret Anspråkskontroll och skicka inte stora meddelanden till meddelandesystemet. Skicka i stället nyttolasten till ett externt datalager och generera en token för anspråkskontroll för nyttolasten. Meddelandesystemet skickar ett meddelande med anspråkskontrolltoken till att ta emot program så att dessa program kan hämta nyttolasten från datalagret. Meddelandesystemet ser eller lagrar aldrig nyttolasten.
- Nyttolast
- Spara nyttolast i datalagret.
- Generera token för anspråkskontroll och skicka meddelande med token för anspråkskontroll.
- Ta emot meddelande och läs token för anspråkskontroll.
- Hämta nyttolasten.
- Bearbeta nyttolasten.
Problem och överväganden med mönstret Anspråkskontroll
Tänk på följande rekommendationer när du implementerar mönstret För anspråkskontroll:
Ta bort förbrukade meddelanden. Om du inte behöver arkivera meddelandet tar du bort meddelandet och nyttolasten när de mottagande programmen har använt det. Använd antingen en synkron eller asynkron borttagningsstrategi:
Synkron borttagning: Det förbrukande programmet tar bort meddelandet och nyttolasten omedelbart efter förbrukning. Den kopplar borttagningen till arbetsflödet för meddelandehantering och använder beräkningskapaciteten messaging-workflow.
Asynkron borttagning: En process utanför arbetsflödet för meddelandebearbetning tar bort meddelandet och nyttolasten. Den frikopplar borttagningsprocessen från arbetsflödet för meddelandehantering och minimerar användningen av beräkning av meddelandearbetsflöde.
Implementera mönstret villkorligt. Införliva logik i det sändande programmet som tillämpar mönstret Anspråkskontroll om meddelandestorleken överskrider meddelandesystemets gräns. För mindre meddelanden kringgår du mönstret och skickar det mindre meddelandet till meddelandesystemet. Den här villkorliga metoden minskar svarstiden, optimerar resursanvändningen och förbättrar dataflödet.
När du ska använda mönstret För anspråkskontroll
Följande scenarier är de primära användningsfallen för mönstret Anspråkskontroll:
Begränsningar i meddelandesystemet: Använd mönstret För anspråkskontroll när meddelandestorlekarna överskrider gränserna för meddelandesystemet. Avlasta nyttolasten till extern lagring. Skicka endast meddelandet med dess token för anspråkskontroll till meddelandesystemet.
Prestanda för meddelandesystem: Använd mönstret Claim-Check när stora meddelanden belastar meddelandesystemet och försämrar systemets prestanda.
Följande scenarier är sekundära användningsfall för mönstret Anspråkskontroll:
Känsligt dataskydd: Använd mönstret Anspråkskontroll när nyttolaster innehåller känsliga data som inte vill vara synliga för meddelandesystemet. Använd mönstret på alla eller delar av känslig information i nyttolasten. Skydda känsliga data utan att överföra dem direkt via meddelandesystemet.
Komplexa routningsscenarier: Meddelanden som passerar flera komponenter kan orsaka flaskhalsar i prestanda på grund av serialisering, deserialisering, kryptering och dekrypteringsuppgifter. Använd mönstret Anspråkskontroll för att förhindra direkt meddelandebearbetning av mellanliggande komponenter.
Arbetsbelastningsdesign med mönstret Anspråkskontroll
En arkitekt bör utvärdera hur mönstret För anspråkskontroll kan användas i arbetsbelastningens design för att uppfylla de mål och principer som beskrivs i grundpelarna i Azure Well-Architected Framework. Till exempel:
Grundpelare | Så här stöder det här mönstret pelarmål |
---|---|
Beslut om tillförlitlighetsdesign hjälper din arbetsbelastning att bli motståndskraftig mot fel och se till att den återställs helt efter fel. | Meddelandesystem ger inte samma tillförlitlighet och haveriberedskap som ofta finns i dedikerade datalager. Att separera data från meddelandet kan ge ökad tillförlitlighet för nyttolasten. Den här separationen underlättar dataredundans som gör att du kan återställa nyttolaster efter en katastrof. - RE:03 Analys av felläge - RE:09 Haveriberedskap |
Beslut om säkerhetsdesign bidrar till att säkerställa konfidentialitet, integritet och tillgänglighet för arbetsbelastningsdata och system. | Mönstret Anspråkskontroll kan extrahera känsliga data från meddelanden och lagra dem i ett säkert datalager. Med den här konfigurationen kan du implementera strängare åtkomstkontroller, vilket säkerställer att endast de tjänster som är avsedda att använda känsliga data kan komma åt dem. Samtidigt döljs dessa data från orelaterade tjänster, till exempel de som används för köövervakning. - SE:03 Dataklassificering - SE:04 Segmentering |
Kostnadsoptimering fokuserar på att upprätthålla och förbättra arbetsbelastningens avkastning på investeringen. | Meddelandesystem begränsar ofta meddelandestorleken, och ökade storleksgränser är ofta en premiumfunktion. Om du minskar storleken på meddelandeorganen kan du använda en billigare meddelandelösning. - CO:07 Komponentkostnader - CO:09 Flödeskostnader |
Prestandaeffektivitet hjälper din arbetsbelastning att effektivt uppfylla kraven genom att optimera skalning, dataöverföring och kodkörning. | Mönstret För anspråkskontroll förbättrar effektiviteten för att skicka och ta emot program och meddelandesystemet genom att hantera stora meddelanden mer effektivt. Det minskar storleken på meddelanden som skickas till meddelandesystemet och ser till att program endast får åtkomst till stora meddelanden när det behövs. - PE:05 Skalning och partitionering - PE:12 Kontinuerlig prestandaoptimering |
Som med alla designbeslut bör du överväga eventuella kompromisser mot målen för de andra pelarna som kan införas med det här mönstret.
Exempel på anspråkskontrollmönster
Följande exempel visar hur Azure underlättar implementeringen av mönstret för anspråkskontroll:
Azure-meddelandesystem: Exemplen omfattar fyra olika scenarier för Azure-meddelandesystem: Azure Queue Storage, Azure Event Hubs (Standard API), Azure Service Bus och Azure Event Hubs (Kafka API).
Automatisk kontra manuell tokengenerering av anspråkskontroll: I de här exemplen visas även två metoder för att generera token för anspråkskontroll. I kodexempel 1–3 genererar Azure Event Grid automatiskt token när det sändande programmet överför nyttolasten till Azure Blob Storage. Kodexempel 4 visar en manuell tokengenereringsprocess med hjälp av en körbar kommandoradsklient.
Välj det exempel som passar dina behov och följ den angivna länken för att visa koden på GitHub:
Exempelkod | Scenarier för meddelandesystem | Tokengenerator | Ta emot program | Datalager |
---|---|---|---|---|
Kodexempel 1 | Azure Queue Storage | Azure Event Grid | Funktion | Azure Blob Storage |
Kodexempel 2 | Azure Event Hubs (standard-API) | Azure Event Grid | Körbar kommandoradsklient | Azure Blob Storage |
Kodexempel 3 | Azure Service Bus | Azure Event Grid | Funktion | Azure Blob Storage |
Kodexempel 4 | Azure Event Hubs (Kafka API) | Körbar kommandoradsklient | Funktion | Azure Blob Storage |
Nästa steg
- Webbplatsen Enterprise Integration Patterns innehåller en beskrivning av det här mönstret.
- Ett annat exempel finns i Hantera stora Service Bus-meddelanden med hjälp av claim-check-mönster (blogginlägg).
- Ett alternativt mönster för hantering av stora meddelanden är Dela och aggregera.
- Bibliotek som NServiceBus ger stöd för det här mönstret direkt med deras DataBus-funktion.