Ağ Geçidi Yönlendirme düzeniGateway Routing pattern

Tek bir uç nokta kullanarak istekleri birden çok hizmete yönlendirin.Route requests to multiple services using a single endpoint. Bu düzen, tek bir uç noktada birden çok hizmeti kullanıma sunmak ve isteğe bağlı olarak uygun hizmete yönlendirme gerçekleştirmek istediğiniz durumlarda kullanışlıdır.This pattern is useful when you wish to expose multiple services on a single endpoint and route to the appropriate service based on the request.

Bağlam ve sorunContext and problem

Bir istemcinin birden çok hizmeti kullanması gerektiğinde, her hizmet için ayrı bir uç nokta ayarlamak ve istemcinin her bir uç noktayı yönetmesini sağlamak zor olabilir.When a client needs to consume multiple services, setting up a separate endpoint for each service and having the client manage each endpoint can be challenging. Örneğin, bir e-ticaret uygulaması arama, incelemeler, sepet, ödeme ve siparişi geçmişi gibi hizmetler sağlayabilir.For example, an e-commerce application might provide services such as search, reviews, cart, checkout, and order history. Her hizmet için istemcinin etkileşim kurması gereken farklı bir API vardır ve istemcinin hizmetlere bağlanabilmesi için her uç nokta hakkında bilgi sahibi olması gerekir.Each service has a different API that the client must interact with, and the client must know about each endpoint in order to connect to the services. Bir API değişirse istemcinin de güncelleştirilmesi gerekir.If an API changes, the client must be updated as well. Bir hizmeti iki veya daha fazla ayrı hizmet olarak yeniden düzenlerseniz kod hem hizmette hem de istemcide değiştirilmelidir.If you refactor a service into two or more separate services, the code must change in both the service and the client.

ÇözümSolution

Bir uygulama, hizmet ve dağıtım kümesinin önüne bir ağ geçidi yerleştirin.Place a gateway in front of a set of applications, services, or deployments. Uygulama Katman 7 yönlendirmeyi kullanarak isteği uygun örneklere yönlendirin.Use application Layer 7 routing to route the request to the appropriate instances.

Bu düzende, istemci uygulamasının yalnızca tek bir uç nokta ile ilgili bilgi sahibi olması ve iletişim kurması gerekir.With this pattern, the client application only needs to know about and communicate with a single endpoint. Bir hizmet birleştirilir veya bölünürse istemcinin mutlaka güncelleştirilmesi gerekmez.If a service is consolidated or decomposed, the client does not necessarily require updating. Ağ geçidine istek göndermeye devam edebilir ve yalnızca yönlendirme değişir.It can continue making requests to the gateway, and only the routing changes.

Ağ geçidi ayrıca arka uç hizmetlerini istemcilerden soyutlamanıza imkan sağlayarak ağ geçidinin arkasındaki arka uç hizmetlerinde değişiklik yapabilmenize rağmen istemci çağrılarının basit kalmasını sağlamanıza olanak tanır.A gateway also lets you abstract backend services from the clients, allowing you to keep client calls simple while enabling changes in the backend services behind the gateway. İstemci çağrıları beklenen istemci davranışı için gerekli hizmete veya hizmetlere yönlendirilebilir ve istemciyi değiştirmek zorunda kalmadan ağ geçidinin arkasına hizmet ekleyebilir ya da buradaki hizmetleri bölüp yeniden düzenleyebilirsiniz.Client calls can be routed to whatever service or services need to handle the expected client behavior, allowing you to add, split, and reorganize services behind the gateway without changing the client.

Ağ geçidi yönlendirme düzeni diyagramı

Bu düzen, güncelleştirmelerin kullanıcılara nasıl sunulacağını yönetmenize olanak tanıyarak dağıtımı konusunda da yardımcı olabilir.This pattern can also help with deployment, by allowing you to manage how updates are rolled out to users. Hizmetinizin yeni bir sürümü dağıtıldığında, mevcut sürüm ile paralel olarak dağıtılabilir.When a new version of your service is deployed, it can be deployed in parallel with the existing version. Yönlendirme, hizmetin hangi sürümünün istemcilere artımlı çeşitli yayın stratejileri uygulama esnekliği vererek, paralel olarak sunulan denetlemek veya bütünlüklü güncelleştirme olanak tanır.Routing lets you control what version of the service is presented to the clients, giving you the flexibility to use various release strategies, whether incremental, parallel, or complete rollouts of updates. Yeni hizmet dağıtıldıktan sonra bulunan herhangi bir sorun, istemcileri etkilemeden ağ geçidinde hızlı bir yapılandırma değişikliği yapılarak geri alınabilir.Any issues discovered after the new service is deployed can be quickly reverted by making a configuration change at the gateway, without affecting clients.

Sorunlar ve dikkat edilmesi gerekenlerIssues and considerations

  • Ağ geçidi hizmeti bir tek hata noktası olabilir.The gateway service may introduce a single point of failure. Bunun kullanılabilirlik gereksinimlerinizi karşılayacak şekilde doğru olarak tasarlandığından emin olun.Ensure it is properly designed to meet your availability requirements. Uygularken dayanıklılık ve hataya dayanıklılık özelliklerini göz önünde bulundurun.Consider resiliency and fault tolerance capabilities when implementing.
  • Ağ geçidi hizmeti bir performans sorununa neden olabilir.The gateway service may introduce a bottleneck. Ağ geçidinin yükü işlemek için yeterli performans kapasitesine sahip olduğundan ve büyüme beklentilerinize uygun olarak kolayca ölçeklendirilebileceğinden emin olun.Ensure the gateway has adequate performance to handle load and can easily scale in line with your growth expectations.
  • Hizmetler için zincirleme bir şekilde yayılan hatalara yol açmadığınızdan emin olmak için ağ geçidinde yük testi gerçekleştirin.Perform load testing against the gateway to ensure you don't introduce cascading failures for services.
  • Ağ geçidi yönlendirme 7. düzeydedir.Gateway routing is level 7. IP, bağlantı noktası, üst bilgi veya URL’yi temel alabilir.It can be based on IP, port, header, or URL.

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

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

  • Bir istemcinin bir ağ geçidi arkasında erişilebilir olan birden çok hizmeti kullanmasını gerektiren durumlar.A client needs to consume multiple services that can be accessed behind a gateway.
  • Tek bir uç nokta kullanarak istemci uygulamalarını basitleştirmek istediğiniz durumlar.You wish to simplify client applications by using a single endpoint.
  • Dışarıya dönük uç noktalardan gelen istekleri iç sanal uç noktalarına yönlendirmenizi (örneğin, bir VM’deki bağlantı noktalarının küme sanal IP adreslerine sunulması) gerektiren durumlar.You need to route requests from externally addressable endpoints to internal virtual endpoints, such as exposing ports on a VM to cluster virtual IP addresses.

Yalnızca birkaç hizmet kullanan basit bir uygulamanız varsa bu düzen uygun olmayabilir.This pattern may not be suitable when you have a simple application that uses only one or two services.

ÖrnekExample

Yönlendirici olarak Nginx kullanılan aşağıdaki dosya, farklı sanal dizinlerde bulunan uygulamalara yönelik istekleri arka uçtaki farklı makinelere yönlendiren bir sunucu için basit bir örnek yapılandırma dosyasıdır.Using Nginx as the router, the following is a simple example configuration file for a server that routes requests for applications residing on different virtual directories to different machines at the 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;
    }
}