Dirigera begäranden till flera tjänster eller flera tjänstinstanser med en enda slutpunkt. Mönstret är användbart när du vill:
- Exponera flera tjänster på en enda slutpunkt och dirigera till lämplig tjänst baserat på begäran
- Exponera flera instanser av samma tjänst på en enskild slutpunkt för belastningsutjämning eller tillgänglighet
- Exponera olika versioner av samma tjänst på en enda slutpunkt och dirigera trafik mellan de olika versionerna
Kontext och problem
När en klient behöver använda flera tjänster, flera tjänstinstanser eller en kombination av båda måste klienten uppdateras när tjänster läggs till eller tas bort. Tänk på följande scenarier.
- Flera olika tjänster – Ett e-handelsprogram kan tillhandahålla tjänster som sökning, recensioner, kundvagn, kassa och orderhistorik. Alla tjänster har olika API som klienten måste interagera med, och klienten måste känna till varje slutpunkt för att kunna ansluta till tjänsterna. Om ett API ändras måste även klienten uppdateras. Om du omstrukturerar en tjänst till två eller flera separata tjänster måste koden ändras i både tjänsten och klienten.
- Flera instanser av samma tjänst – Systemet kan kräva att flera instanser av samma tjänst körs i samma eller olika regioner. Att köra flera instanser kan göras i belastningsutjämningssyfte eller för att uppfylla tillgänglighetskraven. Varje gång en instans spunnits upp eller ned för att matcha efterfrågan måste klienten uppdateras.
- Flera versioner av samma tjänst – Som en del av distributionsstrategin kan nya versioner av en tjänst distribueras längs befintliga versioner. Detta kallas blågröna distributioner. I dessa scenarier måste klienten uppdateras varje gång det sker ändringar i procentandelen trafik som dirigeras till den nya versionen och den befintliga slutpunkten.
Lösning
Placera en gateway framför en uppsättning program, tjänster eller distributioner. Använd Layer 7-routning för programmen för att dirigera begäran till rätt instanser.
Med det här mönstret behöver klientprogrammet bara känna till en enda slutpunkt och kommunicera med en enda slutpunkt. Följande illustrerar hur mönstret gatewayroutning hanterar de tre scenarier som beskrivs i avsnittet kontext och problem.
Flera olika tjänster
Mönstret för gatewayroutning är användbart i det här scenariot där en klient använder flera tjänster. Om en tjänst konsolideras, delas upp eller ersätts behöver klienten inte nödvändigtvis uppdateras. Den kan fortsätta göra begäranden till gatewayen och bara routningen ändras.
Med en gateway kan du också abstrahera klientdelstjänster från klienterna, vilket gör att du kan hålla klientanropen enkla samtidigt som du möjliggör förändringar i klientdelstjänsterna bakom gatewayen. Klientanropen kan vidarebefordras till den eller de tjänster som ska hantera det förväntade klientbeteendet. Det gör att du kan lägga till, dela och organisera om tjänster bakom gatewayen utan att ändra klienten.
Flera instanser av samma tjänst
Elasticitet är nyckeln inom molnbaserad databehandling. Tjänster kan knoppas upp för att möta den ökande efterfrågan eller minska när efterfrågan är låg för att spara pengar. Komplexiteten i att registrera och avregistrera tjänstinstanser kapslas in i gatewayen. Klienten känner inte till en ökning eller minskning av antalet tjänster.
Tjänstinstanser kan distribueras i en eller flera regioner. Geode-mönstret beskriver hur en aktiv-aktiv-distribution i flera regioner kan förbättra svarstiden och öka tillgängligheten för en tjänst.
Flera versioner av samma tjänst
Det här mönstret kan användas för distributioner genom att du kan hantera hur uppdateringar distribueras till användare. När en ny version av tjänsten distribueras kan den distribueras parallellt med den befintliga versionen. Med routning kan du styra vilken version av tjänsten som presenteras för klienterna, vilket ger dig flexibiliteten att använda olika lanseringsstrategier, oavsett om de är inkrementella, parallella eller fullständiga distributioner av uppdateringar. Om ett problem upptäcks efter att den nya tjänsten har distribuerats kan det snabbt korrigeras med en konfigurationsändring på gatewayen, som inte påverkar klienterna.
Problem och överväganden
- Gatewaytjänsten kan introducera en felpunkt. Se till att den är korrekt utformad för att uppfylla dina tillgänglighetskrav. Överväg återhämtnings- och feltoleransfunktioner i implementeringen.
- Gatewaytjänsten kan introducera en flaskhals. Se till att gatewayen har rätt prestanda för att kunna hantera belastningen och att den enkelt kan skaländras enligt din förväntade tillväxt.
- Utför belastningstest mot gatewayen för att se till att du inte orsakar sammanhängande fel för tjänsterna.
- Gateway-routning är nivå 7. Detta kan baseras på IP, port, huvud eller webbadress.
- Gatewaytjänster kan vara globala eller regionala. Azure Front Door är en global gateway, medan Azure Application Gateway är regionalt. Använd en global gateway om lösningen kräver distributioner av tjänster i flera regioner. Överväg att använda Application Gateway om du har en regional arbetsbelastning som kräver detaljerad kontroll över hur trafiken balanseras. Du vill till exempel balansera trafik mellan virtuella datorer.
- Gatewaytjänsten är den offentliga slutpunkten för tjänster som den finns framför. Överväg att begränsa åtkomsten till serverdelstjänsterna genom att göra tjänsterna endast tillgängliga via gatewayen eller via ett privat virtuellt nätverk.
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 klient behöver använda flera tjänster som kan nås bakom en gateway.
- Du vill förenkla klientprogram med hjälp av en enda slutpunkt.
- Du behöver dirigera förfrågningar från externt adresserbara slutpunkter till interna virtuella slutpunkter, till exempel exponera portar på en virtuell dator till klustrets virtuella IP-adresser.
- En klient måste använda tjänster som körs i flera regioner för svarstider eller tillgänglighetsfördelar.
- En klient måste använda ett variabelt antal tjänstinstanser.
- Du vill implementera en distributionsstrategi där klienter får åtkomst till flera versioner av tjänsten samtidigt.
Det här mönstret kanske inte passar om du har ett enkelt program som bara använder en eller två tjänster.
Design av arbetsbelastning
En arkitekt bör utvärdera hur mönstret gatewayroutning 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. | Med gatewayroutning kan du dirigera trafik till endast felfria noder i systemet. - RE:05 Redundans - RE:10 Hälsoövervakning |
Operational Excellence hjälper till att leverera arbetsbelastningskvalitet genom standardiserade processer och teamsammanhållning. | Med gatewayroutning kan du frikoppla begäranden från serverdelar, vilket i sin tur gör att dina serverdelar kan stödja avancerade distributionsmodeller, plattformsövergångar och en enda hanteringsplats för domännamnsmatchning och kryptering under överföring. - OE:04 Verktyg och processer - OE:11 Säkra distributionsmetoder |
Prestandaeffektivitet hjälper din arbetsbelastning att effektivt uppfylla kraven genom optimeringar inom skalning, data och kod. | Med gatewayroutning kan du distribuera trafik mellan noder i systemet för att balansera belastningen. - PE:05 Skalning och partitionering |
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 router är följande en enkel exempelkonfigurationsfilen för en server som dirigerar förfrågningar för program som finns i olika virtuella kataloger på olika datorer på serverdelen.
server {
listen 80;
server_name domain.com;
location /app1 {
proxy_pass http://10.0.3.10:80;
}
location /app2 {
proxy_pass http://10.0.3.20:80;
}
location /app3 {
proxy_pass http://10.0.3.30:80;
}
}
Följande Azure-tjänster kan användas för att implementera gateway-routningsmönstret:
- En Application Gateway-instans som tillhandahåller regional layer-7-routning.
- En Azure Front Door-instans som tillhandahåller global layer-7-routning.