Patroon Routering van gateway
Aanvragen naar meerdere services routeren met behulp van één eindpunt. Dit patroon is handig als u meerdere services in één eindpunt wilt weergeven en wilt routeren naar de betreffende service op basis van de aanvraag.
Context en probleem
Wanneer een client meerdere services nodig heeft, kan het lastig zijn om een afzonderlijk eindpunt voor elke service in te stellen en de client elk eindpunt laten beheren. Een e-commercetoepassing kan bijvoorbeeld services zoals zoeken, beoordelingen, winkelwagen, betaling en ordergeschiedenis bieden. Elke service heeft een andere API waarmee de client moet communiceren en de client moet elk eindpunt kennen om verbinding met de services te kunnen maken. Als een API wordt gewijzigd, moet ook de client worden bijgewerkt. Als u een service in twee of meer afzonderlijke services opsplitst, moet de code in zowel de service als de client veranderen.
Oplossing
Plaats een gateway vóór een reeks toepassingen, services of implementaties. Gebruik toepassingslaag 7-routering om de aanvraag naar de juiste exemplaren te routeren.
Met dit patroon hoeft de clienttoepassing alleen te weten dat er een eindpunt is en dat daarmee kan worden gecommuniceerd. Als een service samengevoegd of opgesplitst is, hoeft de client niet per se te worden bijgewerkt. De service kan aanvragen blijven indienen bij de gateway, waarbij alleen de routering verandert.
Met een gateway kunt u ook back-endservices scheiden van de clients, zodat u clientaanroepen eenvoudig kunt houden terwijl u wijzigingen in de back-endservices achter de gateway mogelijk maakt. Clientaanroepen kunnen worden doorgestuurd naar een service of services die het verwachte clientgedrag moeten afhandelen, zodat u services achter de gateway kunt toevoegen, opsplitsen en ordenen zonder de client te wijzigen.

Dit patroon kan ook helpen bij de implementatie omdat u kunt bepalen hoe updates worden geïmplementeerd voor gebruikers. Wanneer er een nieuwe versie van uw service wordt geïmplementeerd, kan dat parallel met de bestaande versie gebeuren. Met routering kunt u bepalen welke versie van de service aan de clients wordt gepresenteerd, zodat u de flexibiliteit hebt om verschillende releasestrategieën te gebruiken, hetzij incrementele, parallelle of volledige implementaties van updates. Eventuele problemen die worden vastgesteld nadat de nieuwe service is geïmplementeerd, kunnen snel worden verholpen door een configuratiewijziging in de gateway aan te brengen, zonder dat dit van invloed is op de clients.
Problemen en overwegingen
- De gatewayservice kan een Single Point of Failure genereren. Zorg ervoor dat deze goed is ontworpen om te voldoen aan uw beschikbaarheidsvereisten. Denk bij het implementeren na over de mogelijkheden voor tolerantie en fouttolerantie.
- De gatewayservice kan een knelpunt genereren. Zorg ervoor dat de gateway voldoende capaciteit heeft om de belasting aan te kunnen en eenvoudig kan worden geschaald op basis van uw groeiverwachtingen.
- Voer belastingtests uit op de gateway zodat er geen trapsgewijze fouten voor services optreden.
- Gateway-routering is van niveau 7. De routering kan worden gebaseerd op IP, poort, header of URL.
Wanneer dit patroon gebruiken
Gebruik dit patroon wanneer:
- Een client meerdere services moet gebruiken die kunnen worden benaderd achter een gateway.
- U clienttoepassingen wilt vereenvoudigen met behulp van één eindpunt.
- U aanvragen van extern adresseerbare eindpunten wilt doorsturen naar interne virtuele eindpunten, zoals poorten op een VM voor het clusteren van virtuele IP-adressen.
Dit patroon is mogelijk niet geschikt wanneer u een eenvoudige toepassing hebt die gebruikmaakt van slechts één of twee services.
Voorbeeld
Met Nginx als router ziet u hieronder een eenvoudig voorbeeld van een configuratiebestand voor een server die aanvragen voor toepassingen die zich op verschillende virtuele mappen bevinden, doorstuurt naar andere computers op de back-end.
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;
}
}
In Azure kunnen meerdere services worden ingesteld achter een Application Gateway exemplaar, dat laag-7-routering biedt.
Verwante informatie
- Patroon Back-ends voor front-ends
- Patroon Aggregatie van gateway
- Gateway Offloading pattern (Patroon Offloading van gateway)