वितरित प्रणाली क्या है?
वितरित प्रणाली (distributed system) नेटवर्क से जुड़े कंप्यूटरों का समूह है जो मिलकर काम करते हैं, ताकि उपयोगकर्ता को एक ही सेवा दिखे। कंप्यूटर आपस में संदेश भेजते हैं। काम (फ़ंक्शन) और जानकारी (डेटा) एक मशीन पर रखने की बजाय कई मशीनों में बँटे होते हैं।
क्लाइंट-सर्वर का विचार
सबसे सरल बँटा हुआ ढाँचा क्लाइंट-सर्वर है। क्लाइंट (आपका फ़ोन या लैपटॉप) कुछ माँगता है। सर्वर वह कंप्यूटर है जो माँगों का इंतज़ार करता है और जवाब देता है: वेब पेज, ईमेल या फ़ाइल भेजता है। पेज परोसने का काम सर्वर करता है, उसे दिखाने का काम क्लाइंट। वेब ब्राउज़िंग, ईमेल और ऑनलाइन ख़रीदारी ऐसे ही चलते हैं।
एक सर्वर की दिक़्क़त
सर्वर एक सेकंड में सीमित माँगों का ही जवाब दे सकता है। ज़्यादा आएँ तो वे कतार (queue) में रुकती हैं और सबको देर लगती है। अकेला सर्वर ख़राब हो जाए तो पूरी सेवा रुक जाती है। इसे विफलता का एकल बिंदु (single point of failure) कहते हैं।
काम बाँटना: कई सर्वर और लोड बैलेंसर
ज़्यादा उपयोगकर्ताओं के लिए सर्वर बढ़ाते हैं। अब तय करना है कि हर माँग किस सर्वर को जाए। लोड बैलेंसर एक ट्रैफ़िक मैनेजर है: वह हर माँग लेकर उसे ऐसे सर्वर को भेजता है जो बहुत व्यस्त न हो। आम तरीक़े: बारी-बारी से (round robin) या सबसे छोटी कतार वाला सर्वर।
इससे मिलता है:
- गति: छोटी कतार, तेज़ जवाब।
- बढ़ने की क्षमता (scalability): उपयोगकर्ता बढ़ें तो सर्वर जोड़ दो।
- अलग काम अलग मशीन पर: जैसे कुछ सर्वर पेज दिखाएँ, कुछ डेटा रखें, कुछ ईमेल भेजें।
लोड बैलेंसर देखता रहता है कि कौन-से सर्वर चालू हैं। ख़राब सर्वर छोड़ दिया जाता है, इसलिए उपयोगकर्ता वहाँ नहीं भेजे जाते।
डेटा बाँटना: प्रतियाँ और टुकड़े
प्रतिकृति (replication): नकल रखना
प्रतिकृति यानी एक ही डेटा की प्रतियाँ कई मशीनों पर रखना, शायद अलग शहरों में। फ़ायदे: एक मशीन ख़राब हो तो भी सेवा चलती है (दोष-सहिष्णुता, fault tolerance), और उपयोगकर्ता पास की प्रति से पढ़ सकता है, जो तेज़ है (कम विलंबता, latency)।
विभाजन (partitioning): टुकड़े रखना
अगर डेटा एक मशीन के लिए बहुत बड़ा है तो उसे टुकड़ों में काटते हैं (जैसे नाम A-F, G-M ...) और हर टुकड़ा अलग मशीन पर रखते हैं। इसे अक्सर शार्डिंग (sharding) कहते हैं। हर मशीन पर कम डेटा और कम माँगें होती हैं।
क़ीमत: प्रतियों को एक-सा रखना
अगर दो प्रतियाँ अलग जगह बदली जाएँ तो थोड़ी देर वे अलग हो सकती हैं। प्रणाली को उन्हें फिर एक-सा करने के नियम चाहिए (संगति, consistency)। साथ ही ज़्यादा मशीनें यानी ज़्यादा नेटवर्क संदेश, ज़्यादा ख़राब हो सकने वाली चीज़ें और ज़्यादा सुरक्षा का काम। इसलिए बाँटना एक लेन-देन है, मुफ़्त तोहफ़ा नहीं।
पीयर-टू-पीयर और ये विचार कहाँ मिलते हैं
पीयर-टू-पीयर (P2P)
पीयर-टू-पीयर नेटवर्क में कोई केंद्रीय सर्वर नहीं होता। हर कंप्यूटर (पीयर) क्लाइंट भी है और सर्वर भी। पीयर फ़ाइल के टुकड़े आपस में बदलते हैं, इसलिए जितने ज़्यादा पीयर, उतने ज़्यादा मददगार। फ़ाइल-साझा नेटवर्क और कुछ वीडियो कॉल ऐसे चलते हैं। एक पीयर चला जाए तो बाक़ी चलते रहते हैं। दिक़्क़त: कौन क्या साझा करे, इस पर नियंत्रण और हानिकारक फ़ाइलों से बचाव कठिन है।
रोज़मर्रा के उदाहरण
- वेब: ब्राउज़र (क्लाइंट) वेब सर्वरों से बात करता है; लोकप्रिय साइटें कई सर्वर और लोड बैलेंसर इस्तेमाल करती हैं।
- DNS: इंटरनेट की "फ़ोन-बुक" दुनिया भर के कई सर्वरों में बँटी है।
- कंटेंट डिलीवरी नेटवर्क: वीडियो और चित्रों की प्रतियाँ उपयोगकर्ताओं के पास रखी जाती हैं।
- क्लाउड सेवाएँ: आप कई मशीनों में फैली गणना और भंडारण किराये पर लेते हैं।
- ईमेल और संदेश: सर्वर संदेश रखते और आगे भेजते हैं।
मुख्य सूत्र और परिभाषाएँ
- t सेकंड बाद इंतज़ार में माँगें ≈ (आने की दर − जवाब देने की दर) × t, जब आने की दर ज़्यादा हो
- n एक-जैसे सर्वरों की क्षमता = n × (एक सर्वर की क्षमता)
- सभी n स्वतंत्र प्रतियों के बंद होने की संभावना = (एक के बंद होने की संभावना)ⁿ
- डाउनलोड समय ≈ फ़ाइल का आकार ÷ सभी भेजने वालों की कुल चाल
- मुख्य शब्द: क्लाइंट, सर्वर, पीयर, लोड बैलेंसर, प्रतिकृति, शार्डिंग, विलंबता, दोष-सहिष्णुता
हल किए गए उदाहरण
1. एक सर्वर 1.2 माँगें प्रति सेकंड संभालता है। हर सेकंड 6 माँगें आती हैं। 10 सेकंड बाद कितनी माँगें इंतज़ार में होंगी?
इंतज़ार हर सेकंड 6 − 1.2 = 4.8 माँगें बढ़ता है। 10 सेकंड में: 4.8 × 10 = 48 माँगें इंतज़ार में।
2. तीन एक-जैसे सर्वर हर एक 1.2 माँगें प्रति सेकंड संभालते हैं। कुल क्षमता कितनी है? अगर प्रति सेकंड 3 माँगें आएँ तो वे कितने व्यस्त होंगे?
क्षमता = 3 × 1.2 = 3.6 माँगें/से। व्यस्तता = 3 ÷ 3.6 ≈ 0.83, यानी लगभग 83%। वे चल सकते हैं, कतारें छोटी रहेंगी।
3. हर सर्वर 90% समय चालू रहता है, स्वतंत्र रूप से। एक सर्वर 10% समय बंद रहता है। 3 सर्वरों पर डेटा की 3 प्रतियाँ हों तो कम से कम एक कितने समय चालू होगा?
तीनों एक साथ बंद: 0.1 × 0.1 × 0.1 = 0.001 (0.1%)। इसलिए कम से कम एक चालू: 1 − 0.001 = 0.999, यानी 99.9% समय। अकेला सर्वर सिर्फ़ 90% देता था।
4. 10 लाख ग्राहक-रिकॉर्ड की तालिका 4 सर्वरों में बराबर बाँटी गई (शार्डिंग)। हर सर्वर पर कितने रिकॉर्ड? एक ग्राहक खोजने पर क्या होता है?
10,00,000 ÷ 4 = 2,50,000 रिकॉर्ड प्रति सर्वर। खोज सिर्फ़ उस एक सर्वर तक जाती है जिसके पास वह ग्राहक है, बाक़ी तीन दूसरे काम के लिए ख़ाली रहते हैं।
5. 600 MB की फ़ाइल एक सर्वर पर है जो 8 MB/s भेजता है। डाउनलोड में कितना समय? अब 4 पीयर हर एक 8 MB/s एक साथ भेजें, तो कितना समय?
एक सर्वर: 600 ÷ 8 = 75 से। चार पीयर: कुल चाल 4 × 8 = 32 MB/s, इसलिए 600 ÷ 32 = 18.75 से, लगभग 19 से।
6. फ़ाइबर में संकेत लगभग 2,00,000 किमी/से चलता है। उपयोगकर्ता मुख्य सर्वर से 6000 किमी और एक प्रति से 300 किमी दूर है। आने-जाने का समय तुलना करो।
दूर सर्वर: 12 000 किमी ÷ 2,00,000 किमी/से = 0.06 से = 60 मि.से। पास की प्रति: 600 किमी ÷ 2,00,000 = 0.003 से = 3 मि.से। पास की रेप्लिका 20 गुना तेज़ है (सिर्फ़ यात्रा-समय में)।
आम गलतियाँ
- "वितरित" का मतलब सिर्फ़ "ज़्यादा कंप्यूटर" मानना। उन्हें एक सेवा की तरह मिलकर काम करना होता है।
- सोचना कि लोड बैलेंसर डेटा रखता है। वह सिर्फ़ माँगें सही जगह भेजता है।
- सोचना कि प्रतियाँ हर पल एक-जैसी रहती हैं। बदलाव के बाद थोड़ी देर वे अलग हो सकती हैं।
- सोचना कि पीयर-टू-पीयर में कोई नियम नहीं होते। पीयर भी साझा प्रोटोकॉल मानते हैं।