यह Apigee Edge के दस्तावेज़ हैं.
पर जाएं
Apigee X दस्तावेज़. info
कैश मेमोरी में डेटा सेव करने की प्रोसेस को कैशिंग कहते हैं. इसमें डेटा को अस्थायी तौर पर, कैश नाम की स्टोरेज जगह में सेव किया जाता है, ताकि बाद में उसे ऐक्सेस किया जा सके. कैशिंग की मदद से, परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. इसकी वजह यह है कि:
- इससे डेटा को तेज़ी से वापस पाया जा सकता है
- डेटा को बार-बार जनरेट करने से बचने की वजह से, प्रोसेसिंग में लगने वाला समय कम हो जाता है
- इससे एपीआई के अनुरोध, बैकएंड सर्वर तक नहीं पहुंचते. इसलिए, बैकएंड सर्वर पर लोड कम हो जाता है
- इससे सिस्टम/ऐप्लिकेशन के संसाधनों का बेहतर तरीके से इस्तेमाल किया जा सकता है
- इससे एपीआई के रिस्पॉन्स टाइम बेहतर होते हैं
हमारा सुझाव है कि अगर आपको ऐसे डेटा को बार-बार ऐक्सेस करना है जिसमें ज़्यादा बदलाव नहीं होते, तो उसे कैश मेमोरी में सेव करें.
Apigee Edge में, रनटाइम के दौरान डेटा को कैश मेमोरी में सेव किया जा सकता है. इससे डेटा को लंबे समय तक सेव किया जा सकता है और उसे तेज़ी से वापस पाया जा सकता है. कैशिंग की सुविधा, PopulateCache नीति, LookupCache नीति, InvalidateCache नीति, और ResponseCache नीति के ज़रिए उपलब्ध कराई जाती है.
इस सेक्शन में, Response Cache नीति के बारे में जानते हैं. Apigee Edge प्लैटफ़ॉर्म में, Response Cache नीति की मदद से बैकएंड सर्वर से मिलने वाले रिस्पॉन्स को कैश मेमोरी में सेव किया जा सकता है. अगर क्लाइंट ऐप्लिकेशन, एक ही बैकएंड रिसॉर्स के लिए बार-बार अनुरोध करते हैं और रिसॉर्स समय-समय पर अपडेट होता रहता है, तो इस नीति का इस्तेमाल करके इन रिस्पॉन्स को कैश मेमोरी में सेव किया जा सकता है. Response Cache नीति की मदद से, कैश मेमोरी में सेव किए गए रिस्पॉन्स को वापस भेजा जा सकता है. इससे, अनुरोधों को बिना किसी ज़रूरत के बैकएंड सर्वर पर फ़ॉरवर्ड करने से बचा जा सकता है.
Response Cache नीति:
- बैकएंड तक पहुंचने वाले अनुरोधों की संख्या कम करती है
- नेटवर्क बैंडविथ को कम करती है
- एपीआई की परफ़ॉर्मेंस और रिस्पॉन्स टाइम को बेहतर बनाती है
ऐंटीपैटर्न
डिफ़ॉल्ट रूप से, ResponseCache नीति की मदद से, किसी भी स्टेटस कोड वाले एचटीटीपी रिस्पॉन्स को कैश मेमोरी में सेव किया जा सकता है. इसका मतलब है कि सफलता और गड़बड़ी, दोनों के रिस्पॉन्स को कैश मेमोरी में सेव किया जा सकता है.
यहां डिफ़ॉल्ट कॉन्फ़िगरेशन वाली Response Cache नीति का एक नमूना दिया गया है:
<!-- /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>
Response Cache नीति, डिफ़ॉल्ट कॉन्फ़िगरेशन में गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव करती है. हालांकि, गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव करने से पहले, इसके बुरे असर के बारे में सोच लेना चाहिए. इसकी वजह यह है कि:
- परिदृश्य 1: गड़बड़ियां कुछ समय के लिए होती हैं. हमें यह नहीं पता होता कि ये गड़बड़ियां कब तक रहेंगी. ऐसे में, गड़बड़ी ठीक होने के बाद भी, कैश मेमोरी में सेव किए गए गड़बड़ी के रिस्पॉन्स भेजे जा सकते हैं
या
- परिदृश्य 2: गड़बड़ियां कुछ समय के लिए दिखेंगी. इसके बाद, गड़बड़ी ठीक होने पर, रिस्पॉन्स को कैश मेमोरी में सेव करने से बचने के लिए, हमें कोड में बदलाव करना होगा
इन दोनों स्थितियों के बारे में ज़्यादा जानकारी पाने के लिए, इन्हें विस्तार से समझते हैं.
Scenario 1: बैकएंड/रिसॉर्स में कुछ समय के लिए गड़बड़ी होना
मान लें कि बैकएंड सर्वर में गड़बड़ी, इनमें से किसी एक वजह से हुई है:
- नेटवर्क में कुछ समय के लिए गड़बड़ी होना
- बैकएंड सर्वर बहुत व्यस्त है और कुछ समय के लिए अनुरोधों का जवाब नहीं दे पा रहा है
- अनुरोध किया गया बैकएंड रिसॉर्स, कुछ समय के लिए हटाया जा सकता है या उपलब्ध नहीं हो सकता है
- बैकएंड सर्वर, कुछ समय के लिए प्रोसेसिंग में ज़्यादा समय लगने की वजह से, धीरे-धीरे जवाब दे रहा है. वगैरह
इन सभी मामलों में, गड़बड़ियां कुछ समय के लिए हो सकती हैं. इसके बाद, हमें सही रिस्पॉन्स मिलने लग सकते हैं. अगर हम गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव करते हैं, तो बैकएंड सर्वर की गड़बड़ी ठीक होने के बाद भी, उपयोगकर्ताओं को गड़बड़ी के रिस्पॉन्स भेजे जा सकते हैं.
Scenario 2: बैकएंड/रिसॉर्स में लंबे समय तक या तय समय के लिए गड़बड़ी होना
मान लें कि हमें पता है कि बैकएंड में गड़बड़ी, तय समय के लिए है. उदाहरण के लिए, आपको पता है कि:
- कोई खास बैकएंड रिसॉर्स, एक घंटे के लिए उपलब्ध नहीं होगा
या
- वेबसाइट में अचानक गड़बड़ी होने, स्केलिंग से जुड़ी समस्याएं, रखरखाव, अपग्रेड वगैरह की वजह से, बैकएंड सर्वर को 24 घंटे के लिए हटा दिया गया है या वह उपलब्ध नहीं है
इस जानकारी के साथ, हम Response Cache नीति में कैश मेमोरी में सेव करने की समयसीमा को सही तरीके से सेट कर सकते हैं, ताकि गड़बड़ी के रिस्पॉन्स को लंबे समय तक कैश मेमोरी में सेव न किया जाए. हालांकि, बैकएंड सर्वर/रिसॉर्स के फिर से उपलब्ध होने के बाद, गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव करने से बचने के लिए, हमें नीति में बदलाव करना होगा. ऐसा इसलिए, क्योंकि अगर बैकएंड सर्वर में कुछ समय के लिए या एक बार गड़बड़ी होती है, तो हम रिस्पॉन्स को कैश मेमोरी में सेव कर लेंगे. इससे, ऊपर दिए गए Scenario 1 में बताई गई समस्या हो सकती है.
असर
- गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव करने से, बैकएंड सर्वर में गड़बड़ी ठीक होने के बाद भी, गड़बड़ी के रिस्पॉन्स भेजे जा सकते हैं
- उपयोगकर्ताओं को यह पता नहीं होता कि किसी समस्या की वजह, बैकएंड सर्वर से गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव करना है. इसलिए, वे समस्या की वजह का पता लगाने में काफ़ी समय और मेहनत खर्च कर सकते हैं
सबसे सही तरीका
- गड़बड़ी के रिस्पॉन्स को, रिस्पॉन्स कैश मेमोरी में सेव न करें. यह पक्का करें कि the
<ExcludeErrorResponse>element is set totruein the ResponseCache policy to prevent error responses from being cached as shown in the below code snippet. इस कॉन्फ़िगरेशन के साथ, डिफ़ॉल्ट रूप से 200 से 205 तक के सही कोड वाले रिस्पॉन्स को ही कैश मेमोरी में सेव किया जाएगा. हालांकि, सही कोड में बदलाव किया जा सकता है.<!-- /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>
- अगर आपको किसी खास वजह से गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव करना है, तो यह तय करें कि गड़बड़ी कितने समय तक दिखेगी. अगर यह तय करना मुमकिन हो, तो गड़बड़ी दिखने की ज़्यादा से ज़्यादा/सही अवधि तय करें:
- एक्सपायर होने का समय सही तरीके से सेट करें, ताकि गड़बड़ी के रिस्पॉन्स को, गड़बड़ी दिखने की अवधि से ज़्यादा समय तक कैश मेमोरी में सेव न किया जाए.
- गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव करने के लिए, ResponseCache नीति का इस्तेमाल करें. इसमें
<ExcludeErrorResponse>एलिमेंट शामिल न करें.
_ऐसा सिर्फ़ तब करें, जब आपको पक्का हो कि बैकएंड सर्वर में गड़बड़ी, कुछ समय के लिए/अस्थायी तौर पर नहीं है_.
- Apigee, बैकएंड सर्वर से मिलने वाले 5xx रिस्पॉन्स को कैश मेमोरी में सेव करने का सुझाव नहीं देता.