Ambassadörsmönster

Azure

Skapa hjälpkomponenttjänster som skickar nätverksförfrågningar åt en konsumenttjänst eller ett konsumentprogram. En ambassadörstjänst kan betraktas som en proxy som ligger utanför processen och finns på samma plats som klienten.

Det här mönstret kan vara användbart för att avlastning inom vanliga klientanslutningsaktiviteter, till exempel övervakning, loggning, routning, säkerhet (som TLS) och återhämtningsmönster på ett språkoberoende sätt. Det används ofta med äldre program eller andra program som är svåra att ändra för att utöka nätverksfunktionerna. Det kan också hjälpa specialiserade team att implementera de här funktionerna.

Kontext och problem

Elastiska, molnbaserade program kräver funktioner som kretsbrytare, routning, mätning och övervakning, och möjlighet att göra nätverksrelaterade konfigurationsuppdateringar. Det kan vara svårt eller omöjligt att uppdatera äldre program eller befintliga kodbibliotek för att lägga till sådana funktioner, eftersom koden inte längre underhålls eller inte kan ändras enkelt av utvecklingsteamet.

Det kan också krävas omfattande konfiguration för nätverksanrop, för anslutning, autentisering och auktorisering. Om anropen används i flera program som skapats med olika språk och ramverk, måste de konfigureras för var och en av de instanserna. Dessutom kanske nätverks- och säkerhetsfunktioner behöver hanteras av ett centralt team i din organisation. Med en stor kodbas kan det vara riskabelt för teamet att uppdatera programkod som de inte är bekanta med.

Lösning

Placera klientramverk och -bibliotek i en extern process som fungerar som proxy mellan ditt program och dina externa tjänster. Distribuera proxyn i samma värdmiljö som programmet så du får kontroll över routning, elasticitet och säkerhetsfunktioner och för att undvika värdrelaterade åtkomstbegränsningar. Du kan också använda ambassadörsmönster för att standardisera och utöka instrumentationen. Proxyn kan övervaka prestandamått som fördröjningar och resursanvändning. Övervakningen sker i programmets värdmiljö.

Diagram över ambassadörsmönstret

Funktioner som avlastas till ambassadören kan hanteras oberoende av program. Du kan uppdatera och ändra ambassadören utan att störa funktionerna i de äldre programmen. Du kan också använda olika, specialiserade team som implementerar och underhåller säkerhets-, nätverks- och autentiseringsfunktioner som flyttats till ambassadören.

Ambassadörstjänster kan distribueras som en sidovagn under ett programs eller en tjänsts livslängd. Om en ambassadör delas av flera olika processer på en gemensam värd kan den distribueras som ett bakgrundsprogram eller en Windows-tjänst. Om den konsumerande tjänsten finns i en container bör ambassadören skapas som en separat container på samma värd, med lämpliga länkar som konfigureras för kommunikation.

Problem och överväganden

  • Proxyn medför vissa kostnader för elasticitet. Överväg om det är en bättre metod att ha ett klientbibliotek som anropas direkt av programmet.
  • Överväg vilken effekt det får om du inkluderar generaliserade funktioner i proxyn. Ambassadör kan till exempel hantera återförsök, men det kanske inte är säkert om inte alla åtgärder är idempotent.
  • Överväg en mekanism som gör det möjligt för klienten att skicka en viss kontext till proxyn och tillbaka till klienten. Du kan till exempel inkludera rubriker för HTTP-begäranden som väljer bort återförsök eller anger det högsta antal återförsök som ska göras.
  • Överväg hur du ska paketera och distribuera proxyn.
  • Överväg om du vill använda en enda delad instans för alla klienter eller en instans för varje klient.

När du ska använda det här mönstret

Använd det här mönstret när du:

  • Behöver skapa en gemensam uppsättning klientanslutningsfunktioner för flera språk eller ramverk.
  • Behöver avlasta övergripande klientanslutningsproblem till infrastrukturutvecklare eller andra, mer specialiserade team.
  • Behöver stöd för moln- eller klusteranslutningskrav i ett äldre program eller ett program som är svårt att ändra.

Det här mönstret kanske inte lämpar sig:

  • När fördröjning av nätverksbegäran är viktigt. En proxy introducerar vissa omkostnader, även om den är minimal, och i vissa fall kan detta påverka programmet.
  • När klientanslutningsfunktionerna konsumeras av ett enda språk. I det fallet kan det vara ett bättre alternativ att ha ett klientbibliotek som distribueras till utvecklarteamen som ett paket.
  • När anslutningsfunktioner inte kan generaliseras och kräver djupare integrering med klientprogrammet.

Design av arbetsbelastning

En arkitekt bör utvärdera hur ambassadörsmönstret 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 till ett fullt fungerande tillstånd när ett fel inträffar. Nätverkskommunikationsmedlingspunkten som underlättas av det här mönstret ger en möjlighet att lägga till tillförlitlighetsmönster för nätverkskommunikation, till exempel återförsök eller buffring.

- RE:07 Självbevarande
Beslut om säkerhetsdesign bidrar till att säkerställa konfidentialitet, integritet och tillgänglighet för arbetsbelastningens data och system. Det här mönstret ger en möjlighet att öka säkerheten för nätverkskommunikation som inte kunde ha hanterats direkt av klienten.

- SE:06 Nätverkskontroller
- SE:07-kryptering

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

Följande diagram visar ett program som gör en begäran till en fjärransluten tjänst via en ambassadörsproxy. Ambassadören tillhandahåller routning, kretsbrytare och loggning. Den anropar fjärrtjänsten och returnerar svaret till klientprogrammet:

Exempel på ambassadörsmönstret