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

यहां Apigee Edge के दस्तावेज़ देखे जा रहे हैं.
पर जाएं Apigee X दस्तावेज़.
info

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

परसिस्टेंट कनेक्शन

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

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

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

यहां दिए गए उदाहरण में, keepalive.timeout.millis को TargetEndpoint कॉन्फ़िगरेशन में 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 किसी एपीआई प्रॉक्सी में, किसी खास बैकएंड सेवा के लिए कीप अलाइव के व्यवहार को कंट्रोल करता है. एक ऐसी प्रॉपर्टी भी है जो सभी प्रॉक्सी में, सभी बैकएंड सेवाओं के लिए कीप अलाइव के व्यवहार को कंट्रोल करती है. Message Processor कॉम्पोनेंट में, HTTPTransport.keepalive.timeout.millis को कॉन्फ़िगर किया जा सकता है. इस प्रॉपर्टी की डिफ़ॉल्ट वैल्यू भी 60 सेकंड होती है. इस प्रॉपर्टी में कोई भी बदलाव करने से, Apigee Edge और सभी एपीआई प्रॉक्सी में मौजूद सभी बैकएंड सेवाओं के बीच, कीप अलाइव कनेक्शन के व्यवहार पर असर पड़ता है.

ऐंटीपैटर्न

किसी खास एपीआई प्रॉक्सी के TargetEndpoint कॉन्फ़िगरेशन में, keepalive.timeout.millis प्रॉपर्टी को 0 पर सेट करके या Message Processors पर 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, एपीआई प्रॉक्सी में बदलाव किए बिना, बैकएंड सेवाओं के साथ परसिस्टेंट या नॉन-परसिस्टेंट कनेक्शन को अपने-आप हैंडल कर पाएगा.

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