Sam Newman ने वितरित सिस्टम में ज़रूर समझे जाने वाले 3 मुख्य कॉन्सेप्ट्स पर ज़ोर दिया: Timeouts(टाइमआउट), Retries(रीट्राई), और Idempotency(इडेम्पोटेंसी)।
उन्होंने कहा कि Paxos, Raft जैसे जटिल वितरित एल्गोरिदम से पहले इन बुनियादी कॉन्सेप्ट्स को सही ढंग से संभालना ज़्यादा महत्वपूर्ण है।
वितरित सिस्टम की तीन बुनियादी पूर्वधारणाएँ
- जानकारी तुरंत नहीं पहुँचती।
- सामने वाला सिस्टम जवाब न दे सकता है।
- संसाधन सीमित होते हैं।
यही तीन बातें वितरित सिस्टम की सारी जटिलता पैदा करने वाले मूल कारण हैं।
Timeouts (टाइमआउट)
अगर कोई अनुरोध तय समय के भीतर पूरा न हो, तो उसे रोक देना चाहिए।
लंबे समय तक संसाधन रोके रखने से सिस्टम पर ओवरलोड और यूज़र असुविधा हो सकती है।
Newman ने समझाया, “टाइमआउट का मतलब एकल अनुरोध की सफलता से ज़्यादा पूरे सिस्टम की सेहत को प्राथमिकता देना है।”
महत्वपूर्ण बिंदु
- औसत execution time और यूज़र अपेक्षाओं को समझना
- सेटिंग वैल्यूज़ को बिना कोड बदले लचीले ढंग से बदला जा सकना चाहिए
Retries (रीट्राई)
बहुत ज़्यादा रीट्राई सिस्टम पर स्व-प्रेरित DoS attack बन सकती है।
रीट्राई ज़रूरी है, लेकिन इसके साथ क्लाइंट और सर्वर पक्ष की सीमाएँ तथा नेटवर्क jitter को भी ध्यान में रखना चाहिए।
Newman ने चेतावनी दी कि jitter जोड़ना अच्छा है, लेकिन exponential backoff उल्टा सिस्टम पर बोझ बन सकता है।
Idempotency (इडेम्पोटेंसी)
अनुरोध कई बार भेजा जाए तब भी परिणाम एक जैसा होना चाहिए।
यह मुख्य रूप से सर्वर की ज़िम्मेदारी है, और रीट्राई को सुरक्षित बनाने की पूर्वशर्त भी है।
वास्तविक परिदृश्य
- अगर अनुरोध सर्वर तक पहुँचा ही नहीं: कुछ नहीं होता
- अगर सर्वर ने प्रोसेस कर लिया लेकिन response टूट गया: बदलाव हो चुका है, लेकिन क्लाइंट को पता नहीं → इडेम्पोटेंसी ज़रूरी
इम्प्लीमेंटेशन के तरीके
- Request ID का उपयोग: क्लाइंट दोहराए गए अनुरोध की पहचान कर सके, इसके लिए एक identifier देना
- Fingerprint तरीका: अनुरोध बॉडी के hash value आदि के आधार पर duplication की पहचान करना (समय संबंधी जानकारी से बचें)
निष्कर्ष
उन्होंने “एक ही काम बार-बार करके अलग नतीजे की उम्मीद करना पागलपन है” इस कथन से शुरुआत की,
लेकिन Newman ने कहा कि वितरित सिस्टम में रीट्राई उल्टा तर्कसंगत हो सकती है।
हालाँकि, उन्होंने ज़ोर दिया कि रीट्राई हमेशा सुरक्षित तरीके से होनी चाहिए, और इसके लिए टाइमआउट व इडेम्पोटेंसी को साथ में डिज़ाइन करना ज़रूरी है।
1 टिप्पणियां
सर्किट ब्रेकर~