एंटीपैटर्न: एक टारगेट सर्वर के साथ लोड बैलेंस को ज़ीरो वैल्यू पर सेट करने के लिए, MaxFailures को सेट करें

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

TargetEndpoint कॉन्फ़िगरेशन, Apigee Edge बैकएंड सेवा या एपीआई. यह अनुरोधों को भेजता है और को/से जवाब प्राप्त करता है बैकएंड सेवा भी उपलब्ध है. बैकएंड सेवा कोई एचटीटीपी/एचटीटीपीएस सर्वर, NodeJS या होस्ट किया गया टारगेट हो सकता है.

TargetEndpoint में बैकएंड सेवा को इनमें से किसी एक तरीके से शुरू किया जा सकता है:

  • किसी एचटीटीपी या एचटीटीपीएस सर्वर पर ले जाने वाला यूआरएल
  • ScriptTarget को एज से होस्ट की गई Node.js स्क्रिप्ट के लिए
  • होस्ट किए गए टारगेट एनवायरमेंट पर डिप्लॉय किए गए NodeJS के लिए HostedTarget
  • TargetServer का कॉन्फ़िगरेशन

इसी तरह, सेवा कॉलआउट नीति का इस्तेमाल किसी भी बाहरी सेवा को कॉल करने के लिए किया जा सकता है को एपीआई प्रॉक्सी फ़्लो से लिया जाता है. इस नीति से, एचटीटीपी/एचटीटीपीएस टारगेट यूआरएल में से किसी एक को तय किया जा सकता है या टारगेट सर्वर कॉन्फ़िगरेशन का इस्तेमाल करके, नीति में सीधे तौर पर शामिल किया जा सकता है.

TargetServer का कॉन्फ़िगरेशन

TargetServer कॉन्फ़िगरेशन, एंडपॉइंट के कंक्रीट के यूआरएल को डीकोड करता है TargetEndpoint कॉन्फ़िगरेशन या सेवा कॉलआउट की नीतियों में. TargetServer है TargetEndpoint में यूआरएल के बजाय किसी नाम से रेफ़र किया गया हो. TargetServer का कॉन्फ़िगरेशन के पास बैकएंड सेवा का होस्टनेम, पोर्ट नंबर, और अन्य जानकारी होगी.

यहां TargetServer कॉन्फ़िगरेशन का एक सैंपल दिया गया है:

<TargetServer name="target1">
  <Host>www.mybackendservice.com</Host>
  <Port>80</Port>
  <IsEnabled>true</IsEnabled>
</TargetServer>

TargetServer की मदद से, हर एनवायरमेंट के लिए अलग-अलग कॉन्फ़िगरेशन बनाए जा सकते हैं. TargetEndpoint/सेवा कॉलआउट की नीति को TargetServers नाम के एक या उससे ज़्यादा के साथ कॉन्फ़िगर किया जा सकता है लोड बैलेंसर का इस्तेमाल करके. लोड बैलेंस करने के लिए पहले से मौजूद सुविधा, उपलब्धता को बेहतर बनाती है के एपीआई और कॉन्फ़िगर किए गए बैकएंड सर्वर इंस्टेंस के बीच फ़ेलओवर होते हैं.

यहां TargetServers का इस्तेमाल करने वाले TargetEndpoint कॉन्फ़िगरेशन का सैंपल दिया गया है:

<TargetEndpoint name="default">
    <HTTPTargetConnection>>
      <LoadBalancer>
        <Server name="target1"/>
      <Server name="target2"/>
      </LoadBalancer>
    </HTTPTargetConnection>
</TargetEndpoint>

MaxFailures

MaxFailures कॉन्फ़िगरेशन में यह बताया गया है कि ज़्यादा से ज़्यादा कितने अनुरोध पूरे नहीं किए जा सकते को टारगेट सर्वर में जोड़ा जाता है. इसके बाद टारगेट सर्वर को 'बंद है' के तौर पर मार्क करके हटा दिया जाएगा को बदल दिया जाता है.

MaxFailures के साथ एक उदाहरण कॉन्फ़िगरेशन में बताया गया है:

<TargetEndpoint name="default">
    <HTTPTargetConnection>
      <LoadBalancer>
        <Server name="target1"/>
       <Server name="target2"/>
       <MaxFailures>5</MaxFailures>
      </LoadBalancer>
    </HTTPTargetConnection>
</TargetEndpoint>

ऊपर दिए गए उदाहरण में, अगर "target1" के लिए लगातार पांच अनुरोध फ़ेल हो रहे हैं इसके बाद "target1" को रोटेशन से हटा दिया जाएगा और बाद के सभी अनुरोध सिर्फ़ टारगेट 2 को भेजे जाएंगे.

एंटीपैटर्न

इसके LoadBalancer कॉन्फ़िगरेशन में एक ही TargetServer है MaxFailures के साथ TargetEndpoint या सेवा कॉलआउट की नीति नॉन-ज़ीरो वैल्यू का सुझाव नहीं दिया जाता, क्योंकि इसके नतीजे बुरे हो सकते हैं.

यहां दिए गए सैंपल कॉन्फ़िगरेशन का इस्तेमाल करें, जिसमें एक TargetServer है "target1" नाम दिया गया है MaxFailures को 5 पर सेट किया गया है (शून्य वैल्यू नहीं है):

<TargetEndpoint name="default">
  <HTTPTargetConnection>
      <LoadBalancer>
        <Algorithm>RoundRobin</Algorithm>
        <Server name="target1" />
        <MaxFailures>5</MaxFailures>
      </LoadBalancer>
  </HTTPTargetConnection>

अगर TargetServer "target1" को अनुरोध भेजा जाता है पांच बार फ़ेल होता है (संख्या MaxFailures में बताई गई है), TargetServer को रोटेशन से हटा दिया गया है. इसके लिए, कोई और TargetServer नहीं है, इस कॉन्फ़िगरेशन वाले API प्रॉक्सी को किए जाने वाले सभी अनुरोध फ़ेल हो जाएंगे 503 Service Unavailable गड़बड़ी.

भले ही, TargetServer "target1" अपनी सामान्य स्थिति में वापस आ जाता है और सही जवाब भेजने के बाद भी, एपीआई प्रॉक्सी को अनुरोध भेजे जाते रहेंगे 503 गड़बड़ियां दिखाता है. ऐसा इसलिए होता है, क्योंकि Edge अपने-आप TargetServer नहीं सेट करता लक्ष्य पूरा होने और फिर से चालू होने के बाद भी, रोटेशन में वापस आते हैं. इस समस्या को हल करने के लिए, एपीआई प्रॉक्सी को फिर से डिप्लॉय किया जाना चाहिए, ताकि Edge TargetServer को फिर से घुमाना.

अगर सेवा कॉलआउट की नीति में एक ही कॉन्फ़िगरेशन का इस्तेमाल किया गया है, तो एपीआई TargetServer "target1" से किए गए अनुरोध के बाद, अनुरोधों में 500 गड़बड़ी दिखेगी 5 बार फ़ेल हो जाता है.

असर

इसके LoadBalancer कॉन्फ़िगरेशन में एक ही TargetServer का इस्तेमाल किया जा रहा है TargetEndpoint या सेवा कॉलआउट की नीति में MaxFailures को शून्य के अलावा किसी और वैल्यू पर सेट किया जाना चाहिए:

  • 503/500 गड़बड़ियों के साथ एपीआई अनुरोध लगातार फ़ेल हो जाते हैं (MaxFailooes के लिए कई बार अनुरोध फ़ेल होने के बाद) जब तक कि एपीआई प्रॉक्सी को फिर से डिप्लॉय नहीं किया जाता.
  • इस समस्या को हल करने में ज़्यादा समय लगता है, क्योंकि यह मुश्किल होती है. साथ ही, इस समस्या की वजह का पता लगाने में भी ज़्यादा समय लग सकता है. इसके लिए, इस एंटीपैटर्न के बारे में पहले से जानकारी नहीं होनी चाहिए.

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

  1. ज़्यादा उपलब्धता के लिए, LoadBalancer कॉन्फ़िगरेशन में एक से ज़्यादा TargetServer हैं.
  2. MaxFailures होने पर हमेशा हेल्थ मॉनिटर तय करें गैर-शून्य मान पर सेट हो. जब किसी टारगेट सर्वर को रोटेशन से हटा दिया जाएगा, तब उसे गड़बड़ियों की संख्या, MaxFailures में बताई गई संख्या तक पहुंच जाती है. HealthMonitor का इस्तेमाल करने से यह पक्का होता है कि TargetServer को फिर से रोटेशन में बदला गया है जैसे ही टारगेट सर्वर फिर से उपलब्ध होता है, इसका मतलब है कि प्रॉक्सी को फिर से डिप्लॉय करने की ज़रूरत नहीं है.

    यह पक्का करने के लिए कि परफ़ॉर्मेंस की जांच उसी पोर्ट नंबर पर की जा रही है Edge का इस्तेमाल टारगेट सर्वर से कनेक्ट करने के लिए किया जाता है. Apigee का सुझाव है कि आप वर्शन को छोड़ दें <TCPMonitor> में <Port> चाइल्ड एलिमेंट शामिल है, बशर्ते यह यह TargetServer पोर्ट से अलग है. डिफ़ॉल्ट रूप से <Port>, TargetServer पोर्ट की तरह ही होता है.

    HealthMonitor के साथ कॉन्फ़िगरेशन का सैंपल:

    <TargetEndpoint name="default">
      <HTTPTargetConnection>
        <LoadBalancer>
          <Algorithm>RoundRobin</Algorithm>
          <Server name="target1" />
          <Server name="target2" />
          <MaxFailures>5</MaxFailures>
        </LoadBalancer>
        <Path>/test</Path>
        <HealthMonitor>
          <IsEnabled>true</IsEnabled>
          <IntervalInSec>5</IntervalInSec>
          <TCPMonitor>
            <ConnectTimeoutInSec>10</ConnectTimeoutInSec>
          </TCPMonitor>
        </HealthMonitor>
      </HTTPTargetConnection>
    </TargetEndpoint>
    
  3. अगर कोई ऐसी समस्या है जो सिर्फ़ एक TargetServer है और HealthMonitor का इस्तेमाल नहीं किया जाता, तो LoadBalancer कॉन्फ़िगरेशन में MaxFailures को शामिल न करें.

    MaxFailumes की डिफ़ॉल्ट वैल्यू 0 है. इसका मतलब है कि Edge हमेशा हर अनुरोध के लिए टारगेट से कनेक्ट करने की कोशिश करता है और टारगेट सर्वर को रोटेशन से कभी नहीं हटाता है.

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