Átjárókiszervezési mintaGateway Offloading pattern

A megosztott vagy specializált szolgáltatásműködést kiszervezheti egy átjáró proxyra.Offload shared or specialized service functionality to a gateway proxy. Ez a minta leegyszerűsítheti az alkalmazásfejlesztést a megosztott szolgáltatásfunkciók, például az SSL-tanúsítványok használatának az átjáróba való áthelyezésével.This pattern can simplify application development by moving shared service functionality, such as the use of SSL certificates, from other parts of the application into the gateway.

Kontextus és problémaContext and problem

Bizonyos funkciókat több szolgáltatás is használ, és ezek a funkciók beállítást, felügyeletet és karbantartást igényelnek.Some features are commonly used across multiple services, and these features require configuration, management, and maintenance. A minden alkalmazástelepítéskor elosztott megosztott vagy speciális szolgáltatások növelik az adminisztrációs terhelést és a telepítési hibák esélyét.A shared or specialized service that is distributed with every application deployment increases the administrative overhead and increases the likelihood of deployment error. A megosztott funkciók frissítéseit a funkciót használó összes szolgáltatásban telepíteni kell.Any updates to a shared feature must be deployed across all services that share that feature.

A biztonsági problémák megfelelő kezelése (tokenérvényesítés, titkosítás, SSL-tanúsítványkezelés) és egyéb összetett feladatok elvégzése speciális szaktudást kívánhat meg.Properly handling security issues (token validation, encryption, SSL certificate management) and other complex tasks can require team members to have highly specialized skills. Például az egy alkalmazás számára szükséges tanúsítványt konfigurálni és telepíteni kell az alkalmazás összes példányán.For example, a certificate needed by an application must be configured and deployed on all application instances. Minden új telepítés esetében szükség van a tanúsítvány kezelésére, hogy az ne járjon le.With each new deployment, the certificate must be managed to ensure that it does not expire. Ha közeledik egy közös tanúsítvány lejárati ideje, akkor frissíteni, majd tesztelni és ellenőrizni kell azt minden alkalmazástelepítésen.Any common certificate that is due to expire must be updated, tested, and verified on every application deployment.

Más közös szolgáltatásokat, például a hitelesítést, az engedélyezést, a naplózást, a monitorozást vagy a szabályozást nehéz implementálni és felügyelni nagy számú telepítés esetén.Other common services such as authentication, authorization, logging, monitoring, or throttling can be difficult to implement and manage across a large number of deployments. Érdemes lehet konszolidálni az ilyen típusú funkciókat a terhelés és a hibák esélyének csökkentése érdekében.It may be better to consolidate this type of functionality, in order to reduce overhead and the chance of errors.

MegoldásSolution

Bizonyos szolgáltatások kiszervezése egy átjáróba, különösen az olyan horizontálisan felmerülő információk, mint a Tanúsítványkezelő, a hitelesítés, az SSL-lezárás, a figyelés, a protokollok fordítása vagy a szabályozás.Offload some features into a gateway, particularly cross-cutting concerns such as certificate management, authentication, SSL termination, monitoring, protocol translation, or throttling.

A következő ábra egy olyan átjárót mutat be, amely leállítja a bejövő SSL-kapcsolatokat.The following diagram shows a gateway that terminates inbound SSL connections. Az eredeti kérelmező nevében az átjáró összes HTTP-kiszolgálójának adatait kéri.It requests data on behalf of the original requestor from any HTTP server upstream of the gateway.

Az átjáró kiszervezési mintájának ábrája

A minta használata többek között a következő előnyökkel jár:Benefits of this pattern include:

  • Egyszerűsíti a szolgáltatások fejlesztését, mivel nincs szükség a támogató erőforrások (például a webkiszolgáló-tanúsítványok és a biztonságos webhelyek konfigurációja) elosztására és karbantartására.Simplify the development of services by removing the need to distribute and maintain supporting resources, such as web server certificates and configuration for secure websites. Az egyszerűbb konfigurálás könnyebb felügyeletet és skálázhatóságot jelent, és így könnyebb a szolgáltatásfrissítés is.Simpler configuration results in easier management and scalability and makes service upgrades simpler.

  • A speciális szakértelmet igénylő funkciók implementálását (például biztonság) bízza külön erre a célra létrehozott csapatokra.Allow dedicated teams to implement features that require specialized expertise, such as security. Így a központi csapat az alkalmazás működésére koncentrálhat, és a több szolgáltatást érintő, de speciális kérdések megoldását a szakértőkre hagyhatja.This allows your core team to focus on the application functionality, leaving these specialized but cross-cutting concerns to the relevant experts.

  • Egységesítse a kérések és válaszok naplózását és monitorozását.Provide some consistency for request and response logging and monitoring. Beállíthatja, hogy az átjáró akkor is végezzen minimális monitorozási és naplózási tevékenységet, ha a szolgáltatás nem lett megfelelően kialakítva.Even if a service is not correctly instrumented, the gateway can be configured to ensure a minimum level of monitoring and logging.

Problémák és megfontolandó szempontokIssues and considerations

  • Győződjön meg arról, hogy az átjáró erős rendelkezésre állású, és a hiba miatt rugalmas.Ensure the gateway is highly available and resilient to failure. Az átjáró több példányának futtatásával elkerülhető az egyes pontok meghibásodása.Avoid single points of failure by running multiple instances of your gateway.
  • Gondoskodjon arról, hogy az átjáró megfelel az alkalmazás és a végpontok kapacitási és skálázási követelményeinek.Ensure the gateway is designed for the capacity and scaling requirements of your application and endpoints. Gondoskodjon arról, hogy az átjáró ne váljon szűk keresztmetszetté az alkalmazás számára, és megfelelően skálázható legyen.Make sure the gateway does not become a bottleneck for the application and is sufficiently scalable.
  • Csak olyan funkciókat szervezzen ki, amelyeket a teljes alkalmazás használ, például a biztonsági és az adatátviteli funkciókat.Only offload features that are used by the entire application, such as security or data transfer.
  • Az üzleti logikát soha nem szabad kiszervezni az átjárón.Business logic should never be offloaded to the gateway.
  • Ha nyomon kell követnie a tranzakciókat, érdemes korrelációs azonosítókat létrehozni a naplózáshoz.If you need to track transactions, consider generating correlation IDs for logging purposes.

Mikor érdemes ezt a mintát használni?When to use this pattern

Használja ezt a mintát, ha:Use this pattern when:

  • Az alkalmazástelepítésben vannak közös feladatok, például az SSL-tanúsítványok vagy a titkosítás.An application deployment has a shared concern such as SSL certificates or encryption.
  • Közös funkciója van több alkalmazástelepítésnek, amelyek erőforrásigényei eltérőek (például memória-erőforrások, tárterület vagy hálózati kapcsolatok).A feature that is common across application deployments that may have different resource requirements, such as memory resources, storage capacity or network connections.
  • Bizonyos feladatokat egy speciális csapatra szeretne átruházni (például hálózati biztonság, szabályozás, hálózathatárokkal kapcsolatos kérdések).You wish to move the responsibility for issues such as network security, throttling, or other network boundary concerns to a more specialized team.

Nem érdemes ezt a mintát használni, ha összekapcsol egyes szolgáltatásokat.This pattern may not be suitable if it introduces coupling across services.

PéldaExample

Ha az Nginxet használja SSL-kiszervezési berendezésként, a következő konfiguráció leállítja az összes beérkező SSL-kapcsolatot, és elosztja azt három felső rétegbeli HTTP-kiszolgáló között.Using Nginx as the SSL offload appliance, the following configuration terminates an inbound SSL connection and distributes the connection to one of three upstream HTTP servers.

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

Az Azure-ban ez a Application Gateway SSL-lezárásának beállításávalérhető el.On Azure, this can be achieved by setting up SSL termination on Application Gateway.