Antipattern: Önbellek hata yanıtları

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

Önbelleğe alma, gelecekte başvurmak üzere verileri geçici olarak önbellek adı verilen bir depolama alanında saklama işlemidir. Verileri önbelleğe almak, aşağıdaki nedenlerden dolayı önemli performans 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ç sunuculara ulaşmasını önler ve böylece arka uç sunuculardaki 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 ö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 olanağı sunar. Önbelleğe alma özelliği, PopulateCache policy, LookupCache policy, InvalidateCache policy ve ResponseCache policy aracılığıyla kullanılabilir.

Bu bölümde, yanıt önbelleği politikasına göz atalı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 istekte bulunuyorsa ve kaynak düzenli olarak güncelleniyorsa bu politikayı kullanarak bu yanıtları önbelleğe alabiliriz. Yanıt Önbelleği politikası, önbelleğe alınmış yanıtların döndürülmesine yardımcı olur ve sonuç olarak isteklerin arka uç sunucularına gereksiz yere yönlendirilmesini önler.

Yanıt önbelleği politikası:

  • Arka uca ulaşan istek 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 olası tüm durum kodlarına sahip HTTP yanıtlarını önbelleğe almanıza olanak tanır. Bu, hem başarı hem de hata yanıtlarının önbelleğe alınabileceği anlamına gelir.

Varsayılan yapılandırmaya sahip örnek bir yanıt önbelleği politikası aşağıda 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. Ancak, olumsuz etkileri yeterince düşünmeden hata yanıtlarını önbelleğe almak tavsiye edilmez. Bunun nedenleri:

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

    VEYA

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

Bu durumu, aşağıdaki iki senaryoyu daha ayrıntılı olarak inceleyerek açıklayalım.

1. senaryo: Geçici arka uç/kaynak hatası

Arka uç sunucusundaki hatanın aşağıdaki nedenlerden biriyle ilişkili olduğunu göz önünde bulundurun:

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

Tüm bu durumlarda, hatalar bilinmeyen bir süre boyunca devam edebilir ve ardından 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üren veya sabit arka uç/kaynak hatası

Arka uçtaki hatanın belirli bir süre boyunca devam ettiğini varsayalım. Örneğin, şunlardan birinin gerçekleştiğini biliyorsunuz:

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

    VEYA

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

Bu bilgiler sayesinde, hata yanıtlarını daha uzun süre önbelleğe almamak için yanıt önbelleği politikasında önbelleğin geçerlilik bitiş süresini uygun şekilde ayarlayabiliriz. Ancak arka uç sunucusu/kaynağı tekrar kullanılabilir hale geldiğinde, hata yanıtlarının önbelleğe alınmasını önlemek için politikayı değiştirmemiz gerekir. Bunun nedeni, arka uç sunucusunda geçici veya tek seferlik bir hata olması durumunda yanıtı önbelleğe almamız ve yukarıdaki 1. senaryoda açıklanan sorunla karşılaşmamızdır.

Etki

  • Hata yanıtlarının önbelleğe alınması, arka uç sunucusunda sorun çözüldükten sonra bile hata yanıtlarının gönderilmesine neden olabilir.
  • Kullanıcılar, sorunun nedeninin arka uç sunucusundan gelen hata yanıtlarının önbelleğe alınmasından kaynaklandığını bilmeden sorunu gidermek için çok çaba harcayabilir.

En iyi uygulama

  • Hata yanıtlarını yanıt önbelleğinde depolamayın. Aşağıdaki kod snippet'inde gösterildiği gibi hata yanıtlarının ö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-205 arasındaki varsayılan başarı kodlarına yönelik 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>
  • Hata yanıtlarını belirli bir nedenle önbelleğe almanız gerekiyorsa hatanın gözlemleneceği maksimum/kesin süreyi (mümkünse) belirleyebilirsiniz:
    • Hata yanıtlarını, hatanın görülebileceği süreden daha uzun süre önbelleğe almamak için son kullanma zamanını uygun şekilde ayarlayın.
    • Hata yanıtlarını <ExcludeErrorResponse> öğesi olmadan önbelleğe almak için ResponseCache politikasını kullanın.

    Bu işlemi yalnızca arka uç sunucu hatasının kısa/geçici bir süre için olmadığını kesin olarak biliyorsanız yapın.

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