एंटीपैटर्न: एचटीटीपी परसिस्टेंट (फिर से इस्तेमाल किए जा सकने वाले कीप-अलाइव) कनेक्शन को बंद करें

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

एपीआई प्रॉक्सी, क्लाइंट ऐप्लिकेशन के लिए एक इंटरफ़ेस है. इसका इस्तेमाल बैकएंड सेवाओं के साथ कनेक्ट करने के लिए किया जाता है. Apigee Edge में, एपीआई प्रॉक्सी के ज़रिए बैकएंड सेवाओं से कनेक्ट करने के कई तरीके मिलते हैं:

  • TargetEndpoint का इस्तेमाल किसी भी एचटीटीपी/एचटीटीपी, NodeJS या होस्ट की गई टारगेट सेवाओं से कनेक्ट करने के लिए करें.
  • टारगेट सर्वर को शुरू करने से पहले या बाद में, किसी बाहरी सेवा को शुरू करने के लिए सर्विसकॉलआउट नीति TargetEndpoint में मौजूद हो.
  • बैकएंड सेवाओं से कनेक्ट करने के लिए, JavaScript की नीति या Javaकॉलआउट नीति में कस्टम कोड जोड़ा गया.

स्थायी कनेक्शन

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

Apigee Edge, बैकएंड सेवाओं के साथ बातचीत करने के लिए स्थायी कनेक्शन का इस्तेमाल करता है. कनेक्शन बना रहता है डिफ़ॉल्ट रूप से 60 सेकंड के लिए लाइव होता है. इसका मतलब है कि अगर कनेक्शन पूल में कोई कनेक्शन 60 सेकंड से ज़्यादा होने के बाद कनेक्शन बंद हो जाता है.

बनाए रखने की टाइम आउट अवधि को keepalive.timeout.millis नाम की प्रॉपर्टी से कॉन्फ़िगर किया जा सकता है, जिसे किसी एपीआई प्रॉक्सी के TargetEndpoint कॉन्फ़िगरेशन में तय किया गया है. उदाहरण के लिए, ' अलाइव' को बनाए रखें TargetEndpoint में किसी खास बैकएंड सेवा के लिए, समयावधि को 30 सेकंड पर सेट किया जा सकता है.

यहां दिए गए उदाहरण में, TargetEndpoint में keepalive.timeout.millis को 30 सेकंड पर सेट किया गया है कॉन्फ़िगरेशन:

<!-- /antipatterns/examples/disable-persistent-connections-1.xml -->
<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="keepalive.timeout.millis">30000</Property>
    </Properties>
  </HTTPTargetConnection>Disable HTTP persistent (Reusable keep-alive) connections
</TargetEndpoint>

ऊपर दिए गए उदाहरण में, keepalive.timeout.millis किसी एपीआई प्रॉक्सी में खास बैकएंड सेवा के लिए उपलब्ध है. ऐसी प्रॉपर्टी भी है जो ऐक्टिव व्यवहार को कंट्रोल करती है सभी प्रॉक्सी में सभी बैकएंड सेवाओं के लिए उपलब्ध है. HTTPTransport.keepalive.timeout.millis को मैसेज प्रोसेसर कॉम्पोनेंट में कॉन्फ़िगर किया जा सकता है. इस प्रॉपर्टी की डिफ़ॉल्ट वैल्यू भी 60 है सेकंड. इस प्रॉपर्टी में कोई भी बदलाव करने से, इन दोनों के बीच कनेक्शन को बनाए रखने के तरीके पर असर पड़ता है Apigee Edge और सभी एपीआई प्रॉक्सी में सभी बैकएंड सेवाएं.

एंटीपैटर्न

keepalive.timeout.millis प्रॉपर्टी को सेट करके, स्थायी (चालू रखें) कनेक्शन को बंद करना 0 पर सेट करें या किसी खास एपीआई प्रॉक्सी के TargetEndpoint कॉन्फ़िगरेशन में मैसेज प्रोसेसर पर, HTTPTransport.keepalive.timeout.millis से 0 का इस्तेमाल करने का सुझाव नहीं दिया जाता है. तो परफ़ॉर्मेंस पर असर पड़ेगा.

नीचे दिए गए उदाहरण में, TargetEndpoint कॉन्फ़िगरेशन परसिस्टेंट (अलाइव रखें) कनेक्शन को बंद कर देता है किसी खास बैकएंड सेवा के लिए, keepalive.timeout.millis को 0 पर सेट करने का तरीका:

<!-- /antipatterns/examples/disable-persistent-connections-2.xml -->
<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="keepalive.timeout.millis">0</Property>
     </Properties>
  </HTTPTargetConnection>
</TargetEndpoint>

अगर एक या ज़्यादा बैकएंड सेवाओं के लिए कनेक्शन को चालू रखने की सुविधा बंद हो, तो Edge को टारगेट बैकएंड सेवा(सेवाओं) के हर नए अनुरोध के लिए नया कनेक्शन. अगर बैकएंड एचटीटीपी है, तो Edge हर नए अनुरोध के लिए एसएसएल हैंडशेक भी करेगा. ऐसा करते हुए, एपीआई अनुरोधों के लिए इंतज़ार का समय.

असर

  • यह एपीआई अनुरोधों के जवाब देने में लगने वाला कुल समय बढ़ाता है, क्योंकि Apigee Edge को नया कनेक्शन खोलना होगा और हर नए अनुरोध के लिए एसएसएल हैंडशेक करें.
  • ज़्यादा ट्रैफ़िक होने पर कनेक्शन खत्म हो सकते हैं, क्योंकि कनेक्शन रिलीज़ होने में कुछ समय लगता है सिस्टम पर वापस जाएँ.

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

  • बैकएंड सेवाओं को एचटीटीपी 1.1 के मुताबिक, एचटीटीपी के स्थायी कनेक्शन का पालन करना चाहिए और उसे हैंडल करना चाहिए मानकों के बारे में बताया गया है.
  • अगर बैकएंड सेवाएं उपलब्ध हों, तो उन्हें Connection:keep-alive हेडर के साथ जवाब देना चाहिए का इस्तेमाल किया जा सकता है.
  • अगर बैकएंड सेवाएं ऐसा नहीं कर पा रही हैं, तो उन्हें Connection:close हेडर के साथ जवाब देना चाहिए स्थायी कनेक्शन को हैंडल करता है.

इस पैटर्न को लागू करने से, यह पक्का होगा कि Apigee Edge एपीआई प्रॉक्सी में बदलाव किए बिना, बैकएंड सेवाओं के साथ कनेक्ट करना.

इसके बारे में और पढ़ें