Mönstret Gateway-routning

Dirigera förfrågningar till flera tjänster med hjälp av en enda slutpunkt. Det här 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.

Kontext och problem

När en klient behöver använda flera tjänster kan det vara en utmaning att konfigurera en separat slutpunkt för varje tjänst och sedan låta klienten hantera alla slutpunkterna. Ett e-handelsprogram kan till exempel tillhandahålla tjänster som sökning, omdömen, 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.

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 och kommunicera med en enda slutpunkt. Om en tjänst konsolideras eller delas upp behöver klienten kanske inte heller 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.

Diagram över mönstret gatewayroutning

Det här mönstret kan också hjälpa till med distributionen eftersom du kan hantera hur uppdateringarna distribueras till användarna. 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 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 införa en felkritisk systemdel. Se till att den är korrekt utformad för att uppfylla tillgänglighetskraven. Tänk på funktionerna för elasticitet och feltolerans när du implementerar.
  • Gatewaytjänsten kan medföra 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.

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 klientprogrammen genom att använda 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.

Det här mönstret kanske inte passar om du har ett enkelt program som bara använder en eller två tjänster.

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;
    }
}

I Azure kan flera tjänster konfigureras bakom en Application Gateway instans, som tillhandahåller layer-7-routning.