Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info
Caching adalah proses penyimpanan data sementara di area penyimpanan yang disebut cache untuk referensi pada masa mendatang. Menyimpan data ke dalam cache memberikan manfaat performa yang signifikan karena:
- Memungkinkan pengambilan data yang lebih cepat
- Mengurangi waktu pemrosesan dengan menghindari regenerasi data berulang kali
- Mencegah permintaan API mencapai server backend dan dengan demikian mengurangi overhead pada server backend
- Memungkinkan pemanfaatan resource sistem/aplikasi yang lebih baik
- Meningkatkan waktu respons API
Setiap kali kita harus sering mengakses beberapa data yang tidak terlalu sering berubah, sebaiknya gunakan cache untuk menyimpan data ini.
Apigee Edge memberikan kemampuan untuk menyimpan data dalam cache saat runtime untuk persistensi dan pengambilan yang lebih cepat. Fitur caching tersedia melalui kebijakan PopulateCache, kebijakan LookupCache, kebijakan InvalidateCache, dan kebijakan ResponseCache.
Di bagian ini, mari kita lihat kebijakan Response Cache. Kebijakan Cache Respons di platform Apigee Edge memungkinkan Anda menyimpan dalam cache respons dari server backend. Jika aplikasi klien membuat permintaan ke resource backend yang sama berulang kali dan resource diperbarui secara berkala, kita dapat menyimpan cache respons ini menggunakan kebijakan ini. Kebijakan Cache Respons membantu menampilkan respons yang di-cache dan oleh karena itu, menghindari penerusan permintaan ke server backend secara tidak perlu.
Kebijakan Cache Respons:
- Mengurangi jumlah permintaan yang mencapai backend
- Mengurangi bandwidth jaringan
- Meningkatkan performa dan waktu respons API
Anti-pola
Kebijakan ResponseCache memungkinkan Anda menyimpan respons HTTP dalam cache dengan Kode status apa pun, secara default. Artinya, respons berhasil dan error dapat di-cache.
Berikut adalah contoh kebijakan Response Cache dengan konfigurasi default:
<!-- /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>
Kebijakan Cache Respons menyimpan respons error dalam konfigurasi default-nya. Namun, tidak disarankan untuk meng-cache respons error tanpa mempertimbangkan implikasi buruknya karena:
- Skenario 1: Kegagalan terjadi untuk jangka waktu yang tidak diketahui dan bersifat sementara, dan kami
mungkin terus mengirim respons error
karena penyimpanan dalam cache meskipun setelah masalah telah diperbaiki
ATAU
- Skenario 2: Kegagalan akan diamati selama jangka waktu tertentu, kemudian kita harus mengubah kode untuk menghindari respons yang di-cache setelah masalah diperbaiki
Mari kita jelaskan hal ini dengan membahas kedua skenario ini secara lebih mendetail.
Skenario 1: Kegagalan sementara backend/resource
Pertimbangkan bahwa kegagalan di server backend disebabkan oleh salah satu alasan berikut:
- Gangguan jaringan sementara
- Server backend sangat sibuk dan tidak dapat merespons permintaan untuk jangka waktu sementara
- Resource backend yang diminta mungkin dihapus/tidak tersedia untuk sementara waktu
- Server backend merespons dengan lambat karena waktu pemrosesan yang tinggi untuk jangka waktu sementara, dll.
Dalam semua kasus ini, kegagalan dapat terjadi selama jangka waktu yang tidak diketahui, lalu kita mungkin mulai mendapatkan respons yang berhasil. Jika kita menyimpan respons error dalam cache, kita dapat terus mengirimkan respons error kepada pengguna meskipun masalah pada server backend telah diperbaiki.
Skenario 2: Kegagalan backend/resource yang berkepanjangan atau tetap
Pertimbangkan bahwa kami mengetahui kegagalan di backend terjadi selama jangka waktu tertentu. Misalnya, Anda mengetahui bahwa:
- Resource backend tertentu tidak akan tersedia selama 1 jam
ATAU
- Server backend dihapus/tidak tersedia selama 24 jam karena kegagalan situs yang tiba-tiba, masalah penskalaan, pemeliharaan, upgrade, dll.
Dengan informasi ini, kita dapat menetapkan waktu habis masa berlaku cache dengan tepat dalam kebijakan Response Cache agar kita tidak menyimpan respons error dalam cache untuk waktu yang lebih lama. Namun, setelah server/resource backend tersedia lagi, kita harus mengubah kebijakan untuk menghindari respons error yang di-cache. Hal ini karena jika terjadi kegagalan sementara/sekali dari server backend, kami akan menyimpan respons dalam cache dan kami akan mengalami masalah yang dijelaskan dalam skenario 1 di atas.
Dampak
- Respons error yang di-cache dapat menyebabkan respons error dikirim meskipun masalah telah diselesaikan di server backend
- Pengguna mungkin menghabiskan banyak upaya untuk memecahkan masalah tanpa mengetahui bahwa masalah tersebut disebabkan oleh penyiapan respons error dari server backend
Praktik terbaik
- Jangan menyimpan respons error dalam cache respons. Pastikan elemen
<ExcludeErrorResponse>disetel ketruedalam kebijakan ResponseCache untuk mencegah respons error di-cache seperti yang ditunjukkan dalam cuplikan kode di bawah. Dengan konfigurasi ini, hanya respons untuk kode keberhasilan default 200 hingga 205 (kecuali kode keberhasilan diubah) yang akan di-cache.<!-- /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>
- Jika Anda memiliki persyaratan untuk meng-cache respons error karena alasan tertentu, Anda
dapat menentukan durasi waktu maksimum/tepat saat kegagalan akan diamati (jika
memungkinkan):
- Tetapkan Waktu habis masa berlaku dengan tepat untuk memastikan bahwa Anda tidak meng-cache respons error lebih lama dari waktu kegagalan dapat dilihat.
- Gunakan kebijakan ResponseCache untuk meng-cache respons error tanpa elemen
<ExcludeErrorResponse>.
Lakukan hal ini hanya jika Anda benar-benar yakin bahwa kegagalan server backend tidak terjadi dalam jangka waktu singkat/sementara.
- Apigee tidak merekomendasikan penyimpanan respons 5xx dari server backend dalam cache.