Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
TargetEndpoint yapılandırması, Apigee Edge'in bir arka uç hizmetine veya API'ye bağlanma şeklini tanımlar. İstekleri gönderir ve yanıtları arka uç hizmetine gönderir. Arka uç hizmeti HTTP/HTTPS sunucusu, NodeJS veya Barındırılan Hedef olabilir.
TargetEndpoint'teki arka uç hizmeti aşağıdaki yöntemlerden biriyle çağrılabilir:
- URL'yi HTTP veya HTTPS sunucusuna yönlendirme
- Edge tarafından barındırılan bir Node.js komut dosyasına ScriptTarget öğesi
- Barındırılan Hedef Ortamında dağıtılan NodeJS'ye Barındırılan Target
- TargetServer yapılandırması
Benzer şekilde, Hizmet Çağrısı politikası da API Proxy akışından herhangi bir harici hizmete çağrı yapmak için kullanılabilir. Bu politika, HTTP/HTTPS hedef URL'lerinin doğrudan politikanın kendisinde veya bir TargetServer yapılandırması kullanılarak tanımlanmasını destekler.
TargetServer yapılandırması
TargetServer yapılandırması, somut uç nokta URL'lerini TargetEndpoint yapılandırmalarından veya Hizmet Çağrı Politikası politikalarından ayırır. Bir TargetServer'a, TargetEndpoint'te URL yerine bir adla başvurulur. TargetServer yapılandırmasında arka uç hizmetinin ana makine adı, bağlantı noktası numarası ve diğer ayrıntılar bulunur.
Aşağıda örnek bir TargetServer yapılandırması verilmiştir:
<TargetServer name="target1"> <Host>www.mybackendservice.com</Host> <Port>80</Port> <IsEnabled>true</IsEnabled> </TargetServer>
TargetServer, her ortam için farklı yapılandırmalara sahip olmanıza olanak tanır. TargetEndpoint/Hizmet Çağrısı politikası, LoadBalancer kullanılarak bir veya daha fazla adlı TargetServers ile yapılandırılabilir. Yük dengeleme için yerleşik destek, API'lerin kullanılabilirliğini ve yapılandırılmış arka uç sunucu örnekleri arasında yük devretmeyi iyileştirir.
Aşağıda, TargetServers'ın kullanıldığı örnek bir TargetEndpoint yapılandırması verilmiştir:
<TargetEndpoint name="default"> <HTTPTargetConnection>> <LoadBalancer> <Server name="target1"/> <Server name="target2"/> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
MaxFailures
MaxFailures
yapılandırması, hedef sunucuda yapılan maksimum istek hatası sayısını belirtir. Bu işlemden sonra hedef sunucu kapalı olarak işaretlenecek ve sonraki tüm istekler için rotasyondan kaldırılacaktır.
MaxFailures
öğesinin belirtildiği örnek bir yapılandırma:
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Server name="target1"/> <Server name="target2"/> <MaxFailures>5</MaxFailures> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
Yukarıdaki örnekte, "target1" için art arda beş istek başarısız olursa "target1" rotasyondan kaldırılır ve sonraki tüm istekler yalnızca target2'ye gönderilir.
Antipattern
TargetEndpoint veya Hizmet Çağrısı politikasının LoadBalancer
yapılandırmasında MaxFailures
ile sıfır olmayan bir değere ayarlanmış tek TargetServer'ın olması, olumsuz sonuçlar doğurabileceğinden önerilmez.
MaxFailures
değeri 5 (sıfır olmayan) olarak ayarlanmış, "target1" adlı tek bir TargetServer'ın bulunduğu aşağıdaki örnek yapılandırmayı düşünün:
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="target1" /> <MaxFailures>5</MaxFailures> </LoadBalancer> </HTTPTargetConnection>
TargetServer "target1" için yapılan istekler beş kez (sayı MaxFailures
içinde belirtilmiştir) başarısız olursa TargetServer rotasyondan kaldırılır. Yüklenecek başka TargetServer'lar olmadığından, bu yapılandırmaya sahip olan API Proxy'sine yapılacak sonraki tüm istekler 503 Service Unavailable
hatasıyla başarısız olur.
TargetServer "target1" normal durumuna geri dönse ve başarılı yanıtlar gönderebilecek olsa bile, API Proxy'sine yapılan istekler 503 hataları döndürmeye devam eder. Bunun nedeni, hedef yeniden çalışır hale geldikten sonra bile Edge'in TargetServer'ı otomatik olarak rotasyona almamasıdır. Bu sorunu çözmek amacıyla Edge'in TargetServer'ı tekrar eski haline getirmesi için API Proxy'sinin yeniden dağıtılması gerekir.
Hizmet Çağrı Politikası'nda aynı yapılandırma kullanılırsa TargetServer "target1" için yapılan istekler 5 kez başarısız olduktan sonra API istekleri 500 Hatası alır.
Etki
TargetEndpoint veya Hizmet Çağrı Politikası'nın LoadBalancer
yapılandırmasında MaxFailures
sıfır olmayan bir değere ayarlanmış tek bir TargetServer'ın kullanılması:
- API Proxy'si yeniden dağıtılana kadar API İstekleri, 503/500 Hatayla sürekli olarak başarısız olur (İstekler birkaç kez başarısız olduktan sonra).
- Daha uzun süreli kesintiler karmaşıktır ve bu sorunun nedenini teşhis etmek daha fazla zaman alabilir (bu antipattern hakkında önceden bilgi sahibi olmadan).
En İyi Uygulama
- Daha yüksek kullanılabilirlik için
LoadBalancer
yapılandırmasında birden fazla TargetServer'a sahip olun. MaxFailures
sıfır dışında bir değere ayarlandığında her zaman bir Durum İzleme tanımlayın. Hata sayısıMaxFailures
politikasında belirtilen sayıya ulaştığında hedef sunucu rotasyondan çıkarılır. HealthMonitor'a sahip olmak, hedef sunucu tekrar kullanılabilir hale gelir gelmez TargetServer'ın tekrar rotasyona alınmasını sağlar. Bu da proxy'nin yeniden dağıtılmasına gerek olmadığı anlamına gelir.Durum denetiminin, Edge'ın hedef sunuculara bağlanmak için kullandığı bağlantı noktası numarasında yapıldığından emin olmak amacıyla Apigee, TargetServer bağlantı noktasından farklı olmadığı sürece
<TCPMonitor>
altındaki<Port>
alt öğesini atlamanızı önerir.<Port>
varsayılan olarak TargetServer bağlantı noktasıyla aynıdır.HealthMonitor ile örnek yapılandırma:
<TargetEndpoint name="default"> <HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="target1" /> <Server name="target2" /> <MaxFailures>5</MaxFailures> </LoadBalancer> <Path>/test</Path> <HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <TCPMonitor> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> </TCPMonitor> </HealthMonitor> </HTTPTargetConnection> </TargetEndpoint>
Yalnızca bir TargetServer'ın atanmasına neden olacak bazı kısıtlamalar varsa ve HealthMonitor kullanılmıyorsa
LoadBalancer
yapılandırmasındaMaxFailures
belirtmeyin.Varsayılan MaxFailures değeri 0'dır. Bu, Edge'in her zaman her istek için hedefe bağlanmaya çalıştığı ve hedef sunucuyu rotasyondan hiçbir zaman kaldırmadığı anlamına gelir.