Antipattern: MaxFailures değeri sıfır olmayan tek bir hedef sunucuyla Yük Dengeleme

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

TargetEndpoint yapılandırması, Apigee Edge'in bir sunucuya arka uç hizmeti veya API'dir. İstekleri gönderir ve yanıtları alır arka uç hizmetini sağlar. Arka uç hizmeti bir 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:

  • HTTP veya HTTPS sunucusuna doğrudan URL
  • Edge'de barındırılan bir Node.js komut dosyasına ScriptTarget
  • Barındırılan Hedef Ortamda dağıtılan NodeJS'e HostedTarget
  • TargetServer yapılandırması

Benzer şekilde, Hizmet Çağrısı politikası herhangi bir harici hizmete çağrı yapmak için kullanılabilir API Proxy akışından çıkarır. Bu politika, HTTP/HTTPS hedef URL'lerinin tanımlanmasını destekler. veya TargetServer yapılandırması kullanarak yapabilirsiniz.

TargetServer yapılandırması

TargetServer yapılandırması, somut uç nokta URL'lerini TargetEndpoint yapılandırmaları veya hizmet açıklama metni politikaları. TargetServer TargetEndpoint'teki URL yerine bir ada göre referans alın. TargetServer yapılandırması arka uç hizmetinin ana makine adı, bağlantı noktası numarası ve diğer ayrıntılara sahip olacaktır.

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ızı sağlar. TargetEndpoint/Service Çağrı politikası, bir veya daha fazla adlandırılmış TargetServer ile yapılandırılabilir bir LoadBalancer kullanabilirsiniz. Yerleşik yük dengeleme desteği, kullanılabilirliği artırır ve yapılandırılmış arka uç sunucu örnekleri arasında yük devretmeyi içerir.

TargetServers kullanan bir örnek TargetEndpoint yapılandırması aşağıda verilmiştir:

<TargetEndpoint name="default">
    <HTTPTargetConnection>>
      <LoadBalancer>
        <Server name="target1"/>
      <Server name="target2"/>
      </LoadBalancer>
    </HTTPTargetConnection>
</TargetEndpoint>

MaxFailures

MaxFailures yapılandırması, maksimum istek hatası sayısını belirtir sonrasında, hedef sunucu devre dışı olarak işaretlenir ve kaldırılır. bu ayarı döndürmez.

MaxFailures içeren bir yapılandırma örneği belirtildi:

<TargetEndpoint name="default">
    <HTTPTargetConnection>
      <LoadBalancer>
        <Server name="target1"/>
       <Server name="target2"/>
       <MaxFailures>5</MaxFailures>
      </LoadBalancer>
    </HTTPTargetConnection>
</TargetEndpoint>

Yukarıdaki örnekte, "target1" için arka arkaya beş istek başarısız olduysa ardından "target1" rotasyondan kaldırılacak ve sonraki tüm istekler yalnızca target2'ye gönderilecek.

Antipattern

LoadBalancer MaxFailures ile Hedef Uç Nokta veya Hizmet Açıklama Metni Politikası olumsuz etkileri olabileceği için önerilmez.

Tek bir TargetServer'a sahip aşağıdaki örnek yapılandırmayı göz önünde bulundurun adlı "hedef1" MaxFailures değeri 5 olarak (sıfır olmayan değer) ayarlanmış olarak:

<TargetEndpoint name="default">
  <HTTPTargetConnection>
      <LoadBalancer>
        <Algorithm>RoundRobin</Algorithm>
        <Server name="target1" />
        <MaxFailures>5</MaxFailures>
      </LoadBalancer>
  </HTTPTargetConnection>

TargetServer "target1" istekleri beş kez başarısız olursa (sayı MaxFailures cinsinden belirtilir), TargetServer rotasyondan kaldırılır. Geçirilebilecek başka TargetServer olmadığından, API Proxy'sine bu yapılandırmaya sahip olan sonraki tüm istekler 503 Service Unavailable hata.

TargetServer "target1" olsa bile yeniden normal durumuna dönebilir ve bir süre daha başarılı yanıt gönderdiğinde, API Proxy'sine yapılan istekler 503 hataları döndürür. Bunun nedeni Edge'in TargetServer'ı otomatik olarak yerleştirmemesidir. çalışmaya devam eder. Bu sorunu gidermek için API Proxy'sinin yeniden dağıtılması gerekir Edge'in TargetServer'ı rotasyona geri alın.

Hizmet Çağrı Politikası'nda aynı yapılandırma kullanılıyorsa API de istekler, "target1" adlı TargetServer isteklerinden sonra 500 hatası alacak başarısız olduğunu görebilirsiniz.

Etki

Şu öğenin LoadBalancer yapılandırmasında tek bir TargetServer kullanma: MaxFailures değeri bulunan Hedef Uç Nokta veya Hizmet Çağrı Politikası'nın sıfır olmayan bir değere ayarlanmasının nedenleri şunlardır:

  • API Proxy'si yeniden dağıtılana kadar API İstekleri, (MaxFailures sayısı için başarısız olduktan sonra) sürekli olarak 503/500 Hataları ile başarısız olur.
  • Kesinti daha uzun sürer ve bu sorunun nedenini teşhis etmek daha fazla zaman alabilir (bu antipattern hakkında önceden bilgi sahibi olmadan).

En İyi Uygulama

  1. Daha yüksek kullanılabilirlik için LoadBalancer yapılandırmasında birden fazla TargetServer bulundurun.
  2. MaxFailures olduğunda her zaman bir Durum Monitörü tanımlayın değeri sıfır dışında bir değere ayarlanır. Şu durumda hedef sunucu rotasyondan kaldırılır: hata sayısı MaxFailures ile belirtilen sayıya ulaşır. HealthMonitor'e sahip olmak, TargetServer'ın hedef sunucu tekrar kullanılabilir hale gelir gelmez; bunun anlamı, proxy'yi yeniden dağıtmanız gerekmez.

    Durum denetiminin Edge, hedef sunuculara bağlanmak için kullandığı için Apigee, Aksi takdirde, <TCPMonitor> altındaki <Port> alt öğesi TargetServer bağlantı noktasından farklıdır. <Port> varsayılan olarak TargetServer bağlantı noktası ile 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>
    
  3. Yalnızca bir TargetServer ve HealthMonitor uygulamasının yalnızca kullanılmazsa LoadBalancer yapılandırmasında MaxFailures belirtmeyin.

    MaxFailures'un varsayılan değeri 0'dır. Bu durumda, Edge her istek için hedefe bağlanmaya çalışır ve hedef sunucuyu rotasyondan hiçbir zaman kaldırmaz.

Daha fazla bilgi