Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Helper-services maken die netwerkaanvragen verzenden namens een consumentservice of toepassing. Een ambassadeurservice kan worden beschouwd als een out-of-process proxy die zich samen met de client bevindt.
Dit patroon kan handig zijn voor het offloaden van algemene clientconnectiviteitstaken, zoals bewaking, logboekregistratie, routering, beveiliging (zoals TLS) en tolerantiepatronen op een taalagnostische manier. Het wordt vaak gebruikt met verouderde toepassingen of andere toepassingen die moeilijk te wijzigen zijn om hun netwerkmogelijkheden uit te breiden. Het kan ook een gespecialiseerd team in staat stellen om deze functies te implementeren.
Context en probleem
Tolerante cloudtoepassingen vereisen functies zoals circuitonderbreking, routering, meting en bewaking en de mogelijkheid om netwerkgerelateerde configuratie-updates te maken. Het kan lastig of onmogelijk zijn om verouderde toepassingen of bestaande codebibliotheken bij te werken om deze functies toe te voegen, omdat de code niet meer wordt onderhouden of niet eenvoudig kan worden gewijzigd door het ontwikkelteam.
Netwerkaanroepen kunnen ook aanzienlijke configuratie vereisen voor verbinding, verificatie en autorisatie. Als deze aanroepen worden gebruikt in meerdere toepassingen, gebouwd met meerdere talen en frameworks, moeten de aanroepen worden geconfigureerd voor elk van deze exemplaren. Daarnaast moet de netwerk- en beveiligingsfunctionaliteit mogelijk worden beheerd door een centraal team binnen uw organisatie. Met een grote codebasis kan het riskant zijn voor dat team om toepassingscode bij te werken waarmee ze niet bekend zijn.
Oplossing
Plaats clientframeworks en -bibliotheken in een extern proces dat fungeert als proxy tussen uw toepassing en externe services. Implementeer de proxy in dezelfde hostomgeving als uw toepassing om controle over routering, tolerantie, beveiligingsfuncties toe te staan en om eventuele hostgerelateerde toegangsbeperkingen te voorkomen. U kunt ook het ambassadeurpatroon gebruiken om instrumentatie te standaardiseren en uit te breiden. De proxy kan prestatiegegevens bewaken, zoals latentie of resourcegebruik, en deze bewaking vindt plaats in dezelfde hostomgeving als de toepassing.
Functies die naar de ambassadeur worden verplaatst, kunnen onafhankelijk van de toepassing worden beheerd. U kunt de ambassadeur bijwerken en wijzigen zonder de verouderde functionaliteit van de toepassing te storen. Daarnaast kunnen afzonderlijke, gespecialiseerde teams beveiligings-, netwerk- of verificatiefuncties implementeren en onderhouden die naar de ambassadeur zijn verplaatst.
Ambassador-services kunnen als sidecar worden geïmplementeerd om de levenscyclus van een verbruikende toepassing of service te ondersteunen. Als een ambassadeur wordt gedeeld door meerdere afzonderlijke processen op een gemeenschappelijke host, kan deze ook worden geïmplementeerd als een daemon of Windows-service. Als de verbruikende service in een container wordt geplaatst, moet de ambassadeur worden gemaakt als een afzonderlijke container op dezelfde host, waarbij de juiste koppelingen zijn geconfigureerd voor communicatie.
Problemen en overwegingen
- De proxy voegt enige latentieoverhead toe. Overweeg of een clientbibliotheek, die rechtstreeks door de toepassing wordt aangeroepen, een betere aanpak is.
- Houd rekening met de mogelijke impact van het opnemen van gegeneraliseerde functies in de proxy. De ambassadeur kan bijvoorbeeld nieuwe pogingen afhandelen, maar dat is mogelijk niet veilig, tenzij alle bewerkingen idempotent zijn.
- Overweeg een mechanisme om de client toe te staan om bepaalde context door te geven aan de proxy en terug te keren naar de client. Neem bijvoorbeeld HTTP-aanvraagheaders op om u af te afmelden voor opnieuw proberen of geef het maximum aantal keren op dat u het opnieuw wilt proberen.
- Bedenk hoe u de proxy inpakt en implementeert.
- Overweeg of u één gedeeld exemplaar wilt gebruiken voor alle clients of een exemplaar voor elke client.
Wanneer gebruikt u dit patroon?
Gebruik dit patroon wanneer u:
- Er moet een algemene set clientconnectiviteitsfuncties worden gebouwd voor meerdere talen of frameworks.
- Moet cross-cutting clientconnectiviteitsproblemen offloaden naar infrastructuurontwikkelaars of andere meer gespecialiseerde teams.
- Ondersteuning nodig voor cloud- of clusterconnectiviteitsvereisten in een verouderde toepassing of een toepassing die moeilijk te wijzigen is.
Dit patroon is mogelijk niet geschikt in de volgende gevallen:
- Wanneer latentie van netwerkaanvragen essentieel is. Een proxy introduceert enige overhead, hoewel minimaal, en in sommige gevallen kan dit van invloed zijn op de toepassing.
- Wanneer clientconnectiviteitsfuncties worden gebruikt door één taal. In dat geval is een betere optie mogelijk een clientbibliotheek die als pakket wordt gedistribueerd naar de ontwikkelteams.
- Wanneer connectiviteitsfuncties niet kunnen worden gegeneraliseerd en diepere integratie met de clienttoepassing is vereist.
Workloadontwerp
Een architect moet evalueren hoe het Ambassador-patroon kan worden gebruikt in het ontwerp van hun workload om de doelstellingen en principes te verhelpen die worden behandeld in de pijlers van het Azure Well-Architected Framework. Voorbeeld:
| Pilaar | 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. | Het bemiddelingspunt voor netwerkcommunicatie dat door dit patroon wordt gefaciliteerd, biedt de mogelijkheid om betrouwbaarheidspatronen toe te voegen aan netwerkcommunicatie, zoals opnieuw proberen of bufferen. - RE:07 Zelfbehoud |
| Beslissingen over beveiligingsontwerpen helpen de vertrouwelijkheid, integriteit en beschikbaarheid van de gegevens en systemen van uw workload te waarborgen. | Dit patroon biedt een mogelijkheid om de beveiliging van netwerkcommunicatie te verbeteren die niet rechtstreeks door de client kan worden verwerkt. - SE:06 Netwerkbesturingselementen - SE:07-versleuteling |
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
In het volgende diagram ziet u een toepassing die een aanvraag indient bij een externe service via een ambassadeurproxy. De ambassadeur biedt routering, circuitonderbreking en logboekregistratie. De externe service wordt aanroepen en retourneert vervolgens het antwoord op de clienttoepassing: