एंटीपैटर्न: कैश मेमोरी से जुड़ी गड़बड़ी के जवाब

आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इस पेज पर जाएं Apigee X दस्तावेज़.
जानकारी

कैश मेमोरी में सेव होने की प्रोसेस, डेटा को कुछ समय के लिए स्टोरेज एरिया में सेव करने की प्रोसेस है. इसे आने वाले समय के लिए कैश मेमोरी कहा जाता है संदर्भ. डेटा को कैश मेमोरी में सेव करने से, परफ़ॉर्मेंस बेहतर होती है. इसकी वजह यह है कि:

  • इससे डेटा तेज़ी से वापस पाया जा सकता है
  • इससे डेटा को बार-बार जनरेट होने से रोका जाता है, ताकि प्रोसेस में लगने वाला समय कम हो जाए
  • यह एपीआई अनुरोधों को बैकएंड सर्वर पर हिट होने से रोकता है. इससे, बैकएंड सर्वर
  • इससे सिस्टम/ऐप्लिकेशन के संसाधनों का बेहतर तरीके से इस्तेमाल किया जा सकता है
  • यह एपीआई के जवाब देने में लगने वाले समय को बेहतर बनाता है

जब हमें किसी ऐसे डेटा को बार-बार ऐक्सेस करना पड़ता है जिसमें बहुत ज़्यादा बदलाव नहीं होते, तो हम बहुत ज़्यादा देखते हैं इस डेटा को स्टोर करने के लिए कैश मेमोरी का इस्तेमाल करने का सुझाव देते हैं.

Apigee Edge की मदद से, रनटाइम के दौरान डेटा को कैश मेमोरी में सेव करने की सुविधा मिलती है, ताकि लगातार और तेज़ी से काम किया जा सके वापस पाना. कैश मेमोरी में डेटा सेव करने की सुविधा, पॉप-अप कैश मेमोरी से जुड़ी नीति के तहत उपलब्ध कराई जाती है, lookupकैश नीति, अमान्यिएट कैश नीति, और Responseकैश नीति.

इस सेक्शन में, रिस्पॉन्स कैश से जुड़ी नीति के बारे में जानें. Apigee Edge में रिस्पॉन्स कैश से जुड़ी नीति इस प्लैटफ़ॉर्म पर, बैकएंड सर्वर से रिस्पॉन्स को कैश मेमोरी में सेव किया जा सकता है. अगर क्लाइंट ऐप्लिकेशन एक ही बैकएंड संसाधन के लिए बार-बार अनुरोध करना चाहिए और संसाधन अपडेट हो जाता है समय-समय पर, इस नीति का इस्तेमाल करके हम इन जवाबों को कैश मेमोरी में सेव कर सकते हैं. रिस्पॉन्स कैश से जुड़ी नीति कैश मेमोरी में सेव किए गए जवाबों को लौटाने में मदद करता है और इसलिए, अनुरोधों को फ़ॉरवर्ड करने से बचाता है में बिना किसी वजह के जोड़ा जा सकता है.

रिस्पॉन्स कैश से जुड़ी नीति:

  • बैकएंड से कनेक्ट होने वाले अनुरोधों की संख्या कम होती है
  • नेटवर्क बैंडविथ कम करता है
  • यह एपीआई की परफ़ॉर्मेंस और जवाब देने में लगने वाले समय में सुधार करता है

एंटीपैटर्न

Responsecache नीति की मदद से आपको किसी भी संभावित स्टेटस कोड के साथ एचटीटीपी रिस्पॉन्स को कैश करने में मदद मिलती है, डिफ़ॉल्ट रूप से. इसका मतलब है कि सफलता और गड़बड़ी, दोनों रिस्पॉन्स को कैश मेमोरी में सेव किया जा सकता है.

यहां डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ रिस्पॉन्स कैश की नीति का उदाहरण दिया गया है:

<!-- /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>

रिस्पॉन्स कैश की नीति, गड़बड़ी के रिस्पॉन्स को डिफ़ॉल्ट रूप से कैश मेमोरी में सेव करती है कॉन्फ़िगरेशन. हालांकि, गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव करने की सलाह नहीं दी जाती है पर विचार किया जा सके, क्योंकि:

  • पहली स्थिति: गड़बड़ी कुछ समय के लिए होती है और इसकी जानकारी नहीं होती है और हम गड़बड़ी के जवाब भेजना जारी रख सकता है समस्या के ठीक होने के बाद भी कैश मेमोरी में सेव होने की वजह से

    या

  • दूसरी स्थिति: गड़बड़ी के मैसेज एक तय समय तक देखे जा सकेंगे, तो हमें समस्या के ठीक होने के बाद कैश मेमोरी में सेव होने वाले जवाबों से बचने के लिए कोड में बदलाव करना होगा

चलिए, इन दो स्थितियों के बारे में ज़्यादा अच्छे से जानते हैं.

पहली स्थिति: बैकएंड/संसाधन में कुछ समय के लिए गड़बड़ी हुई

ध्यान दें कि बैकएंड सर्वर के काम न करने की इनमें से कोई एक वजह हो सकती है:

  • कुछ समय के लिए नेटवर्क में गड़बड़ी हुई
  • बैकएंड सर्वर बहुत ज़्यादा व्यस्त है. इसलिए, कुछ समय के लिए होने वाले अनुरोधों का जवाब नहीं दिया जा सकता फ़ुलस्टॉप
  • हो सकता है कि अनुरोध किया गया बैकएंड संसाधन कुछ समय के लिए हटा दिया जाए/उपलब्ध न हो
  • बैकएंड सर्वर कुछ समय के लिए प्रोसेस होने में ज़्यादा समय लगा रहा है. इस वजह से, यह धीमी रफ़्तार से काम कर रहा है, वगैरह

इन सभी मामलों में, गड़बड़ियां किसी अनजान समयावधि के दौरान हो सकती हैं. इसके बाद, हम Google की मदद से मदद मिल सकती है. अगर हम गड़बड़ी के जवाबों को कैश मेमोरी में सेव करते हैं, तो हम उन्हें भेजना जारी रख सकते हैं बैकएंड सर्वर की समस्या ठीक हो जाने पर भी, उपयोगकर्ताओं को गड़बड़ी के तौर पर दिए गए रिस्पॉन्स मिलते हैं.

दूसरी स्थिति: बैकएंड/रिसॉर्स के काम न करने की समस्या को ठीक किया गया या रोका गया है

कृपया ध्यान दें कि हमें पता है कि बैकएंड में गड़बड़ी का एक तय समय के लिए गड़बड़ी हो जाती है. उदाहरण के लिए, आपको पता है कि:

  • एक खास बैकएंड संसाधन एक घंटे तक उपलब्ध नहीं रहेगा

    या

  • साइट में अचानक हुई किसी गड़बड़ी की वजह से, बैकएंड सर्वर को हटा दिया गया है या 24 घंटे के लिए इस्तेमाल नहीं किया जा सकता. स्केलिंग समस्याएँ, रखरखाव, अपग्रेड, आदि.

इस जानकारी का इस्तेमाल करके, हम रिस्पॉन्स कैश में कैश मेमोरी की समयसीमा खत्म होने का समय सही तरीके से सेट कर सकते हैं ताकि हम गड़बड़ी के जवाबों को लंबे समय तक कैश मेमोरी में सेव न करें. हालांकि, एक बार बैकएंड सर्वर/संसाधन फिर से उपलब्ध है. कैश मेमोरी से बचने के लिए, हमें नीति में बदलाव करना होगा गड़बड़ी के जवाब. ऐसा इसलिए होता है, क्योंकि बैकएंड से कोई अस्थायी या एक बार की जाने वाली गड़बड़ी होती है सर्वर, हम रिस्पॉन्स को कैश मेमोरी में सेव करेंगे और ऊपर दिए गए उदाहरण 1 में बताई गई समस्या पर काम करेंगे.

असर

  • कैश मेमोरी में सेव की गई गड़बड़ी के जवाबों की वजह से, समस्या होने के बाद भी गड़बड़ी के रिस्पॉन्स भेजे जा सकते हैं बैकएंड सर्वर में हल किया गया
  • उपयोगकर्ताओं को यह जाने बिना ही, किसी समस्या की वजह को हल करने में बहुत ज़्यादा समय खर्च करना पड़ सकता है ऐसा बैकएंड सर्वर से गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव करने की वजह से होता है

सबसे सही तरीका

  • गड़बड़ी के जवाबों को रिस्पॉन्स कैश मेमोरी में सेव न करें. पक्का करें कि इसमें <ExcludeErrorResponse> एलिमेंट को true पर सेट किया गया है गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव होने से रोकने के लिए, Responseकैश नीति देखें. इसके बारे में नीचे दिए गए कोड में बताया गया है स्निपेट. के साथ यह कॉन्फ़िगरेशन सिर्फ़ डिफ़ॉल्ट सक्सेस कोड 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>
  • अगर आपको किसी खास वजह से गड़बड़ी के जवाबों को कैश मेमोरी में सेव करना ज़रूरी है, तो उस ज़्यादा से ज़्यादा/सटीक समयावधि का पता लगा सकता है जिसमें गड़बड़ी का पता चलेगा (अगर संभव है):
    • समयसीमा खत्म होने का समय सही तरीके से सेट करें, ताकि गड़बड़ी के जवाबों को कैश मेमोरी में सेव न किया जा सके गड़बड़ी का मैसेज दिखने में लगने वाले समय से ज़्यादा होता है.
    • रिस्पॉन्स कैश की नीति का इस्तेमाल करके, गड़बड़ी के रिस्पॉन्स को कैश मेमोरी में सेव करें. इसके लिए, <ExcludeErrorResponse> एलिमेंट.

    यह केवल तभी करें, जब आप पक्का हों कि बैकएंड सर्वर विफलता कुछ समय के लिए या कुछ समय के लिए उपलब्ध नहीं है.

  • Apigee, बैकएंड सर्वर से 5xx जवाबों को कैश मेमोरी में सेव करने का सुझाव नहीं देता.