टीएल;डीआर
- समस्या: बड़े पैमाने की वास्तुकला (आर्किटेक्चर) तैयार करने के लिए उपलब्धता, थ्रूपुट और परिचालन जटिलता के बीच संतुलन बनाना आवश्यक है।
- मुख्य निष्कर्ष: क्लासिक इंटरव्यू डिज़ाइनों के बाद साधारण भाषा में पुन: प्रयोज्य बिल्डिंग ब्लॉक्स सीखें, शुरुआती प्रैक्टिस क्रम अपनाएँ, और इस ब्लॉग सीरीज़ को अपने अध्ययन मानचित्र की तरह इस्तेमाल करें।
- परिणाम: उत्पादन वातावरण में विफलता से निपटने और प्रदर्शन लक्ष्यों को हासिल करने की सटीक रूपरेखा।
सूची खत्म हो गई। रेट लिमिटर। यूआरएल शॉर्टनर। फीड। चैट। ड्राइव। वीडियो। फिनिश लाइन जैसा लगता है।
फिर नया प्रॉम्प्ट आता है, प्रोडक्ट का नाम अलग होता है, और वही कुछ विचार कमरे में लौट आते हैं। यह असफलता नहीं है। यही सबक है।
डिज़ाइन प्रैक्टिस समस्याएँ थीं। बिल्डिंग ब्लॉक्स असली पाठ्यक्रम हैं।
यह पोस्ट उस पहले पास के बाद का अध्ययन प्लान है। भाषा सादी रखूँगा। हर ब्लॉक एक वाक्य। एक प्रैक्टिस क्रम जो धीरे-धीरे जुड़ता चला जाता है। इस सीरीज़ के लिंक ताकि हमेशा पता रहे अगला क्या खोलना है। मुझे एक धैर्यवान प्रोफेसर समझें: हाइप नहीं, सिर्फ एक नक्शा जिसे आप सच में फॉलो कर सकें।
अगर इंटरव्यू प्रोसेस अभी भी धुंधला लगे, इंटरव्यू फ्रेमवर्क और बैक-ऑफ़-द-एन्वेलप अनुमान से शुरू करें। अगर कभी एक सर्वर को मल्टी-रीजन स्केच तक नहीं ले गए, टाइमर लगाकर एक बार शून्य से लाखों यूज़र तक स्केल करें।
"तैयार" का असल मतलब
एक आर्किटेक्चर याद से फिर बना लेना पर्याप्त नहीं। अच्छी हालत तब है जब आप:
१. बॉक्स खींचने से पहले डिज़ाइन के ज़रूरी ब्लॉक्स नाम ले सकें। २. इस प्रोडक्ट के लिए ब्लॉक क्यों अंदर या बाहर है, समझा सकें। ३. टूल बदल सकें (रेडिस बनाम Memcached, काफका बनाम SQS, hash बनाम range shard) बिना पूरी कहानी दोबारा लिखे। ४. सेवाएँ गढ़ने से पहले मोटे आंकड़े (क्यूपीएस, स्टोरेज, बैंडविड्थ) लगा सकें। ५. हल्के दबाव में दो-तीन ट्रेड-ऑफ़ ज़ोर से बचा सकें।
इंटरव्यू इस मांसपेशी को पुरस्कार देते हैं। असली ऑन-कॉल काम और ज़्यादा।
बिल्डिंग ब्लॉक्स (हर एक सादा वाक्य)
ज्यादातर प्रोडक्ट डिज़ाइन कुछ ही विचारों का रीमिक्स होते हैं। इन्हें ठंडे दिमाग से सीख लें। हर नया प्रॉम्प्ट छोटा हो जाएगा।
लोड बैलेंसर
लोड बैलेंसर कई सर्वरों के आगे बैठता है और हर रिक्वेस्ट किसी स्वस्थ सर्वर पर भेजता है, ताकि कोई एक मशीन पूरा ट्रैफिक न झेले।
कैश
कैश हॉट डेटा की कॉपी ऐप के पास रखता है, ताकि ज्यादातर रीड धीमी प्राइमरी डेटाबेस तक न जाएँ।
शार्ड
शार्ड डेटासेट (या राइट लोड) का एक टुकड़ा है, ताकि कई मशीनें वह काम बाँट सकें जो एक मशीन हमेशा नहीं संभाल सकती।
कतार (क्यू)
कतार काम को बाद के लिए रखती है, ताकि यूज़र की रिक्वेस्ट ईमेल, एनकोडिंग, फैन-आउट, क्रॉल या अस्थिर थर्ड-पार्टी एपीआई का इंतज़ार न करे।
रेप्लिका
रेप्लिका डेटा की अतिरिक्त कॉपी है, जो फेलओवर के लिए और अक्सर अतिरिक्त रीड क्षमता के लिए इस्तेमाल होती है, जब एक कॉपी काफी नहीं होती।
अतिरिक्त विचार: कंसिस्टेंसी बनाम अवेलेबिलिटी
जब मशीनों के बीच नेटवर्क टूटता है, अक्सर एक ही पाथ पर एक साथ पूरी सहमति और पूरा अपटाइम दोनों का वादा नहीं कर सकते, इसलिए फीचर के हिसाब से तय करते हैं कि कौन सा दर्द स्वीकार करेंगे।
हर स्लाइड पर सीएपी (सीएपी (CAP)) स्लोगन की ज़रूरत नहीं। एक शांत वाक्य काफी है: "चेकआउट के लिए मजबूत कंसिस्टेंसी पसंद है। सोशल फीड के लिए थोड़ी देरी ठीक है।"
सीरीज़ में ब्लॉक्स कैसे दिखते हैं
व्हाइटबोर्ड पर हर सेल भरने की ज़रूरत नहीं। ज़रूरत यह जानने की है कि आपके सामने वाले प्रॉम्प्ट के लिए कौन सी सेल बोझ उठाती हैं।
| डिज़ाइन | लोड बैलेंस | कैश | शार्ड | कतार | रेप्लिका |
|---|---|---|---|---|---|
| यूआरएल शॉर्टनर | रीडायरेक्ट टियर | हॉट कोड | कोड से | एनालिटिक्स बाद में | मैपिंग स्टोर |
| रेट लिमिटर | गेटवे | रेडिस स्टेट | की से | कम | रेडिस HA |
| न्यूज़ फीड | एपीआई + वर्कर्स | टाइमलाइन | यूज़र से | फैन-आउट जॉब्स | ग्राफ + पोस्ट |
| चैट | कनेक्शन सर्वर | प्रेजेंस | बातचीत से | ऑफलाइन पुश | मैसेज स्टोर |
| सर्च ऑटोकंप्लीट | क्वेरी टियर | प्रीफिक्स कैश | डिक्शनरी | रीबिल्ड जॉब्स | इंडेक्स कॉपी |
| यूट्यूब-स्टाइल | सीडीएन + एपीआई | थंब, मैनिफेस्ट | वीडियो / यूज़र | ट्रांसकोड | ऑब्जेक्ट स्टोर |
| गूगल ड्राइव-स्टाइल | अपलोड एज | मेटाडेटा | मालिक / फाइल से | स्कैन, इंडेक्स | मेटाडेटा + ब्लॉब्स |
व्यक्तिगत ब्लॉक्स के गहरे पैटर्न:
- कैशिंग: रेडिस कैशिंग पैटर्न
- असिंक काम: इवेंट-ड्रिवन आर्किटेक्चर
- लाइव कनेक्शन: वेब सॉकेट्स बेसिक्स
शुरुआती लोगों के लिए प्रैक्टिस क्रम
बेतरतीब कूदना तब तक प्रोडक्टिव लगता है जब तक नहीं लगता। यह क्रम पहले पूर्वापेक्षाएँ बनाता है। अगर कोई भाग पहले से मजबूत है, बदल लें।
चरण ०: प्रोसेस और नंबर (१ से २ सेशन)
१. इंटरव्यू फ्रेमवर्क: आवश्यकताएँ, एपीआई, डेटा, हाई लेवल, डीप डाइव, रैप-अप। २. बैक-ऑफ़-द-एन्वेलप अनुमान: क्यूपीएस, स्टोरेज, बैंडविड्थ, झूठी सटीकता के बिना मोटा मशीन काउंट। ३. शून्य से लाखों तक स्केल: वर्टिकल स्केल, लोड बैलेंसर, कैश, रेप्लिका, शार्ड एक कहानी में।
चरण १: कोर डेटा-प्लेन ब्लॉक्स (३ से ५ सेशन)
४. कंसिस्टेंट हैशिंग ५. की-वैल्यू स्टोर ६. यूनिक आईडी जनरेटर ७. रेट लिमिटर ८. यूआरएल शॉर्टनर
यह क्रम क्यों: हैशिंग और की-वैल्यू बार-बार आते हैं। आईडी लगभग हर राइट पाथ में दिखते हैं। रेट लिमिटिंग गड़बड़ घड़ियों के साथ शेयर्ड काउंटर सिखाती है। यूआरएल शॉर्टनर पहला पूरा प्रोडक्ट है जो अभी भी ४५ मिनट में फिट बैठता है।
चरण २: असिंक और सोशल ग्राफ (४ से ६ सेशन)
९. वेब क्रॉलर १०. नोटिफिकेशन सिस्टम ११. न्यूज़ फीड १२. चैट सिस्टम १३. सर्च ऑटोकंप्लीट
यहाँ कतारें, फैन-आउट, प्रेजेंस और प्रीफिक्स संरचनाएँ अमूर्त नहीं रहतीं। अगर कनेक्शन स्टेट अभी भी जादुई लगे, चैट के साथ वेब सॉकेट्स बेसिक्स जोड़ें।
चरण ३: भारी मीडिया और फाइलें (२ से ३ सेशन)
१४. यूट्यूब-स्टाइल स्ट्रीमिंग १५. गूगल ड्राइव-स्टाइल
ये सीडीएन सोच, ऑब्जेक्ट स्टोरेज, चंक्ड अपलोड, एनकोड पाइपलाइन और मेटाडेटा कंसिस्टेंसी मजबूर करते हैं। इन्हें तब करें जब कतार और रेप्लिकेशन की साफ कहानी पहले से आती हो।
हर डिज़ाइन कैसे प्रैक्टिस करें
हर बार वही लूप। उबाऊ लूप जीतते हैं।
१. टाइमर ऑन (३५ से ४५ मिनट)। अकेले भी ज़ोर से बोलें। २. पहले आवश्यकताएँ। स्कोप में क्या? बाहर क्या? ३. नंबर जल्दी। मोटे भी डिज़ाइन बदल देते हैं। ४. एक हाई-लेवल डायग्राम। फिर सिर्फ दो-तीन हॉट स्पॉट पर डीप डाइव। ५. अंत में तीन ट्रेड-ऑफ़ लिखें, दस नहीं। ६. अगले दिन, बिना नोट्स खाली से फिर बनाएँ। खामियाँ अध्ययन सूची बन जाती हैं।
वैकल्पिक स्ट्रेच: एक ब्लॉक का छोटा वर्जन बनाएँ (रेडिस में टोकन बकेट, शॉर्ट कोड सर्विस, सिंपल फैन-आउट वर्कर)। इंटरव्यू कोड से ज़्यादा जजमेंट देखते हैं, लेकिन एक ब्लॉक एक बार शिप करना बहुत सारा हाथ हिलाना खत्म कर देता है।
सीरीज़ मैप (यह ब्लॉग)
| क्रम | विषय | लिंक |
|---|---|---|
| १ | शून्य से लाखों तक स्केल | design-scale-zero-to-millions |
| २ | बैक-ऑफ़-द-एन्वेलप अनुमान | design-back-of-envelope-estimation |
| ३ | इंटरव्यू फ्रेमवर्क | design-interview-framework |
| ४ | रेट लिमिटर | design-a-rate-limiter |
| ५ | कंसिस्टेंट हैशिंग | design-consistent-hashing |
| ६ | की-वैल्यू स्टोर | design-key-value-store |
| ७ | यूनिक आईडी जनरेटर | design-unique-id-generator |
| ८ | यूआरएल शॉर्टनर | design-url-shortener |
| ९ | वेब क्रॉलर | design-web-crawler |
| १० | नोटिफिकेशन सिस्टम | design-notification-system |
| ११ | न्यूज़ फीड | design-news-feed-system |
| १२ | चैट सिस्टम | design-chat-system |
| १३ | सर्च ऑटोकंप्लीट | design-search-autocomplete |
| १४ | यूट्यूब-स्टाइल स्ट्रीमिंग | design-youtube-streaming |
| १५ | गूगल ड्राइव-स्टाइल | design-google-drive |
| १६ | यह लर्निंग पाथ | design-interview-learning-path |
किनारे तेज़ करने वाले सहायक पोस्ट:
- डीएनएस कैसे काम करता है
- एचटीटीपीएस और TLS कैसे काम करते हैं
- डेवलपर्स के लिए OAuth २.०
- रेडिस कैशिंग पैटर्न
- इवेंट-ड्रिवन आर्किटेक्चर
- रियल-टाइम ऐप्स के लिए वेब सॉकेट्स
एक सादा साप्ताहिक प्लान
समय कम हो तो प्लान को चमकाने की कोशिश न करें। प्लान चलाएँ।
| दिन | फोकस | आउटपुट |
|---|---|---|
| सोम | एक ब्लॉक गहराई से (कैश या कतार या शार्ड) | एक पेज नोट्स + फेलियर मोड |
| बुध | सीरीज़ से एक पूरा डिज़ाइन | टाइम्ड व्हाइटबोर्ड या डॉक |
| शुक्र | पिछला डिज़ाइन ठंडे से फिर बनाएँ | सिर्फ खामियों की सूची |
| सप्ताहांत (वैकल्पिक) | एक असली कंपनी इंजीनियरिंग ब्लॉग | तीन दोबारा इस्तेमाल के विचार |
चार स्थिर हफ्ते बारह सप्ताहांत के पैसिव वीडियो से बेहतर हैं।
सीरीज़ के बाद सीखना जारी कैसे रखें
व्हाइटबोर्ड ड्रिल थम जाते हैं। तीन शांत दिशाओं में फैलाएँ।
१. हफ्ते में एक असली आर्किटेक्चर पढ़ें। सिर्फ पूछें: उन्होंने कौन से ब्लॉक्स इस्तेमाल किए, पिछली स्केल पर क्या टूटा, और उन्होंने क्या करने से मना किया?
२. एक ब्लॉक साझा करने वाले दो डिज़ाइन तुलना करें। रेट लिमिटर बनाम यूनिक आईडी जनरेटर दोनों को मल्टी-नोड राइट में सावधानी चाहिए। फीड फैन-आउट बनाम नोटिफिकेशन फैन-आउट दोनों को कतार और आइडेम्पोटेंसी चाहिए, लेकिन लेटेंसी बजट अलग। पाँच बुलेट लिखें: क्या ट्रांसफर होता है, क्या नहीं।
३. थोड़ी ऑपरेशनल गहराई जोड़ें। मेट्रिक्स (क्यूपीएस, p९९, कतार लैग, कैश हिट रेशियो), सिंपल फेलियर ड्रिल (कैश नोड गिराएँ, कंज्यूमर रोकें), और लागत (कब सीडीएन स्मार्ट कोड से जीतता है)।
किसी और को सिखाना सबसे तेज़ ऑडिट है। अगर डायग्राम देखे बिना कंसिस्टेंट हैशिंग न समझा सकें, अभी मालिकाना हक नहीं है। ठीक है। यह जानकारी है।
दोस्त के लिए संक्षेप
अगर एक संदेश में भेजना हो:
आपने सिस्टम डिज़ाइन समस्याओं का ढेर खत्म किया। वे रेप्स थे, पाठ्यक्रम नहीं। पाठ्यक्रम पाँच ब्लॉक्स हैं: लोड बैलेंसर ट्रैफिक बाँटता है, कैश हॉट रीड तेज़ करता है, शार्ड डेटा मशीनों पर बाँटता है, कतार धीमे काम को टालती है, रेप्लिका सुरक्षा और रीड के लिए डेटा कॉपी रखती है। ब्लॉक्स सीखें, प्रोसेस और नंबर से लेकर मीडिया सिस्टम तक क्रम से डिज़ाइन प्रैक्टिस करें, और अध्ययन, टाइम्ड डिज़ाइन, ठंडी रीड्रॉ का छोटा साप्ताहिक लूप रखें। इस ब्लॉग की सीरीज़ उसी प्लान का एक पूरा रास्ता है।
समापन
सिस्टम डिज़ाइन कौशल "मैंने यूट्यूब याद कर लिया" नहीं है। यह है "नए प्रोडक्ट की कहानी के नीचे मैं लोड बैलेंसिंग, कैशिंग, शार्डिंग, कतारें, रेप्लिकेशन और ईमानदार कंसिस्टेंसी चुनाव जोड़ सकता हूँ।"
जहाँ कमज़ोर हैं वहाँ से शुरू करें। अगर नंबर डराते हैं, अनुमान करें। अगर असिंक उलझाता है, ड्राइव से पहले क्रॉलर और नोटिफिकेशन करें। अगर संरचना पर अटकते हैं, फ्रेमवर्क पोस्ट टाइमर के साथ दो बार चलाएँ।
फिर आगे बढ़ते रहें। स्थिर प्रैक्टिस काफी है। नाटक की ज़रूरत नहीं। सिर्फ अगले सेशन में उपस्थित होना है।
