Casey ने AWS Outage को समझाया | The Standup

TThe PrimeTime
Computing/SoftwareManagementInternet Technology

Transcript

00:00:00स्टैंड अप का यह एपिसोड बेहद खास होने वाला है क्योंकि Casey इंट्रो करने वाले हैं।
00:00:05Casey, आज हम किस बारे में बात करने वाले हैं?
00:00:10नमस्कार दोस्तों और स्टैंड अप में आपका स्वागत है। Spotify पर 45वां,
00:00:176वां सबसे बेहतरीन टेक पॉडकास्ट,
00:00:20हाल की किसी चीज़ के अनुसार। सच है।
00:00:29खैर,
00:00:29माफ़ी चाहता हूँ। आज स्टैंड अप पर,
00:00:31मैं एक चीज़ को कवर करना चाहता था। मैं अक्टूबर में हुए AWS आउटेज के बारे में बात करने जा रहा हूँ,
00:00:38लेकिन ऐसा इसलिए कर रहा हूँ क्योंकि मैं एक बड़ी बात पर चर्चा करना चाहता था,
00:00:43जो है किसी चीज़ को वास्तव में समझने और यह कहने के बीच का अंतर कि आप उसे समझते हैं।
00:00:49तो यह बात अक्सर होती है,
00:00:51खासकर उन लोगों के साथ जो अपने प्रोग्रामिंग करियर में शुरुआती दौर में हैं,
00:00:56जैसे अगर आप जूनियर प्रोग्रामर हैं या कुछ ऐसा,
00:00:59आप नए आए हैं। और मुझे पता है कि मेरे साथ भी ऐसा था,
00:01:03कि आप ऐसा दिखाना चाहते हैं कि आपको चीज़ें पता हैं,
00:01:06है ना?
00:01:07आप ऐसा नहीं दिखाना चाहते कि आप नहीं समझ रहे कि क्या हो रहा है। तो बहुत सारा बाहरी दबाव होता है,
00:01:13चाहे वह वाकई में हो या नहीं,
00:01:15आपको लगता है कि आपको यह दिखाना चाहिए कि आप कुछ समझ गए या समझने का नाटक करना चाहिए,
00:01:21भले ही वह थोड़ा धुंधला हो या आपको पूरी तरह समझ न आया हो।
00:01:26और भले ही यह आपकी गलती न हो,
00:01:29जैसे कि चीज़ को ठीक से समझाया न गया हो या उसमें ज़रूरी जानकारी न हो,
00:01:34फिर भी आपको ऐसा दिखाने के लिए प्रोत्साहित किया जाता है कि आप जानते थे कि यह क्या था,
00:01:40है ना?
00:01:40क्योंकि इससे आप ज़्यादा स्मार्ट लगते हैं या कुछ ऐसा,
00:01:44या कम से कम जूनियर नहीं लगते,
00:01:47है ना?
00:01:47और तो कम से कम मैंने पाया है कि जैसे-जैसे मैं बड़ा हुआ और प्रोग्रामिंग का अनुभव बढ़ा,
00:01:53आजकल मैं लगभग ज़्यादा ही पूछ लेता हूँ कि चीज़ों को समझाया जाए। जैसे मुझे बिल्कुल भी परवाह नहीं कि मैं बेवकूफ़ लगूँगा।
00:02:03मैं बस कहता हूँ,
00:02:04रुको एक मिनट,
00:02:04वापस जाओ। मुझे वह हिस्सा समझ नहीं आया। जैसे,
00:02:07इससे आपका मतलब क्या है?
00:02:08या वह शब्द का क्या अर्थ है या जो भी हो?
00:02:10क्योंकि अब मुझे वाकई में इसकी परवाह नहीं है।
00:02:12मुझे उतनी चिंता नहीं है। और मैं वास्तव में जानना चाहता हूँ क्योंकि मुझे प्रोग्रामिंग का इतना अनुभव हो चुका है जहाँ मुझे लगा कि मैं कुछ जानता था या मैंने दिखाया कि मैं जानता था और बाद में मुझे इसका खामियाज़ा भुगतना पड़ा।
00:02:22मैं सोचता हूँ,
00:02:23मैं वास्तव में जानना चाहता हूँ। मैं यह पक्का करना चाहता हूँ कि जब मेरे पास किसी बग की व्याख्या हो या मुझे लगे कि मुझे परफॉर्मेंस स्लोडाउन का कारण पता है,
00:02:31तो मेरे दिमाग के पीछे हमेशा यह चलता रहता है कि अगर मैं वास्तव में इसकी तह तक नहीं गया हूँ,
00:02:37तो यह कुछ और हो सकता है। यह हो सकता है कि असली चीज़ अभी भी वहीं छिपी हो। और मुझे बस पता नहीं क्योंकि मैंने इसे पूरी तरह से नहीं देखा है। मैं बस आगे बढ़ रहा हूँ क्योंकि यह सुविधाजनक है या जो भी हो।
00:02:48और इसलिए मैं DynamoDB आउटेज के बारे में बात करना चाहता था क्योंकि हाल ही में कुछ हाई-प्रोफाइल आउटेज की एक श्रृंखला चल रही है। तो Google को डाउन करने वाला एक बड़ा आउटेज हुआ और पता चला कि यह एक ऐसी चीज़ थी जहाँ उन्होंने किसी फील्ड के खाली होने को हैंडल नहीं किया,
00:03:03है ना?
00:03:04तो उनकी प्रोग्रामिंग में,
00:03:05जिस तरह से वे प्रोग्रामिंग कर रहे थे,
00:03:08वे ऐसे थे,
00:03:08ठीक है,
00:03:09हमारे पास यह चीज़ है। हम कुछ JSON लोड करते हैं और अगर JSON में कुछ नहीं है,
00:03:13तो हम बस एक नल पॉइंटर को डीरेफरेंस कर देते हैं या कुछ ऐसा,
00:03:16है ना?
00:03:17यह सचमुच वैसा ही था, है ना?
00:03:19और फिर CrowdStrike के साथ एक आउटेज हुआ जहाँ उन्होंने ब्लू स्क्रीन के साथ पूरी दुनिया को डाउन कर दिया। और वह था,
00:03:25उन्होंने बहुत अच्छा स्पष्टीकरण दिया,
00:03:27यह वास्तव में एक अच्छा स्पष्टीकरण था। वे ऐसे थे,
00:03:30हम यह निश्चित ऐरे साइज़िंग चीज़ करते हैं और हमारे पास बहुत सारे नियम थे। तो इसने ऐरे को ओवरफ्लो कर दिया,
00:03:36है ना?
00:03:37और इसलिए ये काफी अच्छे थे जब उन्होंने जिसे वे RCA या रूट कॉज़ एनालिसिस कहते हैं,
00:03:41वह दिया,
00:03:42है ना?
00:03:42जब उन्होंने कहा,
00:03:43यह है कि हम क्यों डाउन हुए। जब मैंने उन्हें पढ़ा,
00:03:46तो मुझे ऐसा नहीं लगा कि मेरे दिमाग में बहुत सारे अनुत्तरित प्रश्न थे। शायद मुझे कोड की वह लाइन नहीं पता थी,
00:03:52क्योंकि शायद उन्होंने कोड का वह टुकड़ा प्रकाशित नहीं किया,
00:03:56लेकिन उन्होंने मुझे इतना दिया कि मैं ऐसा था,
00:03:58ठीक है,
00:03:59मैं समझता हूँ कि किसी ने यह कोड कैसे लिखा और मैं उस बेवकूफी भरी चीज़ को समझता हूँ जो उन्होंने की,
00:04:04है ना?
00:04:05कि जैसे,
00:04:05ठीक है,
00:04:06वह चीज़ मत करो। मैं समझता हूँ। और मैं पूरी तरह से ठीक हूँ।
00:04:10DynamoDB वाले के साथ, क्योंकि यह इस पॉडकास्ट पर आया, है ना?
00:04:15हमने इसके बारे में बात की थी जब गिटार सेंटर में वह आदमी,
00:04:19है ना?
00:04:20ऐसा था, मैंने पब में किसी को बात करते हुए सुना, है ना??
00:04:24हाँ। अविश्वसनीय। यहाँ हम मायावी प्रोग्रामर को देखते हैं,
00:04:28एक साधारण जीव जो अपना अधिकांश समय अकेले काम करते हुए,
00:04:31अक्सर अंधेरे में बिताता है,
00:04:32लेकिन यह क्या है,
00:04:33इंटरनेट पर कोई गलत हो रहा है। हमारा कोडर एक्शन में आ जाता है,
00:04:37लाइट मोड वेबसाइट दिखने से पहले प्रति मिनट 120 शब्दों की शीर्ष गति तक पहुँच जाता है।
00:04:42इन कोड प्रेमियों का प्राकृतिक दुश्मन हमारे दोस्त को स्तब्ध कर देता है। पीछा बंद हो गया है। हमें अगली बार उन्हें पकड़ना होगा। जब अपने कंप्यूटर पर नहीं होते,
00:04:50तो वे घंटों तक कच्चे प्रतीक बनाते हुए बिता सकते हैं,
00:04:52जिसे वे व्हाइटबोर्ड कहते हैं। शोधकर्ताओं ने हजारों बोलियों की खोज की है जिनमें अक्सर एक ही ऑफिस में एक दर्जन से अधिक का उपयोग किया जाता है। हालाँकि,
00:05:00किसी भी भाषाविद ने अभी तक यह नहीं समझा है कि उनका उद्देश्य क्या है।
00:05:03घमंडी जीव,
00:05:04उनके शरीर सहस्राब्दियों में विकसित हुए हैं ताकि वे खुद को ऑनलाइन देखते हुए असामान्य मुद्राओं में बैठ सकें। यह अक्सर कई घंटों तक चलता है और वे बहाना बनाते हैं कि वे कोड रिव्यू का इंतजार कर रहे हैं,
00:05:17लेकिन जब यह पूछा जाता है कि वे इतने निष्क्रिय क्यों हैं। और अंत में,
00:05:21बहुत कम हासिल करने के एक लंबे दिन के बाद,
00:05:24हमारे कीबोर्ड वॉरियर बिस्तर के लिए तैयार हैं। जल्दी से पढ़ो और लाइट बंद।
00:05:29शुभ रात्रि, छोटे कोडर।
00:05:30तो मैं रात को इतनी अच्छी तरह कैसे सोता हूँ?
00:05:32खैर,
00:05:33मेरे पास उन बग्स को कुचलने में मदद करने के लिए Sentry है। और मैं नहीं,
00:05:37मैं उन छोटे-छोटे साउथ डकोटा बग्स के बारे में बात नहीं कर रहा हूँ जो सर्दियों में मर जाते हैं। मैं बड़े,
00:05:44मतलबी जंगल के बग्स के बारे में बात कर रहा हूँ। और मैं उनमें से किसी से भी नहीं डरता,
00:05:49वैसे,
00:05:50बस,
00:05:50लेकिन मैं Sentry के Seer से उन बग्स को कुचल सकता हूँ। तो मैं उस बारे में थोड़ा अधिक प्रेरित था कि ठीक है,
00:05:57मुझे यह देखने दो कि उन्होंने कितनी जानकारी पोस्ट की है। और मैंने पढ़ा था,
00:06:02मैंने बाद में एक सारांश पढ़ा था जहाँ उन्होंने एक RCA पोस्ट किया और यह बहुत अस्पष्ट था। जैसे RCA ने वास्तव में बहुत अधिक व्याख्या नहीं की। फिर मैंने देखा कि उन्होंने एक पूरी प्रस्तुति पोस्ट की जैसे reinvent में दिसंबर में,
00:06:16उन्होंने,
00:06:17या मुझे नहीं पता कि reinvent दिसंबर में था या नहीं,
00:06:20लेकिन वीडियो दिसंबर में reinvent प्रस्तुति का अपलोड हुआ जहाँ उन्होंने इस आउटेज को कवर किया।
00:06:26तो मैं गया और वह सब देखा। और पूरा RCA पढ़ने और पूरी प्रस्तुति देखने के बाद,
00:06:32मुझे अभी भी ऐसा लगा। मुझे यहाँ बग की वास्तविक व्याख्या नहीं दिख रही है,
00:06:37है ना?
00:06:38जैसे मैं यह पता लगाने की कोशिश कर रहा हूँ कि वास्तविक बग क्या था और इसे कभी समझाया ही नहीं गया।
00:06:45और इसलिए मैं बस इसके बारे में बात करना चाहता था,
00:06:47इस बारे में चर्चा करना चाहता था कि मुझे क्यों नहीं लगता कि उन्होंने बग को समझाया और इसे इस बात के उदाहरण के रूप में इस्तेमाल करना चाहता था कि मुझे नहीं लगता कि लोगों को बस यह कहना चाहिए,
00:06:56ओह,
00:06:56ठीक है। मुझे समझ आ गया कि बग क्या था। क्योंकि लोगों ने मुझे रिप्लाई करके कहा है,
00:07:00ओह,
00:07:00यहाँ देखो,
00:07:01मुझे तुम्हें समझाने दो कि बग क्या था। और फिर वे बस वही चीजें समझाते हैं। मैं कहता हूँ,
00:07:05यह बग नहीं है। सही है। तो हर कोई ऐसा करने के लिए प्रेरित है कि,
00:07:08मुझे समझ आ गया। क्योंकि मैंने इसे पढ़ा है जैसे,
00:07:10नहीं,
00:07:10अगर तुम मुझे नहीं बता सकते कि असल बग क्या था,
00:07:13तो हमारा काम यहाँ खत्म नहीं हुआ। सही है।
00:07:14जैसे हमारे पास वह पूरी व्याख्या होनी चाहिए। तो क्या यह सब उचित समझ में आता है?
00:07:18जैसे मैं क्या कह रहा हूँ?
00:07:19हाँ। सबसे पहले,
00:07:20मैं बस यह कहना चाहता हूँ,
00:07:21मुझे बिल्कुल पता था कि तुम क्या कह रहे थे,
00:07:23केसी।
00:07:23बिल्कुल शुरुआत से ही,
00:07:25सही है। यह तुरंत था। तुम ऐसे थे,
00:07:28ठीक है,
00:07:28मुझे पता है,
00:07:29मुझे बिल्कुल पता है तुम क्या कह रहे हो। मेरी तरफ से कोई सवाल नहीं। कोई रुकावट नहीं। सबका धन्यवाद। मैं बढ़िया हूँ।
00:07:39मैं तुम लोगों से कल मिलूंगा। तुम जानते हो,
00:07:41कोई दिक्कत नहीं। मैं बस यह कहना चाहता हूँ,
00:07:44मुझे पॉडकास्ट पर केसी को बोलते हुए सुनना वाकई पसंद है जब मैं Spotify पर सुनता हूँ,
00:07:49लेकिन अभी भी,
00:07:49मैं तुम्हें एक घंटे तक बात करते हुए सुन सकता हूँ। Spotify के लिए बहुत बढ़िया शाउट आउट भी। मैं बस यही कहने वाला था,
00:07:56मैं कहने वाला था,
00:07:57खासकर जब तुम Spotify पर सुनते हो,
00:07:59गुणवत्ता अविश्वसनीय है। तुम्हें बोनस एक्स्ट्रा भी मिलते हैं,
00:08:03सही है?
00:08:03तुम्हें असल एक्स्ट्रा से पहले और बाद की सारी बातचीत मिलती है। हमने Spotify पर लंबे,
00:08:08लंबे संस्करण पोस्ट करना शुरू कर दिया है जो एक्स्ट्रा की तरह अधिक हैं। हाँ। टॉप पर कम समय ऑन टॉपिक नहीं है,
00:08:15लेकिन Spotify पर थोड़ी अधिक बकबक है क्योंकि लाइव ऑडियंस को बकबक मिलती है।
00:08:19वे यहाँ आने को मिलते हैं। उन्हें ट्रैश और उसकी Pokemon की लत के बारे में सुनने को मिलता है,
00:08:23जिसके बारे में तुम्हें शायद पता भी नहीं है क्योंकि तुम नहीं थे,
00:08:26तुम इसे YouTube पर सुन रहे थे,
00:08:27सही है?
00:08:28तुम नहीं,
00:08:28तुम सारी मजेदार चीजें सुनने को नहीं मिलेंगी। यह YouTube वीडियो के पहले 10 मिनट के लिए एक बहुत कठिन बिक्री है। यह YouTube वीडियो के लिए बहुत कठिन बिक्री है। ऐसा है,
00:08:35मैं चार लोगों को किसी ऐसी चीज के बारे में बात करते हुए देखने जा रहा हूँ जिसे मैं समझता भी नहीं। और इसे डायनेमो DB कहा जाता है। हाँ।
00:08:41चूंकि हम पॉडकास्ट शुरू कर रहे हैं,
00:08:42शायद हमें Adam का परिचय देना चाहिए। ओह हाँ। यह बहुत अच्छा बिंदु है।
00:08:45हमने बिल्कुल भी कुछ नहीं किया। नमस्ते। हमें थोड़ा बताओ कि तुम आज पॉडकास्ट पर क्यों हो।
00:08:50क्योंकि मैं TJ के घर पर हूँ नंबर एक,
00:08:54नंबर एक कारण क्यों TJ को अपने घर आने वाले सभी लोगों को पॉडकास्ट पर होना जरूरी है। यह कुछ बार अजीब रहा है। हाँ। हाँ। तुम वास्तव में कौन हो?
00:09:07एक AWS हीरो होने के अलावा। मैं वह भी नहीं हूँ मैं AWS हीरो नहीं था। ठीक है।
00:09:13सुपरहीरो ग्रुप से निकाल दिया गया। जैसे यह कैसे काम करता है?
00:09:16तुम बस नहीं, तुम्हें रिन्यू नहीं किया जाता।
00:09:18मैं एक-टर्म हीरो था और उन्होंने तय किया,
00:09:20ओह,
00:09:21तुम,
00:09:21क्या यह एक पेड अप चीज है?
00:09:22तुम हीरो बनने के लिए पैसे देते हो??
00:09:24नहीं,
00:09:24नहीं,
00:09:25मुझे बस इसकी कोई परवाह नहीं रही। कभी इसके बारे में बात करो। इसलिए वे ऐसे थे,
00:09:29शायद वह अब हीरो नहीं रहा। अब वह एक खलनायक है। केसी ऐसा लग रहा है जैसे वह किसी मर्डर मिस्ट्री का हिस्सा है। वह वहाँ खड़ा है। ओह यार। हम,
00:09:36हम प्राप्त करने वाले हैं,
00:09:37उह,
00:09:38जैसे,
00:09:38उह,
00:09:39यह क्या है?
00:09:40निक हिल। वह व्यक्ति कौन है जो बोर्ड पर सारी ड्राइंग करता है। और फिर यह दिखाई देता है। केसी Muratori। वह वही है जिसके बारे में तुम सोच रहे हो। Muratori। क्या यह Muratori है या Muratori है?
00:09:49हे भगवान। तुम विजुअल करने वाले हो। क्या तुम नहीं?
00:09:52तो मुझे पता है यह सबसे अच्छा पॉडकास्ट है।
00:09:54सचमुच,
00:09:55यह इसका हिस्सा बनने के लिए सबसे अच्छा है। उह,
00:09:58मेरे परिवार द्वारा इसे Muratori उच्चारित किया जाता है। जैसे लगभग वहाँ Y था जैसे Muratori,
00:10:04लेकिन यह सही है। यह वास्तव में कोई मतलब नहीं रखता क्योंकि यह एक इतालवी है,
00:10:08यह एक इतालवी नाम है। और इतालवी में,
00:10:11यह Muratori या Muratori होगा।
00:10:13इसका मतलब नहीं है। तो क्यों,
00:10:15यह mur कैसे हुआ मुझे कोई अंदाजा नहीं। यह कुछ इतालवी अमेरिकी जैसी इमिग्रेंट चीज थी जो हुई। मुझे लगता है। मुझे नहीं पता। ठीक है। तो यहाँ प्रभावी रूप से उन्होंने क्या कहा।
00:10:28उनके पास API endpoints नाम की चीज़ें होती हैं,
00:10:31लेकिन वे उन्हें यही कहते हैं। और ये domain address होते हैं। जैसे अगर आप DNS में देखें,
00:10:37तो यह वह नाम है जिसे आप ढूंढने जा रहे हैं ताकि आपको पता चले कि आपको अपने DynamoDB requests किसे भेजने हैं। और मुझे लगता है ये चीज़ें कुछ इस तरह दिखती हैं।
00:10:47और Adam शायद इसकी पुष्टि कर सकते हैं क्योंकि वे एक hero हैं,
00:10:53या थे।
00:10:53ये कुछ ऐसे दिखते हैं,
00:10:55ओह,
00:10:55पीछे रह गया। हाँ। हम,
00:10:56हम कुछ सेकंड पीछे हैं। क्योंकि हमारा वीडियो river पर गायब हो गया। ओह,
00:11:00ठीक है यहाँ आ गया। तो ये dynamodb.use-east-1.api.aws या कुछ इस तरह दिखते हैं। और मुझे लगता है यह इस बात पर निर्भर करता है कि आप IPv6 इस्तेमाल कर रहे हैं या IPv4। जैसे चीज़ों के आधार पर उनके अलग-अलग नाम होते हैं या फिर यह इस पर निर्भर करता है कि आप किसी विशिष्ट चीज़ का उपयोग कर रहे हैं,
00:11:16जैसे उन्होंने बताया कि सरकारें एक अलग का इस्तेमाल करती हैं या जो भी हो। तो ये नाम ऐसे नाम हैं जिन्हें आप प्रभावी रूप से hard code करते हैं,
00:11:24मुझे लगता है,
00:11:25अपने application में जहाँ आप कहते हैं,
00:11:27जब मुझे DynamoDB के साथ कुछ करना है,
00:11:29तो मैं इसके लिए पूछने जा रहा हूँ। क्या यह समझ में आता है.
00:11:32और क्या यह सही लगता है.
00:11:33Adam,
00:11:34क्योंकि मैं AWS की चीज़ें इस्तेमाल नहीं करता। हाँ। हाँ। हाँ। बिल्कुल ठीक है।.
00:11:38तो,
00:11:39आप जानते हैं,
00:11:40आप कुछ ऐसा माँगते हैं और आप बिल्कुल सही तरीके से भेजने जा रहे हैं।
00:11:42मेरा मतलब है,
00:11:43मुझे पता है वह क्या कह रहा है। हाँ। तो फिर वह आपको कहीं और redirect करने वाला है क्योंकि जाहिर है कि कोई एक machine नहीं है जो पूरे ब्रह्मांड में सभी DynamoDB traffic को संभालने वाली हो। भले ही आप इसे region के हिसाब से विभाजित करें,
00:11:58जो आप यहाँ देख सकते हैं,
00:11:59आपको एक region चुनना होता है। मुझे लगता है आप किसी मुख्य address पर नहीं भेजते। आप इसे एक regional address पर भेजते हैं या शायद कोई मुख्य address है जिसका आप उपयोग कर सकते हैं जो इसे समझ लेगा। मुझे नहीं पता।
00:12:13लेकिन वैसे भी,
00:12:14किसी बिंदु पर आप इससे बात कर रहे हैं और इसे प्रभावी रूप से एक load balancing scheme की ओर इशारा करने की आवश्यकता है। तो इस चीज़ को प्रभावी रूप से उस चीज़ की ओर इशारा करना चाहिए जिसे उन्होंने DNS tree कहा।
00:12:27हालाँकि उन्होंने कभी भी इसकी tree प्रकृति को वास्तव में समझाया नहीं। यह अधिक एक weighted array की तरह लगा,
00:12:33अगर आप चाहें,
00:12:33जहाँ आपने बस कहा,
00:12:34यहाँ कुछ machines हैं और आप उन machines को weights के आधार पर चुनने जा रहे हैं जो हम सेट करते हैं ताकि हम load balance कर सकें,
00:12:41सही?
00:12:42तो अगर कोई machine पीछे रह जाती है,
00:12:43तो शायद हम इसका weight कम कर देते हैं। और अगर कोई machine खाली लगती है,
00:12:47तो हम इसका weight बढ़ा देते हैं। और इसलिए उन्होंने इसे tree कहा। तो मैं मान रहा हूँ कि यह एक tree है। उन्होंने कभी नहीं समझाया कि इसका tree वाला हिस्सा क्या था,
00:12:56लेकिन इस नाम को इशारा करना चाहिए। क्या मैं एक सेकंड के लिए बाधा डाल सकता हूँ??
00:13:00वैसे,
00:13:00किसी को उस tree के आधार पर अपना L6 promotion मिला था। तो मुझे लगता है अगली बार आपको यह पता लगाना चाहिए कि वह tree क्या है। क्योंकि यह किसी के लिए बहुत मायने रखता था। ठीक है। एक packet था और engineers ने ऐसा किया। मैं सहमत हूँ। tree शायद महत्वपूर्ण है। बस यह bug के लिए महत्वपूर्ण नहीं है। और यहाँ तक कि,
00:13:16तो मैं कहूँगा कि उन्हें tree को समझाने की कोई आवश्यकता नहीं थी।
00:13:19तो मुझे ठीक है कि उन्होंने यह छोड़ दिया कि tree क्या कर रही है। लेकिन मेरे पास भी एक त्वरित सवाल है।
00:13:25हाँ। क्या इसे tree इसलिए कहा जाता है क्योंकि यह एक root cause analysis है या नहीं?
00:13:29और कोई मज़ाक नहीं। हम बहुत ज्यादा off topic हो गए हैं। मुझे माफ़ करना। मुझे माफ़ करना। तो वैसे भी,
00:13:35यह उस ओर इशारा करना चाहिए।
00:13:37और वह,
00:13:38वह इस तरह का,
00:13:38यह लोड बैलेंसिंग स्कीम मूल रूप से DNS एंट्रीज़ की और जिस तरह से उन्होंने इसे अपनी प्रस्तुति में वर्णित किया है वह यह है कि वे एक चीज़ का उपयोग करेंगे जैसे मैं कहूंगा प्लान वन 45 डॉट डायनेमो DB,
00:13:50जैसे DDB डॉट AWS,
00:13:51है ना?
00:13:51अब यह उस ट्री का रूट है,
00:13:53मुझे लगता है,
00:13:53रूट कॉज़ एनालिसिस नहीं,
00:13:55बल्कि इस ट्री का,
00:13:56इसमें जैसे,
00:13:56यह रिकॉर्ड्स के एक समूह का टॉप लेवल रिकॉर्ड है जो इसे अपनी लोड बैलेंसिंग करने की अनुमति देता है। और मुझे लगता है कि रूट 53 में इस तरह की लोड बैलेंसिंग क्षमता है। मैं प्रस्तुति की पंक्तियों के बीच पढ़ रहा हूं। उन्होंने यह सीधे नहीं कहा,
00:14:10लेकिन मैं मान रहा हूं कि रूट 53,
00:14:12जो यह सब कर रहे हैं,
00:14:13आप जानते हैं,
00:14:14जो उनकी अपनी DNS चीज़ है,
00:14:15यह उस लोड बैलेंसिंग को होने देती है बस आप यहां चीज़ें सेट कर दें जो बताती हैं कि लोड बैलेंसिंग को कैसे काम करना चाहिए। और फिर यह कुछ तरह के रैंडमाइज़ेशन और वेट्स या जो भी हो उसके आधार पर सही मशीन चुनेगी। अब,
00:14:28उन्होंने जो कहा वह यह था कि यह नाम,
00:14:30जो वास्तव में मौजूद है। और जाहिर है एक ट्री या कुछ इस तरह का है। यह नाम वह है जिसे उन्होंने प्रस्तुति के लिए बस इस्तेमाल किया था। उन्होंने वास्तव में कभी भी इस प्लान के लिए ह्यूमन रीडेबल नाम का उपयोग नहीं किया,
00:14:42जैसे वन 45 जो मैंने यहां लिखा है या कुछ और। यह वास्तव में किसी चीज़ का हैश था। तो यह वास्तव में ऐसा होगा,
00:14:48आप जानते हैं,
00:14:49ज़ीरो ए एफ ई वन,
00:14:50टू,
00:14:50आप जानते हैं,
00:14:51नाइन ए या कुछ इस तरह का,
00:14:52है ना। वास्तव में वहां क्या होगा। तो अगर आप जाकर देखते,
00:14:55तो आपको ह्यूमन रीडेबल नाम नहीं दिखाई देता,
00:14:58या कम से कम उस समय,
00:14:59आपको नहीं दिखता,
00:15:00मुझे लगता है आपको प्लान वन 45 जैसा नहीं दिखता। आपको बस वही दिखेगा। और इसलिए विचार यह था,
00:15:05ठीक है,
00:15:05एक यूज़र इसे उपयोग करने जाता है। वे इस नाम को क्वेरी करते हैं रूट 53 उन्हें यहां की तरह निर्देशित करेगा। और यह चीज़ किसी तरह का लोड बैलेंसिंग ट्री है जिसे रूट थ्री उपयोग कर सकता है जो आपको वहां पहुंचने की अनुमति देगा जहां आपको जाने की ज़रूरत है। है ना। वे आपको एक वास्तविक मशीन देंगे जिस पर आप अंततः ट्रैफ़िक भेज सकते हैं। फिर से,
00:15:25उन्होंने उसमें से कुछ भी वर्णित नहीं किया। तो मुझे कोई अंदाज़ा नहीं है कि उसमें से कुछ कैसे काम करता है। मैंने कभी भी रूट 53 को छुआ या उपयोग नहीं किया है। तो मुझे कोई अंदाज़ा नहीं है,
00:15:35लेकिन हम बस यह मान लेंगे कि ऐसा होता है क्योंकि इस बग के लिए यह मायने नहीं रखता।
00:15:41हमारे पास एक AWS हीरो है। तो अगर आप हैं,
00:15:43अगर आप भ्रमित हैं,
00:15:44तो आप हमेशा एडम से पूछ सकते हैं और उनके पास शायद और अंतर्दृष्टि हो। मेरा मतलब है,
00:15:49हां,
00:15:49इसके लिए जाएं।
00:15:50खैर,
00:15:51रूट 53 में बहुत सारे अलग-अलग तरीके हैं जिनसे आप ट्रैफ़िक को विभाजित कर सकते हैं। तो हां,
00:15:54वेटेड उनमें से एक है। और यह वैसा ही लगता है जैसा उन्होंने वर्णित किया।
00:15:57तो किसी तरह उन्होंने इन रिकॉर्ड्स को उसके साथ सेट किया है। और उन्होंने नहीं बताया कि कैसे,
00:16:01लेकिन कुछ,
00:16:02कुछ ट्री फॉर्मेट में ऐसा किया। मेरा अनुमान है कि वहां एक वेटेड जैसा है,
00:16:05जैसे ट्री में वेटेड जैसा है जैसे शीर्ष पर कुछ वेट हैं जो और अधिक वेट्स में शाखाएं बनाते हैं या कुछ इस तरह का,
00:16:10क्योंकि इसके लिए इससे निपटना आसान है क्योंकि उनमें से बहुत सारे हैं या कुछ।
00:16:14कौन जानता है?
00:16:15वैसे भी,
00:16:15मुझे कोई अंदाज़ा नहीं है। बात यह है कि,
00:16:17यह वही है जो सामान्य रूप से होना चाहिए।
00:16:20अब,
00:16:20इसे यहां प्लान 145 क्यों कहा जाता है,
00:16:23भले ही यह वास्तव में कुछ हैश कोड होता,
00:16:25लेकिन वे इसे प्लान 145 की तरह संदर्भित करते हैं,
00:16:28लोड बैलेंसिंग,
00:16:29जैसा कि आप कल्पना कर सकते हैं,
00:16:31काफी निरंतर होनी चाहिए क्योंकि DynamoDB मशीनें हर समय कुछ न कुछ कर रही होती हैं। वे अधिक ओवरलोडेड हो रही हैं। मशीनें डाउन हो रही हैं या क्रैश हो रही हैं या कौन जानता है क्या,
00:16:42है ना?
00:16:43हो सकता है कि कुछ ऑफ़लाइन किया जा रहा हो। नई क्षमता जोड़ी जा सकती है। और इसलिए इन चीज़ों को लगातार अपडेट करना पड़ता है,
00:16:51हर समय। तो यह मुख्य API एंडपॉइंट जिससे आप कनेक्ट करते हैं,
00:16:55उसके द्वारा इंगित किए जाने वाले ट्री को लगातार समायोजित करना पड़ता है। और इसलिए वे इसे जिस तरह से करते हैं वह यह है कि वे एक और ट्री बनाते हैं,
00:17:04वह ट्री जिस पर वे जाने वाले हैं,
00:17:07है ना?
00:17:07वे जैसे,
00:17:08आप जानते हैं,
00:17:09प्लान 146 या कुछ ऐसा बनाते हैं। और वे यहाँ पूरा ट्री बनाते हैं। और फिर जब वे तैयार होते हैं,
00:17:15जैसे जब यह ट्री तैयार हो जाता है,
00:17:17तो वे इसे लेते हैं,
00:17:18आप जानते हैं,
00:17:19यह रिकॉर्ड यहाँ,
00:17:20और इसे उस वाले की ओर इंगित करने की बजाय,
00:17:23वे इसे इस वाले की ओर इंगित करते हैं,
00:17:26ठीक है?
00:17:26तो आप नया वाला बनाते हैं,
00:17:28और वे सिर्फ उस नाम को बदलकर उस पर चले जाते हैं। अब,
00:17:31किसी कारण से,
00:17:32और यह कारण वास्तव में समझाया नहीं गया है।
00:17:36उन्होंने जिस तरह से उस प्रक्रिया को सेट किया है,
00:17:39उन्होंने इसे दो हिस्सों में विभाजित किया है। एक चीज़ है जिसे प्लानर कहा जाता है,
00:17:44जो मूल रूप से यह पता लगाता है कि नए ट्री को कैसा दिखना चाहिए। तो आप कल्पना कर सकते हैं कि प्लानर नामक कोई मशीन है। और मुझे नहीं पता कि यह वास्तव में एक मशीन है या यह सिर्फ किसी मशीन पर चल रही प्रक्रिया है जो अन्य चीज़ें चला रही है,
00:17:59कौन जानता है। लेकिन प्लानर नामक कोई चीज़ है। और जहाँ तक मैं समझ सका,
00:18:03केवल एक ही है,
00:18:04मतलब सिर्फ एक प्लानर है जो वहाँ बैठता है और यह पता लगाता है कि नया प्लान कैसा दिखना चाहिए जिस पर हम स्विच करने जा रहे हैं।
00:18:13और यह लगातार ऐसा कर रहा है। तो यह प्लान 145 जेनरेट करता है,
00:18:17फिर यह प्लान 146 जेनरेट करता है,
00:18:20फिर यह 147,
00:18:21148,
00:18:219,
00:18:2210 जेनरेट करता है,
00:18:23आप जानते हैं,
00:18:24ब्ला,
00:18:25ब्ला,
00:18:25ब्ला,
00:18:26ब्ला,
00:18:26ब्ला,
00:18:27ठीक है?
00:18:27और यह अनंत काल तक प्लान निकालता रहता है,
00:18:31क्योंकि यही इसका काम है। अब,
00:18:33यह वास्तव में कभी भी उन्हें बनाता नहीं है,
00:18:36जाहिरा तौर पर। इसका काम उन्हें Route 53 में बनाना नहीं है। इसका काम सिर्फ यह पता लगाना है कि वे कैसे होंगे अगर कोई उन्हें Route 53 में डाले। फिर उनके पास तीन एनैक्टर हैं।
00:18:50ये एनैक्टर प्लानर से प्लान लेते हैं,
00:18:58और वे इसे Route 53 में डालते हैं।
00:19:06क्या यह समझ में आता है?
00:19:08अब,
00:19:08एक प्लानर,
00:19:09जहाँ तक मैं उच्चारण समझता हूँ,
00:19:11तीन एनैक्टर। इसका कोई स्पष्टीकरण नहीं था कि ऐसा क्यों होगा। उन्होंने कहा कि तीन एनैक्टर होने का कारण यह है कि यह फॉल्ट टॉलरेंट होना चाहिए,
00:19:19जैसे अगर उनमें से एक डाउन हो जाए या कुछ। लेकिन उन्होंने कभी यह नहीं समझाया कि आपको तीन प्लानर की आवश्यकता क्यों नहीं होगी,
00:19:26क्योंकि अगर प्लानर डाउन हो जाए,
00:19:28तो एनैक्टर के पास लागू करने के लिए कुछ नहीं है। तो यह वास्तव में कोई मतलब नहीं बनाता था। तो चीज़ में इस बारे में कोई स्पष्टीकरण नहीं था कि यह संरचना इस तरह क्यों दिखती है। यह वास्तव में उतना महत्वपूर्ण नहीं है कि बग इस तरह दिखता है,
00:19:42हालांकि यह एक तरह से है,
00:19:44जैसा कि हम बाद में देखेंगे। तो मैं इस तथ्य से थोड़ा हैरान था कि उन्होंने इसे उचित नहीं ठहराया,
00:19:49लेकिन ठीक है। तो उम्मीद है कि यह समझ में आता है। हमारे पास एक प्लानर है। हमारे पास तीन एनैक्टर हैं। एनैक्टर सभी इस प्लान को लागू करने की कोशिश कर रहे हैं। अब,
00:19:59यहाँ जो होता है वह यह है कि,
00:20:01फिर से,
00:20:01कारणों के लिए कि प्रस्तुति में उन्होंने जो एकमात्र चीज़ कही वह यह थी कि यह इसके बारे में तर्क करना आसान बनाता है। यह केवल इसके बारे में जानकारी है। उन्होंने कहा कि यह इसके बारे में तर्क करना आसान बनाता है। क्योंकि यह इसके बारे में तर्क करना आसान बनाता है,
00:20:16ये एनैक्टर सीरियलाइज़ेशन का उपयोग करते हैं। तो उनके सिर्फ रिकॉर्ड बनाने की कोशिश करने के बजाय,
00:20:22और यदि रिकॉर्ड पहले से ही हैं,
00:20:24तो बस उन्हें नहीं बनाना या कुछ,
00:20:26दूसरे शब्दों में,
00:20:27मेरे पास तीन लोग चल रहे हैं।
00:20:29हम सभी बनाना चाहते हैं,
00:20:31आप जानते हैं,
00:20:32मान लीजिए यह शीर्ष स्तर का रिकॉर्ड,
00:20:34plan146.ddb.aws,
00:20:35ठीक है?
00:20:36हम सभी यही करने की कोशिश कर रहे हैं। हम में से एक पहले यह करता है। अगला व्यक्ति इसे करने की कोशिश करता है,
00:20:43और यह पहले से ही वहाँ है या कुछ और,
00:20:45है ना?
00:20:45हम सभी एक ही रिकॉर्ड बनाने की कोशिश कर रहे हैं। तो सिद्धांत रूप में,
00:20:49हमारे पास बस तीन लोग बेतरतीब ढंग से योजना के जिस भी हिस्से पर वे काम करने की कोशिश कर रहे हैं,
00:20:55उस पर हथौड़े मार सकते हैं,
00:20:57और सिद्धांत रूप में यह सब काम करना चाहिए,
00:20:59है ना?
00:21:00और मुझे कुछ हद तक यह आभास हुआ,
00:21:01हालाँकि आपने खुलकर नहीं कहा,
00:21:03मुझे प्रस्तुतकर्ता से यह आभास हुआ कि वह मेरी अभी कही बात से सहमत होंगे,
00:21:07यानी कि वे उन्हें मनमाने ढंग से चलवा सकते थे और यह ठीक होना चाहिए था या होना चाहिए। लेकिन,
00:21:13उन्होंने कहा,
00:21:14वे इसके बारे में सोचना आसान बनाने के लिए क्रमबद्धता का उपयोग करते हैं। इसका मतलब यह है कि इन एनैक्टर्स को बस इस तरह हथौड़े मारने के बजाय,
00:21:22वे जो करते हैं वह यह है कि वे जिस भी एंडपॉइंट को अपडेट करने की कोशिश कर रहे हैं उसके लिए एक लॉक हासिल करने का प्रयास करते हैं। तो दूसरे शब्दों में,
00:21:31अगर यह व्यक्ति इनमें से किसी एक को अपडेट करने की कोशिश कर रहा है,
00:21:35और मुझे यह आभास हुआ कि यह था अगर आप इसे अपडेट करने की कोशिश कर रहे हैं,
00:21:39लेकिन यह हो सकता है अगर आप इसे अपडेट करने की कोशिश कर रहे हैं,
00:21:43या यह दोनों पर हो सकता है। अगर मुझे सही से याद है,
00:21:46तो उन्होंने वास्तव में 100% नहीं कहा कि लॉकिंग कहाँ हो रही थी। लेकिन लॉकिंग उनके द्वारा होती है,
00:21:52ठीक है,
00:21:53मैं एक लॉक बनाने जा रहा हूँ जो एक DNS रिकॉर्ड है। और इस तथ्य का उपयोग करके कि Route 53 के पास एक एटॉमिक का विचार है,
00:22:00जो है,
00:22:00आप जानते हैं,
00:22:01मैं दो चीजें कर सकता हूँ और अगर वे दोनों सफल नहीं होंगे,
00:22:05तो यह दोनों में से कोई भी नहीं करेगा।
00:22:08उन्होंने मूल रूप से एक लॉकिंग सिस्टम बनाया जो Route 53 के माध्यम से लॉक करता है। तो Route 53 के DNS रिकॉर्ड वास्तव में लॉक रिकॉर्ड हैं,
00:22:16अगर इसका कोई मतलब बनता है। क्या मैं एक त्वरित सवाल पूछ सकता हूँ?
00:22:20हाँ। आपने कहा कि यह क्रमबद्धता के माध्यम से ऐसा करता है?
00:22:24मुझे ठीक से समझ नहीं आया कि इसका क्या मतलब है। क्योंकि मुझे लगा कि क्रमबद्धता सिर्फ एक मेमोरी से एक अलग मेमोरी प्रतिनिधित्व में परिवर्तित करना है। मुझे खेद है,
00:22:33अलग क्रमबद्धता। तो हाँ,
00:22:34वह क्रमबद्धता है। इस मामले में,
00:22:36हमारा मतलब शाब्दिक रूप से लौकिक क्रमबद्धता है,
00:22:39यानी वे चाहते थे कि इन एनैक्टर्स के पास किसी प्रकार का एक तरीका हो जिसमें वे अपने व्यवहार को मनमाना होने के बजाय एक क्रम में व्यवस्थित करें। और जिस तरीके से उन्होंने ऐसा किया वह लॉकिंग था। तो क्या होगा,
00:22:51यह व्यक्ति बस जो कुछ भी करने जा रहा है वह करने के बजाय,
00:22:54जैसे,
00:22:54ठीक है,
00:22:55मैं जाने वाला हूँ,
00:22:56मैंने यह समाप्त कर लिया है,
00:22:58मैं अब इस व्यक्ति को प्लान 146 की ओर इशारा करने जा रहा हूँ। ऐसा करने के बजाय,
00:23:02यह इस तरह एक लॉक हासिल करने का प्रयास करता है,
00:23:05है ना?
00:23:05और अगर उसे लॉक नहीं मिलता है,
00:23:07तो यह परिवर्तन नहीं करेगा। तो इनमें से केवल एक एनैक्टर किसी भी समय इसे अपडेट करने की प्रक्रिया में हो सकता है। क्या यह समझ में आता है?
00:23:15हूँ हूँ। अब फिर से,
00:23:16वास्तव में वे इसके साथ क्या करने की कोशिश कर रहे थे,
00:23:19इसकी कभी व्याख्या नहीं की गई। उन्होंने बस कहा कि इसके बारे में सोचना आसान हो जाता है और इसे वहीं छोड़ दिया। तो मुझे नहीं पता कि उन्हें क्यों लगा कि यह एक सुधार था। और मज़ेदार बात यह है कि यही वह चीज़ है जो बग को उजागर करती है। तो यह एक सुधार नहीं था। अगर कुछ भी हो,
00:23:35तो यह शायद बुरा था। लेकिन तो Casey,
00:23:37क्या आप कह रहे हैं कि उनके पास ऐसा नहीं है,
00:23:39उनके पास कोई अच्छा कारण नहीं है कि वे कह रहे हैं कि हम एनैक्टर्स को लगभग एक समय में एक चलाने जा रहे हैं?
00:23:45उनके पास तीन एनैक्टर क्यों हैं,
00:23:47यह मेरी समझ में नहीं आता। जैसे,
00:23:49उनके पास सिर्फ एक क्यों नहीं है?
00:23:51वे बस यह नहीं कहते। हम नहीं जानते क्यों। और उन्होंने वास्तव में यह समझाया नहीं,
00:23:56जैसे,
00:23:56मैंने वास्तव में इस बात की कोई व्याख्या नहीं सुनी कि आपके पास तीन समवर्ती एनैक्टर कैसे हैं। आप उम्मीद करते हैं कि वे डाउन हो सकते हैं,
00:24:04यही कारण है कि आपके पास तीन हैं।
00:24:07सही। लेकिन वे एक लॉक ले रहे हैं। तो क्या होता है अगर यह व्यक्ति लॉक लेता है और फिर डाउन हो जाता है?
00:24:13जैसे,
00:24:14मुझे इसके लिए भी कोई स्पष्टीकरण नहीं सुनाई दिया। तो यह सब मेरे लिए बहुत भ्रमित करने वाला था। जैसे मैं,
00:24:20मैं,
00:24:20मैं इसके बारे में शिकायत नहीं कर रहा हूँ जो हम यहाँ बात कर रहे हैं,
00:24:24क्योंकि यह मुद्दे के लिए महत्वपूर्ण नहीं है। लेकिन एक प्रस्तुति के रूप में,
00:24:29मेरे पास बहुत सारे सवाल थे। जैसे मैं सोच रहा था,
00:24:31मुझे समझ नहीं आ रहा कि आपने यह सब पूरी तरह से ईमानदारी से क्यों किया। सही। और शायद यह,
00:24:36फिर से,
00:24:37इसका एक हिस्सा सिर्फ यह हो सकता है कि मैं AWS सेवाओं का उपयोग नहीं करता। यह हो सकता है कि इनमें से कुछ चीजें स्पष्ट होतीं यदि आप कोई ऐसे व्यक्ति हैं जो नियमित रूप से Route 53 या कुछ का उपयोग करते हैं,
00:24:48आप ऐसे होंगे,
00:24:49ओह,
00:24:50यह इसलिए है क्योंकि लॉक को एक टाइमआउट पर सेट किया जा सकता है या मेरा मतलब है,
00:24:54मुझे नहीं पता। सही। लेकिन वैसे भी,
00:24:56तो हाँ,
00:24:56तो वे ऐसा कर रहे हैं। और जो होता है,
00:24:59इसके लिए,
00:24:59जो चीज़ बग को उजागर करती है वह यह है कि क्या होता है ये एनैक्टर्स,
00:25:03जब उन्हें लॉक नहीं मिलता,
00:25:04वे बस एक बैक ऑफ की तरह करते हैं,
00:25:06सही?
00:25:07वे मूल रूप से बस ऐसे होंगे,
00:25:08ठीक है,
00:25:09मुझे प्रतीक्षा करने दो और मैं फिर से कोशिश करूँगा। तो एक एक्टर,
00:25:12यह एक एक्टर लॉक प्राप्त करने की कोशिश करता है,
00:25:15लेकिन किसी और के पास पहले से ही लॉक है। तो वह बस थोड़ी देर इंतजार करता है। वह फिर से लॉक प्राप्त करने की कोशिश करता है। यही होगा। सही। और उन्होंने कहा कि क्या हुआ कि उन्हें एक पैथोलॉजिकल केस मिला,
00:25:26उद्धरण चिह्नों में,
00:25:27जहाँ एनैक्टर्स में से एक है,
00:25:29आप जानते हैं,
00:25:30ने कुछ योजना लागू की है। और वह योजना,
00:25:32मान लीजिए काफी पुरानी थी। मुझे लगता है कि उन्होंने 110 का उपयोग एक उदाहरण के रूप में किया जो उन्होंने इस्तेमाल किया। तो इसने योजना 110 लागू की। और यह चाहता है,
00:25:41आप जानते हैं,
00:25:42यह ऐसा है,
00:25:42मुझे API को मेरे 110 की ओर इशारा करने के लिए सेट करना है,
00:25:46dynamodb.use.one या जो भी हो,
00:25:47को अपडेट करने के लिए लॉक प्राप्त करने की कोशिश करता है और विफल हो जाता है क्योंकि कोई और योजना 111 या ऐसा कुछ लागू कर रहा है। सही। या योजना 109 एक पिछली योजना हो सकती थी। तो अन्य एनैक्टर्स इसे कर रहे हैं। यह ऐसा नहीं कर सकता। यह पीछे हट जाता है। सही।.
00:26:02और याद रखें यह एक एक्टर यहाँ है,
00:26:04हम 110 पर हैं। यह कोशिश कर रहा है,
00:26:05यह वास्तव में इसे लागू करना चाहता है।
00:26:07यह फिर से कोशिश करता है। किसी और के पास लॉक है। अब यह फिर से कोशिश करता है,
00:26:12अभी भी लॉक है। यह व्यक्ति 110 पर बैठा है,
00:26:14बेताबी से लागू करने की कोशिश कर रहा है। यह ऐसा नहीं कर सकता। जाहिर है यह इतनी बार हुआ कि अन्य एनैक्टर्स और योजनाकार इस पूरे समय नई योजनाएँ बना रहे हैं। सही।
00:26:23अन्य एनैक्टर्स,
00:26:24वे 145 या कुछ और 146 तक पहुँच जाते हैं,
00:26:26वे ऐसी योजनाओं को लागू कर रहे हैं जो 110 से काफी आगे हैं। सही। और यह आदमी अभी भी रुका हुआ है क्योंकि वह बदकिस्मती से कभी लॉक नहीं पाता। सही। अंत में,
00:26:36किसी बिंदु पर जैसे योजना 145 पहले से ही किसी अन्य एनैक्टर द्वारा लागू की जा चुकी है और उस ओर इशारा किया गया है और वह सब,
00:26:44योजना 110,
00:26:44यह निष्क्रिय अभी भी ऐसा करने की कोशिश कर रहा है अंत में लॉक प्राप्त करता है। मेरा मतलब है,
00:26:50यह ऐसा है,
00:26:51हाँ। और इसलिए फिर वह कहता है,
00:26:53ठीक है,
00:26:53हम अब 110 की ओर इशारा कर रहे हैं। हाँ। सही।
00:26:58तो अब यह एक बहुत पुरानी बासी योजना पर है,
00:27:00लेकिन यह वास्तव में कोई समस्या नहीं होनी चाहिए। सही।
00:27:03क्योंकि अंततः अगली बार जब किसी एनैक्टर के पास कुछ होगा,
00:27:05तो यह बहुत बाद की योजना होने वाली है।
00:27:07वे बस योजना लागू करेंगे,
00:27:08आप जानते हैं,
00:27:09146 या सात या आठ या जो भी हो। और हम इसे इस पर वापस इशारा करेंगे और हम एक ताज़ा योजना पर वापस आ गए हैं। तो सभी के पास कुछ मिनटों के लिए खराब लोड बैलेंसिंग होगी,
00:27:17लेकिन फिर यह ठीक हो जाएगी। सही। उनके पास कम से कम कुछ मिनटों के लिए खराब लोड बैलेंसिंग थी।
00:27:22सही। हाँ। सच। खैर,
00:27:24यह उससे बहुत बदतर है। यही होना चाहिए था। सही।
00:27:30मतलब यह कि वे उम्मीद करेंगे कि यह इस तरह काम करे। ठीक है। समस्या यह है कि,
00:27:35वे भी नहीं चाहते थे कि Route 53 इन सभी रिकॉर्ड्स से भर जाए। क्योंकि अगर वे उन्हें बस वहीं छोड़ देते,
00:27:42तो अंत में तीन महीने के बाद,
00:27:44आपके पास लगभग 8 बिलियन रिकॉर्ड्स होंगे जो आपने Route 53 में भर दिए प्रत्येक के लिए,
00:27:49आप जानते हैं,
00:27:50हर कुछ मिनटों में आप भार और सामान के इस बड़े वृक्ष को डाल रहे हैं। वे ऐसे थे,
00:27:55ठीक है,
00:27:56किसी बिंदु पर हमें बस इन योजनाओं को साफ कर देना चाहिए।
00:28:00तो एनैक्टर्स उन प्लान्स को भी खोजते हैं जो एक निश्चित समय से पुराने होते हैं। और अगर वे एक निश्चित समय से पुराने हैं,
00:28:07तो वे उन्हें डिलीट कर देते हैं। तो जो हुआ वह यह था कि उन्होंने प्लान 110 की ओर इशारा किया। यह एनैक्टर आखिरकार लॉक प्राप्त करता है। यह 110 की ओर इशारा करता है। एक और एनैक्टर ऐसा है,
00:28:19ओह,
00:28:19वाह,
00:28:20110,
00:28:20यार,
00:28:21वह बहुत पुराना है। हमें उससे छुटकारा पाना चाहिए और उसे डिलीट कर देता है। तो अब DynamoDB us-east-1.api.aws एक ऐसे रिकॉर्ड की ओर इशारा कर रहा है जिसे रिज़ॉल्व नहीं किया जा सकता। सही। यह बस कुछ ऐसा है,
00:28:33वास्तव में,
00:28:34फिर से,
00:28:35यह प्लान 110 जैसा नहीं दिखेगा। यह OAFE129A जैसा दिखेगा,
00:28:38कुछ हैश,
00:28:39डॉट,
00:28:39सही,
00:28:40DDB.aws। लेकिन यह उस नाम की ओर इशारा कर रहा है। और अगर आप उस नाम से पूछते हैं,
00:28:45तो आपको कुछ नहीं मिलता।
00:28:46तो उस बिंदु पर क्या होगा कि हर कोई जो सामान भेजने के लिए एक एंडपॉइंट प्राप्त करने की कोशिश कर रहा था,
00:28:51उसे मूल रूप से एक अनरिज़ॉल्वेबल नाम वापस मिलेगा। सही। और मुझे वास्तव में नहीं पता कि Route 53 में क्या होता है जब ऐसा होता है,
00:28:58लेकिन आपको मूल रूप से कुछ ऐसा वापस मिलेगा जिसे आप या तो उपयोग नहीं कर सकते थे या IP के लिए सिर्फ गड़बड़झाला,
00:29:03कौन जानता है। लेकिन जो भी हो,
00:29:05अगर आपने वास्तव में इसका उपयोग करने का प्रयास किया,
00:29:07तो आपको कोई प्रतिक्रिया नहीं मिलने वाली थी। सही।
00:29:10दिलचस्प। क्या यह इसलिए है क्योंकि AWS पर्याप्त Rust का उपयोग नहीं करता है क्योंकि यह स्पष्ट रूप से एक use-after-free बग है?
00:29:17और इसलिए मुझे लगता है कि Rust ने इसे हल कर दिया होता, सही?
00:29:21अगर आप Route 53 को पूरी तरह से Rust में फिर से लिखते,
00:29:24तो स्पष्ट रूप से,
00:29:25ये सभी समस्याएं वहां नहीं होतीं। नहीं,
00:29:27विशिष्ट होने के लिए,
00:29:28मुझे लगता है कि प्रेजेंटेशन में,
00:29:30उन्होंने कहा था,
00:29:31Rust के बारे में नहीं,
00:29:32बल्कि उन्होंने कहा था कि विशेष रूप से क्या होगा,
00:29:35जो मुझे लगता है कि जब आपने इस चीज़ या या तो इस चीज़ या इस चीज़ के लिए पूछा,
00:29:40मुझे नहीं पता कि वे किसका उल्लेख कर रहे थे,
00:29:42क्योंकि मुझे ठीक से याद नहीं है,
00:29:44आपको बस एक ऐसी चीज़ वापस मिलेगी जो कहती है कि कोई रिकॉर्ड नहीं मिला। तो यही अंतिम परिणाम है जो होगा,
00:29:50चाहे यह इसके लिए पूछने से हो या उसके लिए पूछने से,
00:29:53मुझे यकीन नहीं है,
00:29:54लेकिन बस कोई रिकॉर्ड नहीं मिला वापस मिलेगा। यही वह है जो आपको प्राप्त हुआ होगा जब आप उस API को कॉल करने की कोशिश कर रहे थे। तो जो भी लाइब्रेरी आप DynamoDB का उपयोग करने के लिए उपयोग कर रहे थे,
00:30:05यह बस ऐसा होगा,
00:30:06अरे,
00:30:06कोई रिकॉर्ड नहीं मिला,
00:30:08भाई। माफ़ करना। सही। तो यह,
00:30:09अगर आप इंटरनेट पर किसी से भी पूछें,
00:30:11सही,
00:30:12वे सभी ऐसे हैं,
00:30:13हां,
00:30:13उन्होंने बग को समझाया। यही बग है। बग यह है कि एक रेस कंडीशन थी,
00:30:17सही?
00:30:17हर कोई,
00:30:18क्योंकि हर कोई,
00:30:19जैसे ही आप रेस कंडीशन कहते हैं,
00:30:21हर किसी का दिमाग बंद हो जाता है। वे ऐसे होते हैं,
00:30:23ओह,
00:30:24ठीक है,
00:30:24ठीक है,
00:30:25यह एक रेस कंडीशन थी। हो गया। यहां देखने के लिए कुछ नहीं है,
00:30:28सही?
00:30:29तो वे ऐसे हैं,
00:30:30यह एक रेस कंडीशन है। वे इसे समझाते हैं। यह ऐसा है,
00:30:33नहीं,
00:30:33उन्होंने इसे नहीं समझाया। क्योंकि अगर आप सोचते हैं कि यहां क्या होगा,
00:30:37इसके तुरंत बाद,
00:30:38सभी को यह मिल रहा है,
00:30:39यह एक नया एनैक्टर है। एक नया एनैक्टर बस एक नया लागू करेगा,
00:30:43सही?
00:30:43और इसलिए बग, सही, यह है कि ऐसा क्यों नहीं हुआ?
00:30:46यही वास्तविक RCA है जिसे मैं देखना चाहता था कि अगला एनैक्टर आकर इसे ठीक क्यों नहीं किया?
00:30:51क्या मैं कुछ और बाहर फेंक सकता हूं?
00:30:53क्या यह भी एक बग नहीं होगा?
00:30:54जैसे एक रिकॉर्ड इतना पुराना क्यों लिखें जिसे तुरंत डिलीट किया जाना चाहिए?
00:30:59खैर,
00:30:59ऐसा नहीं था यह था क्योंकि यह था यह इस आदमी ने इसे काफी समय पहले लिखा था। और यह वजन था। खैर,
00:31:04मेरा मतलब है,
00:31:05अगर आप पूछ रहे हैं,
00:31:06तो उन्होंने बेहतर कोड के साथ एक एनैक्टर क्यों नहीं लिखा?
00:31:10हां, यह बहुत अच्छा है।
00:31:11ठीक है,
00:31:12उचित है। ऐसा लगता है कि अगर आप किसी ऐसी चीज़ में अपडेट कर रहे हैं जिसे तुरंत डिलीट किया जाना चाहिए,
00:31:17तो क्या यह ऐसा नहीं है कि यह ऐसा लगता है कि वहीं समस्या है। आपने बहुत पहले कुछ गलत किया है। हां,
00:31:22भले ही यह वास्तव में इस चीज़ की सैद्धांतिक संरचना को ठीक नहीं करता है,
00:31:25इस आदमी में एक सरल जांच जब वह लॉक पर बैक ऑफ करने के बाद समाप्त हो गया,
00:31:29तो उसे शायद यह देखने के लिए जांचना चाहिए कि क्या वह इसे किसी ऐसी चीज़ पर सेट करने वाला है जिसे वह डिलीट कर देगा यदि वह अपना डिलीशन कोड चला रहा होता तो शायद एक अच्छा सुरक्षा उपाय है। लेकिन हां,
00:31:39तो 100% उससे सहमत हूं। ठीक है,
00:31:40लेकिन एक एनैक्टर ने उस रिकॉर्ड को प्राप्त करने के लिए वास्तव में,
00:31:43वास्तव में कठिन काम किया। लंबे समय तक प्रतीक्षा की। ओह,
00:31:46यह अपने Pokemon कार्ड प्राप्त करने जा रहा है।
00:31:49किसी ने भी कभी इंतजार किया। तो बस उसे रिकॉर्ड लिखने दो। ठीक है। तो,
00:31:53तो मैं इसके बारे में सुनना चाहता हूं।
00:31:56दुर्भाग्य से,
00:31:57अगर आप प्रेजेंटेशन देखें और RCA देखें,
00:32:01तो यह कहीं नहीं मिलता।
00:32:03प्रेजेंटेशन में कम से कम एक 12 सेकंड का छोटा सा हिस्सा है जहाँ यह बताया गया है कि बग लगभग कहाँ होगा। तो मैं समझाता हूँ कि वह क्या है। तो जाहिर तौर पर इसके साथ जो होता है,
00:32:20वो यह कि जब आप DynamoDB US East One करते हैं,
00:32:25लेकिन जब आप उसे अपने प्लान की ओर पॉइंट करते हैं,
00:32:30तो आप साथ ही एक और ऑपरेशन भी करते हैं। और वह ऑपरेशन है रोलबैक सेट करना।
00:32:40मुझे लगता है यह DD है। क्या यह DDB dot rollback dot AWS है?
00:32:45मुझे ठीक से याद नहीं कि यहाँ यह क्या है।
00:32:49एक रोलबैक रिकॉर्ड होता है। यह उस रिकॉर्ड को जो भी पुराना प्लान था उस पर सेट कर देता है। तो अगर हम यहाँ 145 पर पॉइंट कर रहे थे,
00:32:58और अब हम 110 पर पॉइंट करने जा रहे हैं,
00:33:01तो यह पुराना एक्टर्स,
00:33:02जैसे मैं 110 पर जा रहा हूँ,
00:33:04यह इसे सेट करने की कोशिश करता है,
00:33:07जो भी यह नाम अभी था,
00:33:08उसे ले लेता है और उस नए को,
00:33:10यानी उस नाम को जो प्लान 145 रहा होगा,
00:33:13उसे ले जाता है ताकि रोलबैक एड्रेस पुराने प्लान की ओर पॉइंट करे।
00:33:18ठीक है। और यह सिर्फ डिबगिंग के लिए है। या,
00:33:20आप जानते हैं,
00:33:21यह मूल रूप से सिर्फ ऑपरेटर की सुविधा के लिए है,
00:33:24है ना?
00:33:24अगर वे पिछले प्लान पर रोलबैक करना चाहते हैं या ऐसा कुछ,
00:33:28या अगर आप बस यह जानना चाहते हैं कि पिछला प्लान क्या था,
00:33:31तो आप इसे यहाँ देख सकते हैं,
00:33:33ठीक है?
00:33:33यह पहला हिस्सा है कि उन्होंने फेलियर के बारे में क्या कहा,
00:33:37मैं यहाँ एक बात बताना चाहूँगा कि यह मुझे भी समझ नहीं आया। क्योंकि मैं सोच रहा था,
00:33:42ठीक है,
00:33:42आप मुझे बता रहे हैं कि ये चीज़ें हर मिनट या कुछ ऐसा अपडेट होती हैं। तो इनमें से एक रखने का क्या फायदा?
00:33:48जैसे,
00:33:49जब तक आप लॉग इन भी करेंगे,
00:33:50यह उस वाले से अपडेट हो चुका होगा जिस पर आप रोलबैक करना चाहते थे,
00:33:54किसी नई चीज़ पर। वह वास्तव में वह प्लान है जो आप नहीं चाहते क्योंकि सब कुछ डाउन हो गया,
00:33:59सही?
00:34:00जैसे, यह है, सही?
00:34:01अगर आप आप यह नहीं चाहते,
00:34:02आप बस इन नामों को एक लिस्ट में चाहते हैं। ताकि आप कह सकें,
00:34:0612:30 बजे यह क्या था?
00:34:07वही वाला, सही?
00:34:08तो यह मेरी समझ में नहीं आया। मुझे सचमुच कोई अंदाजा नहीं है कि यह कभी अच्छा क्यों होगा,
00:34:13सही?
00:34:13यह ऐसा नहीं लगता था कि यह वह काम करेगा जो आप वास्तव में चाहते हैं,
00:34:17जो है समय में एक बिंदु को मार्क करना और कहना,
00:34:20हमें 1 बजे पर वापस जाने की जरूरत है क्योंकि उसके बाद सब कुछ गड़बड़ हो गया,
00:34:24सही??
00:34:26खैर,
00:34:27तो वह मेरी समझ में नहीं आया। लेकिन फिर से,
00:34:29बग के लिए बिल्कुल वहाँ नहीं। तो मैंने नहीं पूछा कि क्यों,
00:34:33मैं बस कह रहा हूँ,
00:34:34ठीक है,
00:34:34वह काम यही करना था। और यह सिर्फ एक वर्जन पर रोलबैक कर सकता है,
00:34:38यही आप कह रहे हैं। हाँ,
00:34:39हालांकि दूसरे ट्रीज़ मौजूद तो हैं। तो आप आसानी से कर सकते थे बस नाम जानकर। तो यह सब है,
00:34:44बस एक ह्यूमन रीडेबल नाम डालना किसी ऐसी चीज़ पर जिसकी आपको लगभग निश्चित रूप से परवाह नहीं है। ठीक है। लेकिन वे वास्तव में वास्तव में इतना सामान स्टोर नहीं कर सकते।
00:34:54केसी,
00:34:54मुझे नहीं लगता कि वे वास्तव में,
00:34:56मुझे नहीं पता,
00:34:57एडम,
00:34:57इस तरह रख सकते हैं,
00:34:59उनके पास वहाँ बहुत स्केल नहीं है,
00:35:01सही?
00:35:01जैसे,
00:35:02वह बहुत सारी लाइनें हैं। अगर मैं होता,
00:35:04तो मैं इसे सिर्फ एक टाइमस्टैम्प बना देता। अगर आप वही चाहते थे,
00:35:08सही?
00:35:08मैं कहता,
00:35:09प्लानर ने कब या इस व्यक्ति ने इस चीज़ को कब पॉइंट किया?
00:35:12जैसे जब आपको लॉक मिला,
00:35:13आप इस नाम को टाइमस्टैम्प में बदल देते हैं,
00:35:16और इसे एक एटॉमिक में अपडेट कर देते हैं। तो फिर आप बस जानते हैं कि अगर मैं 1 बजे पर रोलबैक करना चाहता हूँ,
00:35:22तो मैं बस देखता हूँ कि किसमें टाइमस्टैम्प था,
00:35:25बस आप जानते हैं,
00:35:26सबसे पहला टाइमस्टैम्प,
00:35:27उस समय के बाद नहीं।
00:35:28और वही हम उस समय चला रहे थे। मैं यही करता। ठीक है। लेकिन मुझे नहीं पता। तो मुझे कोई अंदाजा नहीं है कि उन्होंने यह क्यों किया। उन्होंने जो किया वो किया। मैं आप जानते हैं,
00:35:35शायद यह पूरी तरह से समझ आ सकता है। फिर से,
00:35:37मुझे उनके सिस्टम का कोई ज्ञान नहीं है। ये सभी चीज़ें,
00:35:39वे पूरी तरह से समझ आती हैं।
00:35:41तो मैं वास्तव में मैं बस कह रहा हूँ कि मैं उन्हें नहीं समझता। मुझे नहीं वे बुरे विचार नहीं हो सकते,
00:35:45सही?
00:35:45वे अच्छे विचार हो सकते हैं,
00:35:47अगर आप बाकी सिस्टम को समझते। तो खैर,
00:35:50तो जो वे कहते हैं,
00:35:51और हमें बस इतना ही मिलता है कि यह ऑपरेशन,
00:35:54मतलब रोलबैक को पुराने प्लान पर सेट करना जो आप जानते हैं,
00:35:58जो इस मामले में वास्तव में कुछ मामलों में नया रहा होगा,
00:36:02सही?
00:36:02तो यह वास्तव में पहले पॉइंट किया गया प्लान नहीं है,
00:36:06जो पुराना हो सकता है,
00:36:08नया हो सकता है। वह गतिविधि करना।
00:36:11अगर वह योजना अब मौजूद नहीं रही,
00:36:13यानी कि वह इस तरह डिलीट हो गई थी,
00:36:15तो एनैक्टर स्थायी रूप से रुक जाता है। तो हर बार,
00:36:19जैसे एक बार जब आप उस स्थिति में पहुँच जाते हैं जहाँ dynamodb.usc वही वाला है,
00:36:24ठीक.
00:36:25तो हम वे सभी चरणों का क्रम करते हैं जो हमने यहाँ बताया। यह योजना डिलीट हो जाती है।?
00:36:31तो अब यह एक अमान्य यानी रिज़ॉल्व न होने वाले नाम की ओर इशारा कर रहा है,
00:36:34हम plan plan dash 110 को रिज़ॉल्व नहीं कर सकते,
00:36:37जो वास्तव में कुछ हेक्स कोड है। लेकिन जो भी वह था,
00:36:39हम उसे अब रिज़ॉल्व नहीं कर सकते।
00:36:41एक बार जब यह स्थिति सही हो जाती है,
00:36:44तो अगली बार जब कोई एनैक्टर आता है और इसे एक नई योजना की ओर इशारा करने की कोशिश करता है,
00:36:50जो भी वह नई योजना हो,
00:36:52यह नहीं कर सकता - जब यह वास्तव में यहाँ तक पहुँचता है और रोलबैक सेट करने की कोशिश करता है तो यह स्थायी रूप से क्रैश हो जाएगा। इसलिए,
00:37:02तीनों एनैक्टर अब रुक जाएँगे क्योंकि अंततः तीनों एक नई योजना लागू करने की कोशिश करेंगे। वे पहले रोलबैक को जो भी पुरानी योजना थी उसकी ओर सेट करने की कोशिश करेंगे,
00:37:14पाएँगे कि वहाँ कोई योजना नहीं है। और जाहिर तौर पर यह सिर्फ एक हार्ड क्रैश है। ओह,
00:37:20यह पागलपन है। मुझे लगा कि तीन एनैक्टर इसलिए थे ताकि इसमें रिडंडेंसी हो। अब,
00:37:26फिर से,
00:37:26यही कारण है कि मैं ऑनलाइन लोगों से चिढ़ जाता हूँ जो जवाब दे रहे हैं। वे कह रहे हैं,
00:37:32यह एक रेस कंडीशन थी। यह रेस कंडीशन नहीं थी। इसके लिए रेस कंडीशन जरूरी नहीं है। रेस कंडीशन सिर्फ इसलिए है कि आप इस नाम को अनरिज़ॉल्वेबल बनाकर समाप्त हुए। लेकिन अगर आपके पास जो भी कोड था वह बुरी तरह से नहीं किया गया होता,
00:37:49तो यह बस काम कर गया होता।
00:37:52आपको कभी पता नहीं चलता। आपको DynamoDB का एक क्षणिक मिनट का आउटेज हुआ होता या कुछ ऐसा,
00:37:58लेकिन मुझे लगता है कि समय-समय पर DynamoDB के मिनट के आउटेज होते हैं। यह वैश्विक समाचार नहीं है।
00:38:04वैश्विक समाचार इसे स्थायी रूप से नीचे ले जाना है,
00:38:07जो यहाँ हुआ। और जब तक कोई वास्तविक मानव जाकर इसे समझता नहीं है,
00:38:11इसे रीसेट करता है,
00:38:12इन एनैक्टर्स को फिर से चालू करता है,
00:38:14यह बस चला गया। यह स्थायी रूप से बाहर है। तो संभावित रूप से घंटों तक। और यह इस मामले में काफी लंबा था,
00:38:20मुझे लगता है,
00:38:21कि फिर कैस्केडिंग फेल्योर्स हुए। आपको कभी ऐसा नहीं होता। यह सिर्फ एक क्षणिक आउट है। अगर कुछ लोगों को क्षणिक रूप से एक अनरिज़ॉल्वेबल नाम मिला या कोई रिकॉर्ड नहीं मिला,
00:38:30तो वे बस फिर से कोशिश करते। आमतौर पर DNS के साथ,
00:38:33यह ऐसा है जैसे आपका फोन,
00:38:35आप एक सुरंग से गुजरे। बस इतना ही होता।
00:38:37तो मैं जानना चाहता हूँ कि यहाँ कोड कैसा दिखता था?
00:38:40आपने ऐसा कुछ कैसे लिखा कि अगर यह एक मान्य नाम नहीं था,
00:38:44जो स्टैंडअप पर भी नहीं होता,
00:38:45यानी अगर आप इस सिस्टम को शुरू कर रहे थे और ऑपरेटर ने इसे पहले से कॉन्फ़िगर नहीं किया था,
00:38:51तो यह किसी चीज़ की ओर इशारा नहीं करता। यह डिफ़ॉल्ट केस है जिसके साथ आपको लगता है कि आप शुरू करेंगे। तो अगर आप ऐसा करने जा रहे हैं,
00:38:59तो आपको लगता है कि आप बस उस केस को हैंडल करेंगे क्योंकि रोलबैक एड्रेस बस किसी चीज़ की ओर इशारा नहीं कर सकता। बस जो भी यह है उसे ले लीजिए। अगर यह कुछ नहीं है,
00:39:09तो रोलबैक एड्रेस को कुछ नहीं पर सेट करें।
00:39:12हो गया। तो उन्होंने इस कोड को लिखने के तरीके में कुछ वाकई अजीब है। और यही RCA में होना चाहिए था। यही मेरे लिए पूरा बग है। यह सिर्फ सेट ड्रेसिंग है कि हम कैसे इस चीज़ को कुछ नहीं की ओर इशारा करते हुए समाप्त हुए। वही बग हुआ होता अगर किसी ने गलती से इस रिकॉर्ड को डिलीट कर दिया होता। जैसे कोई ऑपरेटर बस ऐसे था,
00:39:32ओह,
00:39:32बकवास,
00:39:33मैंने इसे कुछ नहीं पर सेट कर दिया।
00:39:35प्रेजेंटेशन के अनुसार यही बग हुआ होता। तो मूल कारण रेस कंडीशन नहीं है। रेस कंडीशन एक अलग बात है। क्या इसका कोई मतलब है?
00:39:42जल्दी सवाल। तो मैं वैधानिक रूप से इसके बारे में सोच रहा हूँ। और इसका मतलब है कि जो चीज़ रोलबैक सेट करती है वह शायद किसी तरह के स्ट्रक्ट को मानती है जिसमें कुछ मेमोरी या कुछ पास किया गया है,
00:39:54किसी तरह का एक्सेस करती है। यह विस्फोट हो जाता है। या आपको लगता है कि यह उसी स्टाइल का बग है,
00:40:00जो एक लाइन है जिसने Cloudflare को नीचे ले गया,
00:40:03जो है कि वे बस मान लेते हैं कि यह वहाँ है और इसे अनरैप करते हैं।
00:40:07यह Rust में है। यह मेमोरी सेफ Rust है। इसे अनरैप करता है,
00:40:11विस्फोट करता है।
00:40:13मुझे वास्तव में नहीं पता। मेरा अनुमान,
00:40:14जैसे मेरे दिमाग में,
00:40:15मैं सोच रहा था कि वह कौन सी चीज़ है जो मैं लोगों को बहुत बार करते हुए देखता हूँ जहाँ मैं हमेशा सोचता हूँ,
00:40:21आप ऐसा क्यों करेंगे?
00:40:22लेकिन ऐसा सिर्फ इसलिए है क्योंकि उन्होंने प्रोग्राम करना इसी तरह सीखा है। और मैं सोच रहा था कि अगर आप उन भाषाओं में से किसी एक में लिख रहे हों जो त्रुटि स्थितियों के लिए अपवाद फेंकना पसंद करती हैं,
00:40:32तो यह इसका एक बेहतरीन उदाहरण होगा। तो अगर आपके पास कोई चीज़ थी जहाँ आप सोच रहे थे,
00:40:36ओह,
00:40:36मैं उस DNS रिकॉर्ड को प्राप्त करने गया जिसकी ओर यह चीज़ इशारा करती है।
00:40:40और आम तौर पर एक सामान्य प्रोग्रामिंग वातावरण में,
00:40:43कोई भी वहाँ अपवाद नहीं फेंक रहा है। अगर उन्हें कुछ नहीं मिलता है,
00:40:46तो वे बस कुछ नहीं लौटाते हैं। और फिर जब व्यक्ति ddb.robot.js सेट करने जाता है,
00:40:51तो वे इसे कुछ नहीं पर सेट कर देते हैं,
00:40:53जो कि सही व्यवहार है। जैसे कुछ नहीं बहता है,
00:40:55शाब्दिक रूप से मान कुछ नहीं इस प्रवाह के माध्यम से सही ढंग से बहता है। तो अगर आप इसे लिख रहे थे,
00:41:00चूंकि यह एक मुख्य आधार सेवा है,
00:41:02मान लीजिए आप कुछ ऐसा लिखने की कोशिश कर रहे थे जो दोष सहिष्णु हो,
00:41:05तो आप कभी भी अपवाद फेंकने जैसा कुछ नहीं करेंगे। तो मेरे दिमाग में,
00:41:08मैं सोच रहा हूँ,
00:41:09मुझे लगता है यहाँ क्या होता है कि जब आप इस रिकॉर्ड के लिए पूछते हैं,
00:41:13तो वे बस किसी लाइब्रेरी कॉल या कुछ ऐसा उपयोग करते हैं जो अपवाद फेंकता है जब रिकॉर्ड मौजूद नहीं होता है। और इसने बस एक अपवाद फेंक दिया और अभिनेता समाप्त हो गया। यह मेरा अनुमान है। और मैं इसके बारे में बहुत गलत हो सकता हूँ क्योंकि मैं बस जंगली अनुमान लगा रहा हूँ। लेकिन इसीलिए मैं RCA देखना चाहता हूँ। यह क्या था.
00:41:29यह बिल्कुल वही सामान हो सकता है जिसके बारे में ट्रैश बात कर रहा था। मेरा मतलब है,
00:41:34यह वह सामान हो सकता है जिसके बारे में प्राइम बात कर रहा था। यह वह सामान हो सकता है जो मैंने अभी कहा। यह कुछ भी हो सकता है। और मैं जानना चाहता हूँ क्योंकि यहाँ वास्तविक शिक्षा वहीं होगी। इस रेस कंडीशन से बचना पूरी तरह से महत्वहीन है। यह रेस कंडीशन वहाँ रह सकती थी। और जबकि अंततः इसे ठीक करना महत्वपूर्ण था,
00:41:50उन साल में एक बार पाँच सेकंड के लिए अजीब आउटेज से बचने के लिए या कुछ,
00:41:53यह वास्तव में वह चीज़ नहीं है जिसे हम सबसे अधिक सीखना चाहते हैं। हम सबसे अधिक क्या सीखना चाहते हैं वह यह है कि इस चीज़ को मत लिखो। और हम नहीं जानते कि यह चीज़ क्या थी। तो हम इसे कैसे न लिखें.
00:42:03इसीलिए मुझे लगता है कि यह खराब RCA था। क्या यह समझ में आता है?
00:42:07हाँ। हाँ। ठीक है। AWS का अधिकांश हिस्सा किसमें लिखा गया है,
00:42:10एडम??
00:42:11यह Java था। मैं कहने वाला था कि चैट से किसी ने Scala कहा। उन्होंने कहा कि उन्होंने AWS में सात साल काम किया और उन्होंने कहा कि इसका अधिकांश हिस्सा Scala में लिखा गया है। खैर,
00:42:24यह तकनीकी रूप से अतिरिक्त चरणों के साथ Java है। और यह उन सभी को अंतहीन रूप से क्रोधित करेगा। तो मेरे लिए बस इतना ही है।
00:42:34यह एक ऐसी चीज़ थी जहाँ मैं सोच रहा था,
00:42:35मुझे ऐसा नहीं लगता कि मैंने स्पष्टीकरण देखा। और मुझे वास्तव में लगता है कि यह सुनना महत्वपूर्ण है क्योंकि इस गर्मी के नीचे एक खराब प्रोग्रामिंग अभ्यास था। और मैं जानना चाहता हूँ कि यह क्या था,
00:42:44खासकर इसलिए क्योंकि यह मेरे जैसे लोगों की मदद करता है जब मैं,
00:42:47आप जानते हैं,
00:42:47मैं वास्तव में अभी बहुत अधिक आर्किटेक्चर शिक्षा नहीं देता हूँ,
00:42:50लेकिन किसी बिंदु पर मैं शायद उसमें से कुछ करना चाहूँगा क्योंकि मुझे लगता है कि वहाँ बहुत सारी खराब आर्किटेक्चर है। और इसलिए मैं इन चीज़ों पर ध्यान देने की कोशिश करता हूँ। जैसे कि किस तरह की वास्तुकला संबंधी गलतियाँ लोग कर रहे हैं?
00:43:00और मुझे लगता है कि यह उनमें से एक थी। सही। और इसलिए मैं जानना चाहूँगा। मैं जानना चाहूँगा।
00:43:04हाँ। मुझे लगता है कि मैं कम से कम एक सरल पुनरुत्पादन योग्य उदाहरण की उम्मीद करूंगा कि मैंने पूरी चीज़ को क्यों उड़ा दिया,
00:43:11जैसे एक छोटा सा कोड स्निपेट। तो जैसे,
00:43:13और यह कुछ ऐसा है जो आपने पहले उठाया था,
00:43:15कि हम इस तरह की चीज़ों से कैसे निपटते हैं। जैसे अगर मैं किसी के कोड की समीक्षा कर रहा हूँ और मुझे कुछ अजीब दिखता है,
00:43:22तो मैं हमेशा अपना खुद का एक छोटा सैंडबॉक्स बनाने की पूरी कोशिश करूंगा और अपने सिद्धांत को साबित करूंगा। और फिर वास्तव में उन्हें कोड दिखाऊंगा कि यह शायद इसलिए गलत है। यहाँ एक छोटा,
00:43:32सरल पुनरुत्पादन योग्य चरण है। तो मैं कुछ ऐसा ही उम्मीद करूंगा। और इससे मुझे वास्तव में समझने में भी मदद मिलती है। क्योंकि बहुत से लोग,
00:43:39जैसा कि आपने कहा,
00:43:40वे कुछ ऐसा देखेंगे जो अजीब लगता है,
00:43:42लेकिन मुझे नहीं पता कि यह अजीब क्यों लगता है,
00:43:45लेकिन मैं वहीं नहीं रुक सकता। मुझे वास्तव में इसे बनाना होगा और फिर समझना होगा। तो यही मैं उम्मीद करूंगा। और आप जानते हैं,
00:43:52जैसा कि मैंने कहा,
00:43:53क्राउडस्ट्राइक और गूगल आउटेज बेहतर थे,
00:43:55बस आपको बता रहे थे कि वे ऐसे थे,
00:43:56देखो,
00:43:57यहाँ एक नल पॉइंटर डी-रेफ था,
00:43:59या यह एक आउट ऑफ बाउंड्स ऐरे था क्योंकि हमने सोचा था कि केवल 20 होंगे और हमने कॉन्फिग फाइल में 21 डाल दिए। सही। और जैसे,
00:44:05ठीक है,
00:44:06मुझे पता है कि किस तरह का कोड,
00:44:07आप जानते हैं,
00:44:08उस तरह की समस्या पैदा कर रहा है। सही। और इसके अलावा,
00:44:11इसके अलावा,
00:44:12पहले की एक टिप्पणी की तरह,
00:44:13शाब्दिक रूप से,
00:44:14जहाँ तक मुझे पता है,
00:44:15हर कोई जो रस्ट में प्रोग्राम करता है केवल इसलिए करता है ताकि कभी-कभी जब वे इस तरह की कोई चीज़ देखते हैं,
00:44:21तो वे कह सकें,
00:44:21अच्छा,
00:44:22अगर उन्होंने रस्ट में लिखा होता,
00:44:24तो ऐसा नहीं होता। उन्हें यह टिप्पणी करने के लिए पर्याप्त जानकारी भी नहीं दी गई थी।
00:44:29उन्होंने शायद वैसे भी यह टिप्पणी कर दी होगी,
00:44:32निष्पक्ष रूप से,
00:44:33लेकिन उन्हें यह नहीं दी गई थी। तो आपको आरसीए में एक नियम देना होगा जिसका पालन किया जाना चाहिए कि आपको रस्टेशियन को पर्याप्त जानकारी देनी होगी ताकि वे चाहें तो सही तरीके से कह सकें कि रस्ट में इसे रोका जा सकता था।
00:44:46और यह,
00:44:46हमारे पास वह नहीं है। हम नहीं जानते कि रस्ट में इसे रोका जा सकता था या नहीं।
00:44:51हमें कोई अंदाजा नहीं है। शायद नहीं होता,
00:44:54लेकिन हम नहीं जानते। खैर,
00:44:56केसी,
00:44:56हमारे पास काफी अच्छा मौका है क्योंकि यह संभवतः कभी शिप ही नहीं हुआ होता। तो इसने इसे रोका होता।
00:45:03सच है। हमारे पास शून्य एक्टर होते क्योंकि हम सेट एक्टर्स डिज़ाइन कर रहे होते। हाँ।
00:45:09क्लाउडफ्लेयर इस मामले में वाकई अच्छा काम करता है। वे जाकर कोड की बहुत सारी लाइनें दिखाते हैं और कहते हैं कि यह बिल्कुल वही है जो हो रहा है। यह है,
00:45:17आप जानते हैं,
00:45:18भले ही समस्याएं ऊपर हैं,
00:45:19यह वह लाइन है जो इन सभी पिछली स्थितियों के कारण फट गई। यह मैं रस्ट का मज़ाक उड़ा रहा था अनरैप के साथ,
00:45:25जो वास्तव में सही मायने में समस्या नहीं थी। उह,
00:45:28लेकिन आप जानते हैं,
00:45:29यह बस इस तरह की सभी चीजें होती हैं। तो वे वास्तव में अच्छा काम करते हैं। मुझे आश्चर्य है कि AWS ने इस मामले में कितना खराब काम किया है। खैर,
00:45:36और दूसरी बात यह भी है कि यह उन चीजों में से एक थी जहाँ अब यह मुझे,
00:45:40यह मुझे आप पर अनावश्यक रूप से संदेह करने पर मजबूर करता है,
00:45:43है ना?
00:45:44जब मैं यह पढ़ता हूं,
00:45:45तो मुझे लगता है,
00:45:46क्या तुम कुछ छुपा रहे हो?
00:45:47क्या तुमने वास्तव में यह पता नहीं लगाया कि बग क्या था?
00:45:49तुमने इस रेस कंडीशन के बारे में बहुत बात की,
00:45:51लेकिन तुम्हारी अपनी प्रस्तुति से भी मैं बता सकता हूं कि रेस कंडीशन वास्तव में महत्वपूर्ण नहीं थी। यह बस वही थी जिसने रिकॉर्ड को कुछ नहीं पर सेट किए जाने का कारण बना,
00:45:58लेकिन किसे परवाह है,
00:45:59है ना?
00:46:00यह तो बस ऐसी चीज है जिसे RCA में यह समझाने के लिए डालना अच्छा है कि यह बग अभी क्यों हुआ,
00:46:04किसी और समय के बजाय,
00:46:05लेकिन यह बग नहीं है। तो मुझे यह अजीब लगता है। जब मुझे एक RCA दिखाई देती है जो बग के बारे में बात नहीं करती,
00:46:09तो अब मुझे संदेह हो जाता है। सही है। और अनावश्यक रूप से,
00:46:12क्योंकि अगर तुमने वास्तव में इसे पाया,
00:46:14तो बस मुझे बता दो,
00:46:14और अब मुझे पता है कि तुमने इसे पाया। सही है। तो यह ऐसा है,
00:46:17मुझे लगता है कि यह बाहर से देखने वाले लोगों के लिए भी एक आत्मविश्वास बढ़ाने वाली चीज है जो जानना चाहते हैं कि क्या वे इस DynamoDB चीज पर भरोसा कर सकते हैं?
00:46:24अगर ऐसा लगता है कि तुमने वास्तव में बग खोज लिया,
00:46:26तो मुझे तुम पर थोड़ा अधिक विश्वास है। अगर ऐसा लगता है कि तुम्हें कोई अंदाजा नहीं था कि बग क्या था,
00:46:31या यह समझ में नहीं आता कि बग क्या था,
00:46:32तो मैं अधिक चिंतित हूं। और इसलिए मुझे लगता है कि यह भी अपनी RCA में ऐसा करने का एक और कारण है।
00:46:37यह,
00:46:38यह तुम्हारे ग्राहकों को विश्वास प्रदान करती है। शायद यहीं पर उन्होंने Adam को AWS हीरो के रूप में भी निकाल दिया।
00:46:43शायद यह सब जुड़ा हुआ है। हो सकता है। वे नहीं चाहते थे कि वह इन गंदे रहस्यों को उजागर करे।
00:46:48हाँ। वह बहुत कुछ जानता था। वह बहुत कुछ जानता था। क्या तुम गिटार शॉप का एक संक्षिप्त,
00:46:53तीन मिनट का सारांश दे सकते हो?
00:46:55जैसे वह क्या था, वह क्या उजागर कर रहा था?
00:46:57क्योंकि मैं याद करने की कोशिश कर रहा हूं कि वह क्या था क्योंकि इसमें एक सिंगल पॉइंट ऑफ फेलियर वाला आदमी शामिल था जो इस फेलियर के लिए भी बाहर था। तो मुझे नहीं पता कि दोनों चीजों को कैसे मिलाया जाए। और बेशक हमें कोई अंदाजा नहीं है। हमें कोई अंदाजा नहीं है कि अब कोई हमें सच बता रहा है या नहीं,
00:47:15है ना?
00:47:15क्योंकि यह इतनी खराब RCA थी,
00:47:17मुझे नहीं पता कि यह सही है या नहीं,
00:47:19लेकिन हाँ,
00:47:19पासवर्ड wishbone 12 था,
00:47:21मुझे लगता है।
00:47:22बस वहीं। हमेशा मुझे मारने की कोशिश करो। यही मेरी याद है वैसे भी।
00:47:26तो हाँ,
00:47:27वह कहानी यह थी कि,
00:47:28एक ऐसी चीज थी जो कॉन्फ़िगरेशन को कॉपी करने के लिए डिज़ाइन की गई थी। और वह चीज कुछ हद तक बेकाबू हो गई थी और रोकी नहीं जा सकती थी। यह बस ऐसी थी,
00:47:38यह बस कॉन्फ़िगरेशन को पूरी तरह से गलत तरीके से कॉपी कर रही थी और इसे ठीक करने या मरम्मत करने की जरूरत थी। और हमारे पास कोई और जानकारी नहीं है क्योंकि यह सुनी हुई बातचीत थी। सही है। और तो क्या यह इसके साथ मेल खाता है?
00:47:53ठीक है,
00:47:53थोड़ा सा,
00:47:54क्योंकि वे एनैक्टर ऐसी चीज की तरह लगते हैं जो कॉन्फ़िगरेशन कॉपी चला रही होगी,
00:47:59लेकिन दूसरी ओर,
00:48:01यह वास्तव में मशीनों के लिए कॉन्फ़िगरेशन नहीं है। यह एक DNS एंट्री है,
00:48:05एक DNS एंट्री। यह वास्तव में कॉन्फ़िगरेशन नहीं है। तो मैं कहूंगा कि दोनों कहानियां उतनी अच्छी तरह मेल नहीं खातीं।
00:48:14और इसलिए यह एक और कारण है कि मुझे उम्मीद थी कि यह RCA थोड़ी अधिक विश्वसनीय होती क्योंकि मैं निश्चित रूप से जानना चाहता था कि कहानी झूठी थी। और मुझे अभी भी वास्तव में पता नहीं है कि यह RCA कितनी खराब है इसके आधार पर। क्या होगा अगर,
00:48:27क्या होगा अगर वह टूल जो उस आदमी ने कॉन्फ़िग कॉपी करने के लिए लिखा था,
00:48:31वह सचमुच एनैक्टर ही है?
00:48:32जैसे उन्होंने बस इसे प्रोडक्शनाइज़ कर दिया और उसने,
00:48:35और जैसे उन्होंने इसे सात साल में बदला नहीं है। यही मेरा डॉट्स को जोड़ना था। वह था,
00:48:39वह ऐसा है,
00:48:40दोस्तों,
00:48:40मैंने इसे अपने लोकल एनवायरनमेंट में चीजों को टेस्ट करने के तरीके के रूप में लिखा था। और तुमने बस तीन एनैक्टर बनाने और उन्हें एक दूसरे के बगल में और प्रोड में रखने का फैसला किया। मुझे नहीं पता,
00:48:51यह कैसे हुआ?
00:48:52मुझे पता है।
00:48:53मेरे पास वैकल्पिक सवाल हैं। हाँ। वैकल्पिक रूप से,
00:48:55क्या यह रोलबैक है?
00:48:56क्योंकि वही वो है जिसने कॉपी करने का काम किया था जैसे,
00:48:59अरे,
00:49:00यहाँ पिछला वाला है। सही। और इसलिए मैं पिछले वाले को कॉपी करने जा रहा हूँ। फिर इसे यह null समस्या होने लगती है। और बस स्क्रिप्ट कभी सामना नहीं करती या नॉलेज बस बेकाबू हो जाता है और बार-बार लिखता रहता है जहाँ आप कुछ नहीं कर सकते,
00:49:12आप कुछ नहीं कर सकते। मुझे नहीं पता। मुझे बस इतना पता है कि जहाँ तक मैं उनकी व्याख्या से बता सकता हूँ,
00:49:18केवल उनके द्वारा प्रदान की गई जानकारी पर निर्भर करते हुए,
00:49:21मुझे अभी भी नहीं लगता कि रेस कंडीशन प्रासंगिक भी है क्योंकि फिर से,
00:49:25रूट 53 एंडपॉइंट में एक आकस्मिक अपडेट ने तीनों एक्टर्स को तुरंत डाउन कर दिया होता। क्योंकि उनके अनुसार,
00:49:30उन्हें रोकने के लिए बस इतना चाहिए कि अगर एंडपॉइंट एक अनरिज़ॉल्वेबल नाम की ओर इशारा करता है,
00:49:35बस इतना ही चाहिए। और इसलिए अगर यह वाकई सच है,
00:49:38तो सचमुच एक ऑपरेटर की टाइपो ने यह सब डाउन कर दिया होता,
00:49:41किसी रेस कंडीशन की जरूरत नहीं। सही। और इसलिए फिर से,
00:49:44RCA मुझे यह विश्वास दिलाने में अच्छा काम नहीं करती कि आपने असली बग के बारे में बात की है,
00:49:49क्योंकि मैं इतने सारे तरीकों के बारे में सोच सकता हूँ कि आप इस बिल्कुल वैसी ही चीज़ को ट्रिगर कर सकते थे जिसमें इस रेस कंडीशन की जरूरत नहीं है जिसके बारे में आपने पूरी RCA में मुझे बताया कि यह बग था,
00:50:00लेकिन मुझे नहीं लगता कि यह है। तो धन्यवाद,
00:50:02केसी,
00:50:02हमें वो शानदार प्रेजेंटेशन देने के लिए। मैं वास्तव में सच में ग्रीनवुड हूँ,
00:50:07ईर्ष्यापूर्ण गुस्से में हूँ जो भी वह लेखन उपकरण है। मुझे यह पता लगाना होगा कि आपके पास जो है वो कैसे सेट अप करना है। वह चीज़ शानदार है।
00:50:15देखने के लिए सभी का धन्यवाद। मैं,
00:50:16उह,
00:50:17जिन्होंने इसे लाइव पकड़ा,
00:50:18मुझे उम्मीद है कि आपने प्री बैंटर और शायद थोड़ा पोस्ट बैंटर भी एन्जॉय किया। अगर आप विस्तारित और सभी तरह की मज़ेदार इंटरैक्शन सुनना चाहते हैं,
00:50:25जो मुख्य कहानी का हिस्सा नहीं है,
00:50:27तो Spotify पर पूरे पॉडकास्ट के लिए जाएं,
00:50:29जो बस हम हैं जो बकवास कर रहे हैं,
00:50:31मुझे नहीं पता कि ट्रैश क्या खा रहा है और स्नैक्स और ऐसी चीज़ें,
00:50:34नाम मोर यैपिंग,
00:50:35मोर यैपिंग अगेन,
00:50:36और केसी टीजे और ट्रैश भी।
00:50:42मेरी स्क्रीन पर एरर्स, टर्मिनल कॉफी और सपना जी रहा हूँ।

Key Takeaway

यह वीडियो AWS आउटेज के माध्यम से यह समझाता है कि तकनीकी विफलता की गहराई तक जाना और कोड की कमियों को स्पष्ट रूप से स्वीकार करना प्रभावी सॉफ्टवेयर इंजीनियरिंग के लिए क्यों महत्वपूर्ण है।

Highlights

AWS के DynamoDB आउटेज का मुख्य कारण रूट कॉज़ एनालिसिस (RCA) की अस्पष्टता और तकनीकी विफलता थी।

जूनियर प्रोग्रामर अक्सर चीज़ों को न समझने पर भी समझने का नाटक करते हैं, जबकि अनुभवी डेवलपर्स को बेझिझक सवाल पूछने चाहिए।

डायनेमोडीबी (DynamoDB) में लोड बैलेंसिंग के लिए DNS ट्री स्ट्रक्चर और 'प्लानर' तथा 'एनैक्टर' नामक प्रणालियों का उपयोग किया जाता है।

आउटेज तब हुआ जब एक पुराने 'प्लान' को लागू करने के दौरान एक रेस कंडीशन पैदा हुई और 'रोलबैक' रिकॉर्ड अमान्य हो गया।

केसी का मानना है कि वास्तविक बग रेस कंडीशन नहीं, बल्कि वह कोड था जिसने अमान्य रिकॉर्ड मिलने पर पूरी प्रणाली को क्रैश कर दिया।

आरसीए (RCA) का उद्देश्य केवल विफलता बताना नहीं, बल्कि ग्राहकों को भविष्य के लिए सुरक्षा का विश्वास दिलाना भी होना चाहिए।

Timeline

परिचय और प्रोग्रामिंग मानसिकता

इस खंड में केसी म्यूटोरी स्टैंड अप पॉडकास्ट की शुरुआत करते हैं और जूनियर बनाम सीनियर प्रोग्रामर्स की मानसिकता पर चर्चा करते हैं। वे बताते हैं कि नए डेवलपर्स अक्सर अपनी छवि बचाने के लिए 'समझने का नाटक' करते हैं, जबकि असल में उन्हें सवाल पूछने चाहिए। केसी अपने अनुभव से कहते हैं कि अब वे बेवकूफ दिखने की परवाह नहीं करते और किसी भी बग की तह तक जाना पसंद करते हैं। यह चर्चा इस बात पर जोर देती है कि आधा-अधूरा ज्ञान भविष्य में बड़े तकनीकी खामियाजे का कारण बन सकता है। यहाँ मुख्य कीवर्ड जूनियर प्रोग्रामर, बाहरी दबाव और प्रोग्रामिंग अनुभव हैं।

प्रमुख आउटेज और रूट कॉज़ एनालिसिस (RCA) की तुलना

केसी हाल के हाई-प्रोफाइल आउटेज जैसे Google के नल पॉइंटर डीरेफरेंस और CrowdStrike के ऐरे ओवरफ्लो की तुलना करते हैं। वे बताते हैं कि इन कंपनियों ने स्पष्ट RCA प्रदान किया था जिससे डेवलपर्स समझ सके कि कोड की किस लाइन में गलती थी। इसके विपरीत, AWS का DynamoDB आउटेज स्पष्टीकरण बहुत अस्पष्ट लगा, जिससे कई अनुत्तरित प्रश्न खड़े हो गए। केसी इस बात पर ज़ोर देते हैं कि जब तक वास्तविक बग का पता न चले, तब तक विश्लेषण अधूरा है। यहाँ RCA, Google आउटेज और CrowdStrike जैसे महत्वपूर्ण उदाहरणों का उपयोग किया गया है।

AWS DynamoDB और DNS संरचना का तकनीकी विवरण

इस अनुभाग में AWS हीरो एडम के साथ तकनीकी बुनियादी ढांचे पर चर्चा की गई है, जिसमें API एंडपॉइंट्स और DNS ट्री का उल्लेख है। केसी समझाते हैं कि कैसे DynamoDB अनुरोधों को क्षेत्रीय पतों (regional addresses) पर भेजा जाता है और लोड बैलेंसिंग कैसे काम करती है। वे रूट 53 (Route 53) की भूमिका और वेटेड ऐरे (weighted array) के माध्यम से ट्रैफिक विभाजन के बारे में बात करते हैं। एडम पुष्टि करते हैं कि रूट 53 में ट्रैफिक को विभाजित करने के कई तरीके हैं, जिसमें वेटेड विकल्प एक प्रमुख तरीका है। यह खंड समझना महत्वपूर्ण है क्योंकि यही आउटेज की पृष्ठभूमि तैयार करता है।

प्लानर, एनैक्टर और लॉकिंग मैकेनिज्म

यहाँ सिस्टम के दो मुख्य हिस्सों, 'प्लानर' और 'एनैक्टर' के कार्य की व्याख्या की गई है। प्लानर नई लोड बैलेंसिंग योजनाओं को डिज़ाइन करता है, जबकि तीन एनैक्टर उन्हें रूट 53 में लागू करने का प्रयास करते हैं। केसी बताते हैं कि इन एनैक्टर्स के बीच टकराव रोकने के लिए लॉकिंग सिस्टम का उपयोग किया गया था ताकि एक समय में एक ही बदलाव हो सके। समस्या तब शुरू हुई जब एक एनैक्टर काफी पुरानी योजना (जैसे प्लान 110) को लागू करने के लिए लॉक पाने की प्रतीक्षा में अटक गया। यह सिस्टम की जटिलता और संभावित रेस कंडीशन के खतरों को दर्शाता है।

आउटेज का वास्तविक कारण और क्रैश प्रक्रिया

इस खंड में आउटेज के चरम बिंदु का वर्णन है, जहाँ पुराने प्लान के डिलीट होने से पूरी प्रणाली ठप हो गई। जब एनैक्टर ने अंततः लॉक प्राप्त किया और प्लान 110 की ओर इशारा किया, तब तक वह प्लान सिस्टम से हट चुका था, जिससे एंडपॉइंट अनरिज़ॉल्वेबल हो गया। इसके बाद 'रोलबैक' रिकॉर्ड सेट करने की कोशिश में तीनों एनैक्टर एक के बाद एक हार्ड क्रैश हो गए। केसी तर्क देते हैं कि यह केवल एक 'रेस कंडीशन' नहीं थी, बल्कि खराब कोडिंग थी जो अमान्य इनपुट को संभाल नहीं सकी। वे इसे 'use-after-free' जैसा बग बताते हैं जिसने घंटों तक सेवा को बंद रखा।

खराब प्रोग्रामिंग अभ्यास और निष्कर्ष

अंतिम भाग में केसी AWS द्वारा उपयोग की जाने वाली प्रोग्रामिंग भाषाओं जैसे Java और Scala और उनमें अपवादों (exceptions) को संभालने के तरीके पर चर्चा करते हैं। वे कहते हैं कि एक अच्छी प्रणाली को अमान्य DNS रिकॉर्ड मिलने पर क्रैश नहीं होना चाहिए था। केसी इस बात से निराश हैं कि AWS ने अपने RCA में वह वास्तविक कोड स्निपेट साझा नहीं किया जहाँ गलती हुई थी। वे निष्कर्ष निकालते हैं कि पारदर्शी RCA न केवल शिक्षा के लिए, बल्कि ग्राहकों का विश्वास बनाए रखने के लिए भी आवश्यक है। बातचीत का अंत पॉडकास्ट के अन्य प्लेटफार्मों और भविष्य की आर्किटेक्चर शिक्षा पर चर्चा के साथ होता है।

Community Posts

View all posts