एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न · पाठ

आइडेम्पोटेंसी और पुनःप्रयास तंत्र

क्षणिक विफलताओं को बिना दुष्प्रभाव के सहजता से संभालने के लिए आइडेम्पोटेंट API संचालन डिज़ाइन करें और बुद्धिमान पुनःप्रयास तंत्र लागू करें।

पाठ 2, कुल 4 में से12 चरण

आइडेम्पोटेंसी और पुनःप्रयास तंत्र, CoddyKit पर एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

आइडेम्पोटेंसी क्या है?

वितरित सिस्टम में संचालन कभी-कभी विफल या बाधित हो सकते हैं। आइडेम्पोटेंसी किसी संचालन का वह गुण है जिसमें उसे कई बार लागू करने पर वही परिणाम मिलता है जो उसे एक बार लागू करने पर मिलता है।

इसे बार-बार 'चालू/बंद' बटन दबाने जैसा समझिए। यदि वह वास्तव में आइडेम्पोटेंट है, तो पहली बार दबाने पर अवस्था बदलती है, लेकिन बीच में 'बंद' किए बिना बाद में दबाने पर उसमें कोई और बदलाव नहीं होता। अंतिम अवस्था वही रहती है।

आइडेम्पोटेंसी क्यों महत्वपूर्ण है

मजबूत और विश्वसनीय API बनाने के लिए आइडेम्पोटेंसी अत्यंत महत्वपूर्ण है, विशेष रूप से नेटवर्क समस्याओं या अस्थायी सर्वर त्रुटियों से निपटते समय।

  • दोहराई गई कार्रवाइयों को रोकती है: यदि कोई अनुरोध बीच में विफल हो जाए और क्लाइंट उसे फिर भेजे, तो आइडेम्पोटेंसी सुनिश्चित करती है कि संचालन दो बार न हो।
  • डेटा की संगति सुनिश्चित करती है: डुप्लिकेट रिकॉर्ड या गलत अवस्था परिवर्तन बनने से बचाती है।
  • पुनःप्रयासों का समर्थन करती है: यह ऐसी मूलभूत अवधारणा है, जो क्लाइंट को अनचाहे प्रभावों के बिना अनुरोधों का सुरक्षित रूप से पुनःप्रयास करने देती है।

आइडेम्पोटेंट बनाम गैर-आइडेम्पोटेंट

आइए सामान्य HTTP विधियों और उनकी आइडेम्पोटेंसी देखें:

  • GET: हमेशा आइडेम्पोटेंट। डेटा को कई बार प्राप्त करने से उसमें बदलाव नहीं होता।
  • PUT: आइडेम्पोटेंट। पूरे संसाधन को कई बार अपडेट करने पर अंतिम अवस्था समान रहती है।
  • DELETE: आइडेम्पोटेंट। किसी संसाधन को कई बार हटाने का प्रभाव उसे एक बार हटाने जैसा ही होता है (वह हटाया हुआ ही रहता है)।
  • POST: सामान्यतः आइडेम्पोटेंट नहीं। नया संसाधन कई बार बनाने पर आम तौर पर कई नए संसाधन बनते हैं।

मुख्य बात कार्रवाई स्वयं नहीं, बल्कि उसका परिणाम है।

आइडेम्पोटेंसी कुंजी लागू करना

POST जैसी गैर-आइडेम्पोटेंट कार्रवाइयों (जैसे ऑर्डर बनाना या भुगतान संसाधित करना) के लिए हम आइडेम्पोटेंसी कुंजी जोड़ सकते हैं।

यह एक विशिष्ट पहचानकर्ता (अक्सर UUID) होता है, जिसे क्लाइंट बनाकर अनुरोध के साथ भेजता है। इसके बाद सर्वर इस कुंजी का उपयोग एक निश्चित समयावधि में दोहराए गए अनुरोधों का पता लगाने और उन्हें अनदेखा करने के लिए करता है।

सर्वर-पक्ष आइडेम्पोटेंसी जाँच

यह एक वैचारिक उदाहरण है कि सर्वर आइडेम्पोटेंसी कुंजी को कैसे संभाल सकता है। सर्वर जाँचता है कि उस विशिष्ट संचालन के लिए कुंजी पहले संसाधित की जा चुकी है या नहीं।

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class PaymentProcessor {

    private Map<String, Boolean> processedKeys = new ConcurrentHashMap<>();

    public String processPayment(String idempotencyKey, double amount) {
        if (processedKeys.containsKey(idempotencyKey)) {
            System.out.println("Duplicate request for key: " + idempotencyKey + ". Returning previous result.");
            return "Payment already processed for key " + idempotencyKey;
        }

        // Simulate payment processing
        System.out.println("Processing payment of $" + amount + " with key: " + idempotencyKey);
        try {
            Thread.sleep(100); // Simulate work
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }

        processedKeys.put(idempotencyKey, true);
        return "Payment successful for key " + idempotencyKey;
    }

    public static void main(String[] args) {
        PaymentProcessor processor = new PaymentProcessor();

        // First attempt with a key
        System.out.println(processor.processPayment("uuid-123", 100.00));

        // Retry with the same key (should be ignored)
        System.out.println(processor.processPayment("uuid-123", 100.00));

        // New request with a different key
        System.out.println(processor.processPayment("uuid-456", 50.00));
    }
}

पुनःप्रयासों का परिचय

इडेम्पोटेंट संचालन के बावजूद, नेटवर्क टाइमआउट, सर्वर पर अत्यधिक भार या थोड़ी देर की सेवा-बाधा जैसी अस्थायी समस्याओं के कारण अनुरोध विफल हो सकते हैं। यहीं पुनः प्रयास तंत्र काम आते हैं।

पुनः प्रयास तंत्र थोड़ी देर रुकने के बाद विफल संचालन को अपने-आप फिर से करने का प्रयास करता है। इसका उद्देश्य अस्थायी विफलताओं से उबरना और एपीआई कॉल की विश्वसनीयता बढ़ाना है।

बुनियादी पुनः प्रयास तर्क

सबसे सरल पुनः प्रयास तंत्र में प्रयासों के बीच समान विलंब के साथ पुनः प्रयासों की एक निश्चित संख्या होती है। यह समझने और लागू करने में आसान है, लेकिन यदि कई क्लाइंट एक साथ पुनः प्रयास करें, तो इससे ठीक हो रही सेवा पर कभी-कभी अत्यधिक भार पड़ सकता है।

public class SimpleRetry {

    public static void makeApiCall() {
        int maxRetries = 3;
        int retryCount = 0;
        long delayMillis = 1000; // 1 second

        while (retryCount < maxRetries) {
            try {
                System.out.println("Attempt " + (retryCount + 1) + ": Making API call...");
                // Simulate an API call that might fail
                if (Math.random() > 0.6) { // 40% chance of success
                    System.out.println("API call successful!");
                    return; // Exit if successful
                } else {
                    throw new RuntimeException("Simulated API failure.");
                }
            } catch (RuntimeException e) {
                System.out.println("API call failed: " + e.getMessage());
                retryCount++;
                if (retryCount < maxRetries) {
                    try {
                        System.out.println("Retrying in " + delayMillis + "ms...");
                        Thread.sleep(delayMillis);
                    } catch (InterruptedException ie) {
                        Thread.currentThread().interrupt();
                        System.out.println("Retry interrupted.");
                        break;
                    }
                }
            }
        }
        System.out.println("All retry attempts failed.");
    }

    public static void main(String[] args) {
        makeApiCall();
    }
}

घातीय बैकऑफ़

सेवाओं पर अत्यधिक भार डालने से बचने और उन्हें ठीक होने के लिए अधिक समय देने के लिए घातीय बैकऑफ़ एक बेहतर रणनीति है। इसमें पुनः प्रयासों के बीच का विलंब क्रमशः बढ़ता जाता है।

उदाहरण के लिए, विलंब 1s, 2s, 4s, 8s आदि हो सकते हैं। इससे संघर्ष कर रही सेवा पर भार कम होता है और समय के साथ पुनः प्रयास अलग-अलग अंतरालों में फैल जाते हैं।

जिटर के साथ बैकऑफ़

घातीय बैकऑफ़ के बावजूद, यदि कई क्लाइंट विफल होकर ठीक समान घातीय अंतरालों पर पुनः प्रयास करें, तो वे एक ही समय पर सेवा को अनुरोध भेजकर फिर भी 'भगदड़' जैसी समस्या पैदा कर सकते हैं।

जिटर बैकऑफ़ विलंब में एक यादृच्छिक घटक जोड़ता है। इससे पुनः प्रयास अधिक समान रूप से वितरित होते हैं, उनका दबाव कम होता है और ट्रैफ़िक के समकालिक उछाल से बचाव होता है।

import java.util.Random;

public class ExponentialBackoffRetry {

    private static final Random random = new Random();

    public static void makeApiCallWithBackoff() {
        int maxRetries = 5;
        long baseDelay = 500; // milliseconds
        long maxDelay = 16000; // cap the delay at 16 seconds

        for (int retryCount = 0; retryCount < maxRetries; retryCount++) {
            try {
                System.out.println("Attempt " + (retryCount + 1) + ": Making API call...");
                // Simulate an API call that might fail
                if (Math.random() > 0.7) { // 30% chance of success
                    System.out.println("API call successful!");
                    return; // Exit if successful
                } else {
                    throw new RuntimeException("Simulated API failure.");
                }
            } catch (RuntimeException e) {
                System.out.println("API call failed: " + e.getMessage());
                if (retryCount < maxRetries - 1) {
                    long delay = baseDelay * (long) Math.pow(2, retryCount);
                    delay = Math.min(delay, maxDelay);
                    // Add jitter: random value between 0 and delay
                    long jitteredDelay = random.nextInt((int) delay);

                    try {
                        System.out.println("Retrying in " + jitteredDelay + "ms (base: " + delay + ")...");
                        Thread.sleep(jitteredDelay);
                    } catch (InterruptedException ie) {
                        Thread.currentThread().interrupt();
                        System.out.println("Retry interrupted.");
                        break;
                    }
                }
            }
        }
        System.out.println("All retry attempts failed after " + maxRetries + " retries.");
    }

    public static void main(String[] args) {
        makeApiCallWithBackoff();
    }
}

इडेम्पोटेंसी और पुनः प्रयास साथ-साथ

लचीली वितरित प्रणालियाँ बनाने के लिए इडेम्पोटेंसी और पुनः प्रयास तंत्र का संयोजन बहुत प्रभावी है।

  • पुनः प्रयास अस्थायी नेटवर्क या सेवा-विफलताओं को संभालते हैं और संचालन के सफल होने की संभावना बढ़ाते हैं।
  • इडेम्पोटेंसी यह सुनिश्चित करती है कि वास्तव में सफल हुए संचालन के लिए पुनः प्रयास होने पर भी, यदि क्लाइंट को इसकी पुष्टि नहीं मिली हो, तो हानिकारक दोहरे प्रभाव उत्पन्न न हों।

इन दोनों के कारण क्लाइंट विश्वास के साथ एपीआई कॉल कर सकते हैं और जान सकते हैं कि अस्थायी समस्याएँ डेटा में खराबी या गलत स्थिति उत्पन्न नहीं करेंगी।

अपनी समझ जाँचें

इडेम्पोटेंसी और पुनः प्रयास तंत्रों के बारे में निम्नलिखित में से कौन-से कथन TRUE हैं?

पुनरावलोकन: सुदृढ़ एपीआई

इस पाठ में हमने अत्यधिक स्केलेबल और लचीली एपीआई बनाने के लिए दो महत्वपूर्ण अवधारणाओं का अध्ययन किया:

  • इडेम्पोटेंसी: ऐसे संचालन जो एक बार या कई बार लागू किए जाने पर समान परिणाम देते हैं और दोहरे प्रभावों को रोकने के लिए अत्यंत महत्वपूर्ण हैं।
  • पुनः प्रयास तंत्र: जिटर सहित घातीय बैकऑफ़ जैसी रणनीतियाँ, जो क्लाइंट को बढ़ते हुए यादृच्छिक विलंब के साथ अनुरोध दोबारा भेजकर अस्थायी विफलताओं को सहजता से संभालने देती हैं।

इडेम्पोटेंसी को बुद्धिमत्तापूर्ण पुनः प्रयास तर्क के साथ मिलाकर आप ऐसी एपीआई अंतःक्रियाएँ डिज़ाइन कर सकते हैं जो सुदृढ़, विश्वसनीय और वितरित प्रणालियों की अप्रत्याशित प्रकृति को सहने वाली हों।

शुरुआत निःशुल्क

एआई शिक्षक के साथ एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “आइडेम्पोटेंसी और पुनःप्रयास तंत्र” पाठ निःशुल्क है?

हाँ—“आइडेम्पोटेंसी और पुनःप्रयास तंत्र” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“आइडेम्पोटेंसी और पुनःप्रयास तंत्र” में मैं क्या सीखूँगा?

क्षणिक विफलताओं को बिना दुष्प्रभाव के सहजता से संभालने के लिए आइडेम्पोटेंट API संचालन डिज़ाइन करें और बुद्धिमान पुनःप्रयास तंत्र लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“आइडेम्पोटेंसी और पुनःप्रयास तंत्र” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. सर्किट ब्रेकर और बल्कहेड
  2. आइडेम्पोटेंसी और पुनःप्रयास तंत्र
  3. भौगोलिक रूप से वितरित API और आपदा पुनर्प्राप्ति
  4. दर-आधारित लोड शेडिंग और बैकप्रेशर
← एपीआई दर-सीमा निर्धारण और स्केलेबिलिटी पैटर्न पर वापस जाएँ