Antipattern: Önbellek hata yanıtları

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

Önbelleğe alma, verileri ileride kullanılmak üzere önbellek adı verilen bir depolama alanında geçici olarak depolama işlemidir bir referans noktası olarak kabul edilir. Verileri önbelleğe almak, aşağıdaki nedenlerle performans açısından önemli avantajlar sağlar:

  • Verilerin daha hızlı alınmasını sağlar
  • Verilerin tekrar tekrar yeniden oluşturulmasını önleyerek işleme süresini kısaltır
  • API isteklerinin arka uç sunucularına ulaşmasını engeller ve böylece arka uç sunucularda
  • Sistem/uygulama kaynaklarının daha iyi kullanılmasını sağlar
  • API'lerin yanıt sürelerini iyileştirir

Çok sık değişmeyen bazı verilere sık sık erişmek zorunda olduğumuzda, bu verileri saklamak için bir önbellek kullanmanızı öneririz.

Apigee Edge, kalıcı ve daha hızlı olması için verileri çalışma zamanında bir önbellekte depolama özelliği sunar. içerir. Önbelleğe alma özelliği PopulateCache politikası üzerinden sunulur. LookupCache politikası, InValidateCache politikası ve ResponseCache politikası.

Bu bölümde Yanıt Önbelleği politikasına göz atalım. Apigee Edge'deki Yanıt Önbelleği politikası platform, arka uç sunucularından gelen yanıtları önbelleğe almanızı sağlar. İstemci uygulamaları Aynı arka uç kaynağına tekrar tekrar istek gönderdiğinde ve kaynak güncellenir düzenli aralıklarla, bu politikayı kullanarak bu yanıtları önbelleğe alabiliriz. Yanıt Önbelleği politikası önbelleğe alınan yanıtların döndürülmesine yardımcı olur ve sonuç olarak isteklerin yönlendirilmesini önler arka uç sunucularına geri yüklenebilir.

Yanıt Önbelleği politikası:

  • Arka uca ulaşan isteklerin sayısını azaltır
  • Ağ bant genişliğini azaltır
  • API performansını ve yanıt sürelerini iyileştirir

Antipattern

ResponseCache politikası, HTTP yanıtlarını olası herhangi bir Durum kodu ile önbelleğe almanıza olanak tanır. varsayılan olarak. Bu, hem başarı hem de hata yanıtlarının önbelleğe alınabileceği anlamına gelir.

Aşağıda, varsayılan yapılandırmaya sahip örnek bir Yanıt Önbelleği politikası verilmiştir:

<!-- /antipatterns/examples/1-1.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache">
  <DisplayName>TargetServer ResponseCache</DisplayName>
  <CacheKey>
    <Key Fragment ref="request.uri" /></CacheKey>
    <Scope>Exclusive</Scope>
    <ExpirySettings>
      <TimeoutInSec ref="flow.variable.here">600</TimeoutInSec>
    </ExpirySettings>
  <CacheResource>targetCache</CacheResource>
</ResponseCache>

Yanıt Önbelleği politikası, hata yanıtlarını varsayılan değerde önbelleğe alır yapılandırma. Ancak hata yanıtlarının üzerinde düşünmeye zorladım, çünkü:

  • 1. Senaryo: Geçici, bilinmeyen bir dönemde başarısızlıklar meydana gelir hata yanıtları göndermeye devam edebilir (sorun çözüldükten sonra bile önbelleğe alma nedeniyle)

    VEYA

  • 2. Senaryo: Hatalar belirli bir süre boyunca gözlemlenir. sorun çözüldüğünde yanıtları önbelleğe almamak için kodu değiştirmemiz gerekecektir.

Bu iki senaryoyu daha ayrıntılı ele alarak bunu açıklayalım.

Senaryo 1: Geçici arka uç/kaynak hatası

Arka uç sunucusundaki hatanın aşağıdakilerden biri olduğunu göz önünde bulundurun:

  • Geçici ağ hatası
  • Arka uç sunucusu çok yoğun ve geçici bir istek için isteklere yanıt veremiyor süre
  • İstenen arka uç kaynağı geçici bir süre için kaldırılmış/kullanılamıyor olabilir
  • Arka uç sunucusu, geçici bir süre için yüksek işleme süresi nedeniyle yavaş yanıt veriyor. vb.

Tüm bu durumlarda hatalar bilinmeyen bir zaman dilimi için gerçekleşebilir ve o zaman ve başarılı yanıtlar alınıyor. Hata yanıtlarını önbelleğe alırsak iletileri göndermeye devam edebiliriz. arka uç sunucusundaki sorun çözülmüş olsa bile kullanıcılara gönderilen hata yanıtları.

Senaryo 2: Sürekli veya sabit arka uç/kaynak hatası

Arka uçtaki hatanın sabit bir süre boyunca ortaya çıktığını bildiğimizi göz önünde bulundurun. Örneğin, şunlardan birinin farkındasınızdır:

  • Belirli bir arka uç kaynağı 1 saat boyunca kullanılamayacak

    VEYA

  • Arka uç sunucusu ani bir site hatası nedeniyle 24 saat boyunca kaldırılmış/kullanılamıyorsa ölçeklendirme sorunları, bakım, yükseltme vb.

Bu bilgilerle, önbellek geçerlilik süresini Yanıt Önbelleği'nde uygun şekilde ayarlayabiliriz. Böylece, hata yanıtlarını daha uzun bir süre önbelleğe almayacağız. Ancak, arka uç sunucusu/kaynağı tekrar kullanılabilir, önbelleğe almayı önlemek için politikayı değiştirmemiz gerekecek hata yanıtları. Bunun nedeni, arka uçtan gelen geçici/tek seferlik bir hata veya yanıtı önbelleğe alırız ve yukarıdaki 1. senaryoda açıklanan sorunla karşılaşırız.

Etki

  • Hata yanıtlarını önbelleğe almak, sorun çözüldükten sonra bile hata yanıtlarının gönderilmesine neden olabilir arka uç sunucusunda çözümlendi
  • Kullanıcılar, sorunun ne olduğunu bilmeden sorunun nedenini bulmak için çok fazla çaba harcayabilirler. arka uç sunucusundan hata yanıtlarının önbelleğe alınmasından kaynaklanır

En iyi uygulama

  • Hata yanıtlarını yanıt önbelleğinde depolamayın. Lütfen <ExcludeErrorResponse> öğesitrue Hata yanıtlarının aşağıdaki kodda gösterildiği gibi önbelleğe alınmasını önlemek için ResponseCache politikası snippet'i Entegre bu yapılandırmada yalnızca 200'den 205'e kadar olan varsayılan başarı kodlarına değiştirilir) önbelleğe alınır.
    <!-- /antipatterns/examples/1-2.xml -->
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache">
      <DisplayName>TargetServerResponseCache</DisplayName>
      <CacheKey>
        <KeyFragment ref="request.uri" />
      </CacheKey>
      <Scope>Exclusive</Scope>
      <ExpirySettings>
        <TimeoutinSec ref="flow.variable.here">600</TimeoutinSec>
      </ExpirySettings>
      <CacheResource>targetCache</CacheResource>
      <ExcludeErrorResponse>true</ExcludeErrorResponse>
    </ResponseCache>
  • Belirli bir nedenden dolayı hata yanıtlarını önbelleğe almanız gerekiyorsa hatanın bildirileceği maksimum/tam süreyi belirleyebilir (zaman yapabilirsiniz):
    • Hata yanıtlarının önbelleğe alınmasını önlemek için Son Geçerlilik Zamanı'nı uygun şekilde ayarlayın. hatanın görüleceği süreden daha uzundur.
    • ResponseCache politikasını kullanarak hata yanıtlarını <ExcludeErrorResponse> öğesi.

    Bunu yalnızca arka uç sunucu hatasının kısa/geçici dönem olarak kabul edilir.

  • Apigee, arka uç sunucularından 5xx yanıtlarının önbelleğe alınmasını önermemektedir.