Mönstret Gateway-avlastning

Azure Application Gateway

Avlasta delade eller specialiserade tjänstfunktioner till en gateway-proxy. Det här mönstret kan förenkla programutvecklingen genom att flytta delade tjänsterfunktioner, t.ex. användningen av SSL-certifikat, frånandra delar av programmet till gatewayen.

Kontext och problem

Vissa funktioner är vanliga för flera tjänster och de kräver konfigurering, hantering och underhåll. En delad eller specialiserad tjänst som distribueras med varje programdistribution ökar det administrativa arbetet och sannolikheten för distributionsfel. Uppdateringar av en delad funktion måste distribueras till alla tjänster som delar den funktionen.

Korrekt hantering av säkerhetsproblem (tokenverifiering, kryptering och SSL-certifikathantering) och andra avancerade uppgifter kan kräva att gruppmedlemmar har specialiserade kunskaper. Ett certifikat som behövs i ett program måste till exempel konfigureras och distribueras till alla instanser av programmet. Med varje ny distribution måste certifikatet hanteras så att det inte upphör att gälla. Vanliga certifikat som snart upphör att gälla måste uppdateras, testas och verifieras på varje programdistribution.

Andra vanliga tjänster, till exempel autentisering, auktorisering, loggning, övervakning, eller bandbreddsbegränsning kan vara svåra att implementera och hantera över ett stort antal distributioner. Det kan vara bättre att konsolidera den här typen av funktioner för att minska omkostnaderna och risken för fel.

Lösning

Avlasta vissa funktioner till en gateway, särskilt övergripande problem som certifikathantering, autentisering, SSL-avslutning, övervakning, protokollöversättning eller begränsning.

Följande diagram visar en gateway som avslutar inkommande SSL-anslutningar. Den begär data för den ursprungliga beställarens räkning från en HTTP-server uppströms gatewayen.

Diagram över gatewayens avläsningsmönster

Några fördelar med det här mönstret är följande:

  • Förenkla utvecklingen av tjänster genom att ta bort behovet av att distribuera och underhålla stödjande resurser, till exempel webbservercertifikat och konfiguration för säkra webbplatser. En enklare konfiguration resulterar i enklare hantering och skalbarhet och underlättar vid tjänsteuppgraderingar.

  • Tillåt att dedikerade grupper implementerar funktioner som kräver särskilda kunskaper, till exempel säkerhet. Detta gör att ditt huvudteam kan fokusera på programfunktionen, och överlämna dessa specialiserade men övergripande problem till relevanta experter.

  • Sörj för konsekvens vid loggning och övervakning av begäranden och svar. Även om en tjänst inte är korrekt instrumenterad kan du konfigurera gatewayen för att säkerställa en lägsta nivå av övervakning och loggning.

Problem och överväganden

  • Se till att gatewayen är mycket tillgänglig och motståndskraftig mot fel. Undvik enskilda felpunkter genom att köra flera instanser av din gateway.
  • Se till att gatewayen är utformad för de kapacitets- och skalningskrav som programmet och slutpunkterna ställer. Kontrollera att gatewayen inte blir en flaskhals för programmet och är tillräckligt skalbar.
  • Avlasta endast funktioner som används i hela programmet, till exempel säkerhet eller dataöverföring.
  • Affärslogik bör aldrig avlastas till gatewayen.
  • Överväg att generera korrelations-ID:n för loggning om du behöver spåra transaktioner.

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

Använd det här mönstret i sådana här scenarier:

  • En programdistribution har ett delat problem, till exempel SSL-certifikat eller kryptering.
  • En funktion som är gemensam för programdistributioner som kan ha olika resursbehov, till exempel minnesresurser, lagringskapacitet eller nätverksanslutningar.
  • Du vill flytta ansvaret för problem som till exempel nätverkssäkerhet, bandbreddsbegränsning och andra nätverksgränsfrågor till ett mer specialiserat team.

Det här mönstret kan inte användas om det inför en koppling mellan tjänster.

Design av arbetsbelastning

En arkitekt bör utvärdera hur gatewayens avlastningsmönster 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. Om du avlastar det här ansvaret till en gateway minskar komplexiteten i programkoden på serverdelsnoder. I vissa fall ersätter avlastning helt funktioner med en tillförlitlig funktion som tillhandahålls av plattformen.

- RE:01 Enkelhet och effektivitet
Beslut om säkerhetsdesign bidrar till att säkerställa konfidentialitet, integritet och tillgänglighet för arbetsbelastningens data och system. Genom att lägga till en gateway i begärandeflödet kan du centralisera säkerhetsfunktioner som brandväggar för webbprogram och TLS-anslutningar med klienter. Alla avladdade funktioner som tillhandahålls av plattformen erbjuder redan förbättrad säkerhet.

- SE:06 Nätverkskontroller
- SE:08 Härdningsresurser
Kostnadsoptimering fokuserar på att upprätthålla och förbättra arbetsbelastningens avkastning på investeringen. Med det här mönstret kan du omdirigera kostnader från resurser som skulle spenderas per nod till gatewayimplementeringen. Kostnaderna i den centraliserade bearbetningsmodellen är ofta lägre än kostnaderna för den distribuerade modellen.

- CO:14 Konsolidering
Operational Excellence hjälper till att leverera arbetsbelastningskvalitet genom standardiserade processer och teamsammanhållning. I det här mönstret är konfigurationen och underhållet av de avlastade funktionerna från en enda punkt i stället för att hantera den från flera noder.

- OE:04 Verktyg och processer
Prestandaeffektivitet hjälper din arbetsbelastning att effektivt uppfylla kraven genom optimeringar inom skalning, data och kod. Genom att lägga till en avlastningsgateway i begärandeprocessen kan du använda färre resurser per nod eftersom funktionaliteten är centraliserad vid gatewayen. Du kan optimera implementeringen av de avlastade funktionerna oberoende av programkoden. Avlastade funktioner som tillhandahålls av plattformen är förmodligen redan mycket högpresterande.

- PE:03 Välja tjänster

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

Med Nginx som SSL-enhet för avlastning avslutar följande konfiguration en inkommande SSL-anslutning och distribuerar anslutningen till en av tre överordnade HTTP-servrar.

upstream iis {
        server  10.3.0.10    max_fails=3    fail_timeout=15s;
        server  10.3.0.20    max_fails=3    fail_timeout=15s;
        server  10.3.0.30    max_fails=3    fail_timeout=15s;
}

server {
        listen 443;
        ssl on;
        ssl_certificate /etc/nginx/ssl/domain.cer;
        ssl_certificate_key /etc/nginx/ssl/domain.key;

        location / {
                set $targ iis;
                proxy_pass http://$targ;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
        }
}

I Azure kan detta uppnås genom att konfigurera SSL-avslutning på Application Gateway.