Antipattern: Önbellek hata yanıtları

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

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

  • Verilerin daha hızlı alınmasını sağlar
  • Verilerin sürekli yeniden oluşturulmasını önleyerek işleme süresini kısaltır
  • API isteklerinin arka uç sunuculara ulaşmasını engeller ve böylece arka uç sunuculardaki ek yükü azaltır
  • 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şmemiz gerektiğinde, bu verileri depolamak için bir önbellek kullanmanızı önemle tavsiye ederiz.

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

Bu bölümde Yanıt Önbelleği politikasına bakalım. Apigee Edge platformundaki Yanıt Önbelleği politikası, arka uç sunucularından gelen yanıtları önbelleğe almanıza olanak tanır. İstemci uygulamaları aynı arka uç kaynağına tekrar tekrar istek yaparsa ve kaynak düzenli olarak güncellenirse 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 böylece, isteklerin gereksiz yere arka uç sunucularına yönlendirilmesini önler.

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ı, varsayılan olarak HTTP yanıtlarını olası herhangi bir Durum koduyla önbelleğe almanıza olanak tanır. Bu, hem başarılı 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 yapılandırmasında önbelleğe alır. Bununla birlikte, hata yanıtlarının olumsuz etkileri üzerinde düşünmeden önbelleğe alınması önerilmez, çünkü:

  • 1. Senaryo: Hatalar geçici ve bilinmeyen bir süre boyunca ortaya çıkar ve sorun düzeltildikten sonra bile önbelleğe alma nedeniyle hata yanıtları göndermeye devam edebiliriz

    VEYA

  • 2. Senaryo: Başarısız hatalar belirli bir süre boyunca gözlemlenir ve ardından sorun düzeltildikten sonra yanıtların önbelleğe alınmasını önlemek için kodu değiştirmemiz gerekir.

Bu iki senaryoyu daha ayrıntılı bir şekilde 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 unutmayın:

  • Geçici ağ arızası
  • Arka uç sunucusu çok meşgul ve isteklere geçici bir süreliğine yanıt veremiyor
  • İstenen arka uç kaynağı kaldırılmış veya geçici bir süre kullanılamaz
  • Arka uç sunucusu, geçici bir süreliğine uzun işleme süresi nedeniyle yavaş yanıt veriyor.

Tüm bu durumlarda, bilinmeyen bir süre boyunca hatalar oluşabilir ve sonra başarılı yanıtlar almaya başlayabiliriz. Hata yanıtlarını önbelleğe alırsak arka uç sunucusundaki sorun düzeltilmiş olsa bile kullanıcılara hata yanıtları göndermeye devam edebiliriz.

Senaryo 2: Uzun süreli veya sabit arka uç/kaynak hatası

Arka uçtaki hatanın sabit bir süreye sahip olduğunu bildiğimizi unutmayın. Örneğin:

  • Belirli bir arka uç kaynağı 1 saat süreyle kullanılamayacak

    VEYA

  • Ani site hatası, ölçeklendirme sorunları, bakım, yükseltme vb. nedenlerle arka uç sunucusu kaldırılır/24 saat boyunca kullanılamaz.

Bu bilgileri kullanarak hata yanıtlarını daha uzun süre önbelleğe almamak için önbellek geçerlilik süresini Yanıt Önbelleği politikasında uygun şekilde ayarlayabiliriz. Ancak, arka uç sunucusu/kaynak tekrar kullanılabilir olduğunda hata yanıtlarının önbelleğe alınmasını önlemek için politikayı değiştirmemiz gerekecektir. Bunun nedeni, arka uç sunucusunda geçici/tek seferlik bir hata olursa yanıtı önbelleğe almamız ve yukarıdaki 1. senaryoda açıklanan sorunu elde etmemizdir.

Etki

  • Hata yanıtlarının önbelleğe alınması, arka uç sunucuda sorun çözüldükten sonra bile hata yanıtlarının gönderilmesine neden olabilir
  • Kullanıcılar, arka uç sunucudaki hata yanıtlarının önbelleğe alınmasından kaynaklandığını bilmeden sorunun nedenini gidermek için çok fazla çaba sarf edebilir

En iyi uygulama

  • Hata yanıtlarını yanıt önbelleğinde depolamayın. Hata yanıtlarının aşağıdaki kod snippet'inde gösterildiği gibi önbelleğe alınmasını önlemek için ResponseCache politikasında <ExcludeErrorResponse> öğesinin true olarak ayarlandığından emin olun. Bu yapılandırmada, yalnızca 200 ile 205 arasındaki varsayılan başarı kodlarına ilişkin yanıtlar (başarı kodları değiştirilmediği sürece) ö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 alma zorunluluğunuz varsa hatanın gözlemleneceği maksimum/tam süreyi belirleyebilirsiniz (mümkünse):
    • Hata yanıtlarını, hatanın görülebileceği süreden daha uzun bir süre boyunca önbelleğe almadığınızdan emin olmak için Sona erme süresini uygun şekilde ayarlayın.
    • Hata yanıtlarını <ExcludeErrorResponse> öğesi olmadan önbelleğe almak için ResponseCache politikasını kullanın.

    Bunu yalnızca arka uç sunucu hatasının kısa/geçici bir süreliğine olmadığından kesinlikle eminseniz yapın.

  • Apigee, arka uç sunuculardan 5xx yanıtlarının önbelleğe alınmasını önermez.