Anda sedang melihat dokumentasi Apigee dan Apigee Hybrid.
Lihat dokumentasi
Apigee Edge.
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 menyediakan 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 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
Antipola
Kebijakan ResponseCache memungkinkan Anda menyimpan respons HTTP dalam cache dengan kemungkinan 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 menyimpan respons error dalam cache tanpa mempertimbangkan implikasi buruknya karena:
- Skenario 1: Kegagalan terjadi untuk jangka waktu yang tidak diketahui dan bersifat sementara, dan kami
mungkin terus mengirimkan respons error
karena caching meskipun masalah telah diperbaiki
ATAU
- Skenario 2: Kegagalan akan diamati selama jangka waktu tetap, 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 Cache Respons sehingga kita tidak menyimpan respons error dalam cache untuk waktu yang lebih lama. Namun, setelah server/resource backend tersedia kembali, 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 penyimpanan respons error dari server backend dalam cache
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 menyimpan respons error dalam cache 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 menyimpan respons error dalam cache lebih lama dari waktu kegagalan dapat dilihat.
- Gunakan kebijakan ResponseCache untuk meng-cache respons error tanpa elemen
<ExcludeErrorResponse>.
Lakukan tindakan 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.