Ambassadeur-patroon

Azure

Helper-services maken die netwerkaanvragen verzenden namens een consumentservice of toepassing. Een ambassadeur-service kan worden beschouwd als een out-of-process-proxy die zich op dezelfde locatie als de client bevindt.

Dit patroon kan handig zijn om op een taalonafhankelijke manier algemene taken voor clientconnectiviteit te offloaden, zoals controle, logboekregistratie, routering, beveiliging (zoals TLS) en tolerantiepatronen. Het wordt vaak gebruikt met verouderde toepassingen of andere toepassingen die moeilijk te wijzigen zijn om hun netwerkmogelijkheden uit te breiden. Het patroon kan ook worden ingezet om een gespecialiseerd team in staat te stellen deze functies te implementeren.

Context en probleem

Tolerante cloudtoepassingen vereisen functies zoals circuitonderbreking, routering, meting en controle, en de mogelijkheid om netwerkgerelateerde configuratie-updates door te voeren. Het kan lastig of zelfs onmogelijk zijn om oudere toepassingen of bestaande codebibliotheken bij te werken voor het toevoegen van deze functies, aangezien de code niet meer wordt onderhouden of niet eenvoudig kan worden aangepast door het ontwikkelteam.

Bovendien kan het nodig zijn om netwerkaanroepen ingrijpend te configureren voor verbinding, verificatie en autorisatie. Als deze aanroepen worden gebruikt voor meerdere toepassingen, die zijn gebouwd met verschillende talen en frameworks, moeten de aanroepen voor elk van deze exemplaren worden geconfigureerd. Daarnaast is het misschien noodzakelijk dat netwerk- en beveiligingsfuncties worden beheerd door een centraal team binnen uw organisatie. Met een grote hoeveelheid bestaande code kan het riskant zijn voor dat team om toepassingscode bij te werken die ze niet kennen.

Oplossing

Plaats client-frameworks en -bibliotheken in een extern proces dat als een proxy tussen uw toepassingen en externe services fungeert. Implementeer de proxy in dezelfde hostomgeving als uw toepassing om controle te houden over routering, tolerantie en beveiligingsfuncties, en om hostgerelateerde toegangsbeperkingen te voorkomen. U kunt het patroon Ambassadeur ook gebruiken om instrumentatie te standaardiseren en uit te breiden. De proxy kan prestatiemetrieken zoals latentie of resourcegebruik controleren. Deze controle vindt plaats in dezelfde hostomgeving als de toepassing.

Diagram van het patroon Ambassadeur

Functies die worden geoffload naar de ambassadeur kunnen onafhankelijk van de toepassing worden beheerd. U kunt de ambassadeur bijwerken en wijzigen zonder dat de bestaande functionaliteit van de toepassing in gevaar komt. Daarnaast krijgen afzonderlijke, gespecialiseerde teams de mogelijkheid om beveiligings-, netwerk- of verificatiefuncties te implementeren en onderhouden die zijn verplaatst naar de ambassadeur.

Ambassadeur-services kunnen worden geïmplementeerd als een sidecar ter ondersteuning van de levenscyclus van een verbruikende toepassing of service. Als een ambassadeur wordt gedeeld door meerdere, afzonderlijke processen op een algemene host, is het ook een mogelijkheid om de ambassadeur te implementeren als een daemon of Windows-service. Als de verbruikende service is opgenomen in een container, moet de ambassadeur worden gemaakt als een afzonderlijke container op dezelfde host, met de juiste koppelingen geconfigureerd voor communicatie.

Problemen en overwegingen

  • De proxy voegt enige overhead toe in de vorm van latentie. Overweeg of een clientbibliotheek die rechtstreeks wordt aangeroepen door de toepassing een betere benadering is.
  • Houd rekening met de mogelijke impact van het toevoegen van algemene functies aan de proxy. Zo kan de ambassadeur bijvoorbeeld het verwerken van herhaalde aanvragen op zich nemen, maar dat kan een beveiligingsprobleem veroorzaken als niet 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. Voeg bijvoorbeeld HTTP-aanvraagheaders toe om aanvragen niet opnieuw uit te voeren of geef het maximum aantal keren op dat een aanvraag mag worden herhaald.
  • Bedenk hoe u de proxy inpakt en implementeert.
  • Bepaal of u één gedeeld exemplaar wilt gebruiken voor alle clients of een exemplaar voor elke client.

Wanneer dit patroon gebruiken

Gebruik dit patroon in de volgende situaties:

  • U moet een gemeenschappelijke set functies voor clientconnectiviteit bouwen voor meerdere talen of frameworks.
  • U moet algemene problemen van clientconnectiviteit offloaden naar infrastructuurontwikkelaars of andere meer gespecialiseerde teams.
  • U moet ondersteuning bieden voor connectiviteitsvereisten voor de cloud of clusters in een oudere toepassing of een toepassing die moeilijk kan worden aangepast.

Dit patroon is mogelijk niet geschikt in de volgende gevallen:

  • Als de latentie van netwerkaanvragen essentieel is. Een proxy introduceert enige overhead, hoewel minimaal, en in sommige gevallen kan dit van invloed zijn op de toepassing.
  • Als de functies voor clientconnectiviteit bestemd zijn voor maar één taal. In dat geval kunt u beter kiezen voor een clientbibliotheek die als een 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:

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. 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.

Opmerking

In het volgende schema ziet u een toepassing die via een ambassadeur-proxy een aanvraag verzendt naar een externe service. De ambassadeur verzorgt de routering, circuitonderbreking en logboekregistratie. De proxy roept de externe service aan en retourneert het antwoord vervolgens naar de clienttoepassing:

Voorbeeld van het Ambassadeur-patroon