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

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

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

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

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

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 और सभी एपीआई प्रॉक्सी में मौजूद सभी बैकएंड सेवाओं के बीच, कनेक्शन को सेव रखने के तरीके पर असर पड़ता है.

एंटीपैटर्न

किसी खास एपीआई प्रॉक्सी के TargetEndpoint कॉन्फ़िगरेशन में, keepalive.timeout.millis प्रॉपर्टी को 0 पर सेट करके या मैसेज प्रोसेसर पर 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 को एक नया कनेक्शन खोलना होगा. अगर बैकएंड, एचटीटीपी है, तो हर नए अनुरोध के लिए एसएसएल हैंडशेक भी करेगा. इससे एपीआई अनुरोधों के इंतज़ार का कुल समय बढ़ जाएगा.

असर

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

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

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

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

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