Ağ Geçidi Boşaltma düzeniGateway Offloading pattern

Paylaşılan veya özelleştirilmiş hizmet işlevlerini bir ağ geçidi ara sunucusuna boşaltın.Offload shared or specialized service functionality to a gateway proxy. Bu düzen, SSL sertifikalarının kullanımı gibi paylaşılan hizmet işlevlerini uygulamanın diğer kısımlarından ağ geçidine taşıyarak uygulama geliştirme sürecini basitleştirebilir.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.

Bağlam ve sorunContext and problem

Bazı özellikler birden çok hizmet tarafından ortak olarak kullanılır ve bunlar yapılandırma, yönetim ve bakım gerektirir.Some features are commonly used across multiple services, and these features require configuration, management, and maintenance. Her uygulama dağıtımı ile dağıtılan bir paylaşılan veya özelleştirilmiş hizmet, yönetim yükünü ve dağıtım hatası olasılığını artırır.A shared or specialized service that is distributed with every application deployment increases the administrative overhead and increases the likelihood of deployment error. Paylaşılan bir özellikte yapılan herhangi bir güncelleştirmenin bu özelliği ortak olarak kullanan tüm hizmetlere dağıtılması gerekir.Any updates to a shared feature must be deployed across all services that share that feature.

Güvenlik sorunlarının (belirteç doğrulama, şifreleme ve SSL sertifika yönetimi) ve diğer karmaşık görevlerin doğru işlenmesi, ekip üyelerinin çok özel konular üzerinde uzmanlaşmasını gerektirebilir.Properly handling security issues (token validation, encryption, SSL certificate management) and other complex tasks can require team members to have highly specialized skills. Örneğin, bir uygulama için gerekli olan sertifikalar, uygulamanın tüm örneklerinde yapılandırılıp dağıtılmalıdır.For example, a certificate needed by an application must be configured and deployed on all application instances. Her yeni dağıtımla birlikte, sertifika süresinin dolmaması için sertifika yönetilmelidir.With each new deployment, the certificate must be managed to ensure that it does not expire. Süre sonu yaklaşan tüm ortak sertifikalar her bir uygulama dağıtımında güncelleştirilmeli, test edilmeli ve doğrulanmalıdır.Any common certificate that is due to expire must be updated, tested, and verified on every application deployment.

Kimlik doğrulama, yetkilendirme, günlüğe kaydetme, izleme veya azaltma gibi diğer ortak hizmetlerin çok sayıda dağıtımda uygulanması ve yönetilmesi zor olabilir.Other common services such as authentication, authorization, logging, monitoring, or throttling can be difficult to implement and manage across a large number of deployments. Ek yükü ve hata olasılığını azaltmak için bu tür işlevleri tek çatı altında toplamak daha mantıklı olabilir.It may be better to consolidate this type of functionality, in order to reduce overhead and the chance of errors.

ÇözümSolution

Başta sertifika yönetimi, kimlik doğrulaması, SSL sonlandırma, izleme, protokol çevirisi veya azaltma gibi geniş kapsamlı kritik konular olmak üzere bazı özellikleri bir API ağ geçidine boşaltın.Offload some features into an API gateway, particularly cross-cutting concerns such as certificate management, authentication, SSL termination, monitoring, protocol translation, or throttling.

Aşağıdaki diyagramda gelen SSL bağlantılarını sonlandıran bir API ağ geçidi gösterilmiştir.The following diagram shows an API gateway that terminates inbound SSL connections. API ağ geçidinin herhangi bir HTTP sunucusu yukarı akışından özgün istek sahibi adına veri isteği gerçekleştirir.It requests data on behalf of the original requestor from any HTTP server upstream of the API gateway.

Ağ geçidi boşaltma düzeni diyagramı

Bu düzenin avantajları şunlardır:Benefits of this pattern include:

  • Web sunucusu sertifikaları ve güvenli web siteleri için yapılandırma gibi destekleyici kaynakların dağıtım ve bakım gereksinimlerini ortadan kaldırarak hizmet geliştirme sürecini basitleştirir.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. Yapılandırmanın daha basit olması, yönetim ve ölçeklenebilirliğin kolaylaşmasını sağlar ve hizmet yükseltme işlemlerini daha basit hale getirir.Simpler configuration results in easier management and scalability and makes service upgrades simpler.

  • Özel uzmanlık gerektiren güvenlik gibi özellikleri özel ekiplerin uygulamasını sağlar.Allow dedicated teams to implement features that require specialized expertise, such as security. Özel ancak geniş kapsamlı olan bu kritik konuların ilgili uzmanlara bırakıldığı bu senaryo, çekirdek ekibinizin uygulama işlevlerine odaklanmasına imkan tanır.This allows your core team to focus on the application functionality, leaving these specialized but cross-cutting concerns to the relevant experts.

  • İstek ve yanıtların günlüğe kaydedilmesi ve izlenmesi için biraz tutarlılık sağlar.Provide some consistency for request and response logging and monitoring. Hizmet doğru şekilde izlenmiyor olsa bile, ağ geçidi asgari düzeyde izleme ve günlüğe kaydetme olanağı sağlayacak şekilde yapılandırılabilir.Even if a service is not correctly instrumented, the gateway can be configured to ensure a minimum level of monitoring and logging.

Sorunlar ve dikkat edilmesi gerekenlerIssues and considerations

  • API ağ geçidinin yüksek oranda kullanılabilir ve hatalara dayanıklı olduğundan emin olun.Ensure the API gateway is highly available and resilient to failure. API ağ geçidinizin birden çok örneğini çalıştırarak tek hata noktalarından kaçının.Avoid single points of failure by running multiple instances of your API gateway.
  • Ağ geçidinin uygulama ve uç noktalarınızın kapasite ve ölçeklendirme gereksinimlerini karşılayacak şekilde tasarlandığından emin olun.Ensure the gateway is designed for the capacity and scaling requirements of your application and endpoints. Ağ geçidinin uygulama için bir performans sorununa dönüşmediğinden ve yeterince ölçeklenebilir olduğundan emin olun.Make sure the gateway does not become a bottleneck for the application and is sufficiently scalable.
  • Yalnızca güvenlik veya veri aktarımı gibi tüm uygulama tarafından kullanılan özellikleri boşaltın.Only offload features that are used by the entire application, such as security or data transfer.
  • İş mantığı asla API ağ geçidine boşaltılmamalıdır.Business logic should never be offloaded to the API gateway.
  • İşlemleri izlemeniz gerekiyorsa, günlüğe kaydetme amacıyla bağıntı kimlikleri oluşturmayı göz önünde bulundurun.If you need to track transactions, consider generating correlation IDs for logging purposes.

Bu düzenin kullanılacağı durumlarWhen to use this pattern

Bu düzeni aşağıdaki durumlarda kullanın:Use this pattern when:

  • Bir uygulama dağıtımının SSL sertifikaları veya şifreleme gibi ortak bir gereksiniminin olduğu durumlar.An application deployment has a shared concern such as SSL certificates or encryption.
  • Bellek kaynakları, depolama kapasitesi veya ağ bağlantıları gibi konularda farklı kaynak gereksinimleri olabilecek ayrı uygulama dağıtımları tarafından ortak olarak kullanılan bir özellik.A feature that is common across application deployments that may have different resource requirements, such as memory resources, storage capacity or network connections.
  • Ağ güvenliği veya azaltma gibi ağ sınırı konuların sorumluluğunu daha özel olarak uzmanlaşmış bir ekibe devretmek istediğiniz durumlar.You wish to move the responsibility for issues such as network security, throttling, or other network boundary concerns to a more specialized team.

Bu düzen ayrı hizmetler arasında bağ oluşmasına yol açıyorsa uygun olmayabilir.This pattern may not be suitable if it introduces coupling across services.

ÖrnekExample

SSL boşaltma uygulaması olarak Nginx kullanan aşağıdaki yapılandırma, bir gelen SSL bağlantısını sonlandırır ve bağlantıyı üç yukarı akış HTTP sunucusundan birine dağıtır.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;
        }
}