प्रतिनिधि इंटरव्यू विषय

सिस्टम डिज़ाइन इंटरव्यू: एक कॉन्फ़िगर करने योग्य TCP keep-alive पॉलिसी सेवा डिज़ाइन करें

सिस्टम डिज़ाइनकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

आप कई लंबे समय तक चलने वाले कनेक्शनों वाला एक मल्टी-टेनेंट प्लेटफ़ॉर्म चलाते हैं। टेनेंट्स को कॉन्फ़िगर करने योग्य TCP keep-alive आइडल समय, प्रोब अंतराल और विफलता गणना की आवश्यकता है। डिफ़ॉल्ट, डिलीवरी, वैलिडेशन, रोलबैक और ओवरलोड सुरक्षा सहित पॉलिसी सेवा डिज़ाइन करें।

प्रॉम्प्ट और संदर्भ

यह सिस्टम डिज़ाइन प्रश्न यह जांचता है कि क्या आप निम्न-स्तरीय TCP keep-alive पैरामीटर्स को एक प्रबंधित प्लेटफ़ॉर्म क्षमता में बदल सकते हैं। चुनौती केवल प्रोब को अधिक बार भेजने की नहीं है। ट्रांसपोर्ट लाइवनेस को एप्लिकेशन हेल्थ से अलग करें, फिर टेनेंट आइसोलेशन, पॉलिसी वर्ज़न, कनेक्शन लाइफ़साइकिल, नेटवर्क लागत और रिकवरी को डिज़ाइन करें।

इंटरव्यूअर क्या जांच रहा है

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

स्पष्टीकरण हेतु प्रश्न

कनेक्शन प्रकार, क्लाइंट और सर्वर नियंत्रण, शेयर्ड नोड्स, NAT, मोबाइल नेटवर्क, प्रॉक्सी और एक निष्क्रिय कनेक्शन का पता लगाने के व्यावसायिक लक्ष्य की पुष्टि करें। कर्नेल समर्थन, क्या keep-alive डिफ़ॉल्ट रूप से अक्षम है, मौजूदा एप्लिकेशन हार्टबीट्स, प्रति-टेनेंट कनेक्शन संख्या और बजट, और क्या परिवर्तन तत्काल होने चाहिए, इसकी जाँच करें। एक TCP प्रोब केवल ट्रांसपोर्ट प्रतिक्रिया स्थापित करता है; यह एप्लिकेशन-स्तरीय हेल्थ चेक का स्थान नहीं लेता है।

30-सेकंड का उत्तर ढांचा

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

चरण-दर-चरण डिज़ाइन

1. पॉलिसी मॉडल और सुरक्षित डिफ़ॉल्ट परिभाषित करें

idle-time, probe-interval, max-probes, कनेक्शन स्कोप, वर्ज़न, समाप्ति और स्रोत शामिल करें। RFC 9293 के अनुसार keep-alive को प्रति कनेक्शन स्विच करने योग्य और डिफ़ॉल्ट रूप से अक्षम होना आवश्यक है; RFC 9643 रूढ़िवादी अंतरालों की सिफारिश करता है क्योंकि प्रोब संसाधनों की खपत करते हैं। पर्याप्त रूप से लंबे डिफ़ॉल्ट आइडल समय और अंतराल का उपयोग करें, और टेनेंट्स को संसाधन बजट के भीतर ही उन्हें छोटा करने की अनुमति दें।

2. कंट्रोल प्लेन और डेटा प्लेन को अलग करें

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

3. संयोजनों और कोटा को मान्य करें

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

4. वर्ज़न वितरित करें और अपडेट संभालें

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

5. ऑब्ज़र्वेबिलिटी और विफलता श्रेणियां बनाएं

पॉलिसी वर्ज़न, भेजे गए प्रोब्स, प्रतिक्रिया दर, लगातार विफलताएं, अंतिम डिस्कनेक्ट कारण, पुनः कनेक्ट सफलता और प्रति-टेनेंट संसाधन उपयोग रिकॉर्ड करें। पीयर क्लोज़, पैकेट लॉस, नोड ओवरलोड, समाप्त हो चुकी पॉलिसी और एप्लिकेशन-हार्टबीट विफलता के बीच अंतर करें। केवल एक अनुपलब्ध keep-alive प्रतिक्रिया से विफलता साबित नहीं होती है; अलर्ट में बार-बार प्रोब के साथ एप्लिकेशन परिणामों को संयोजित किया जाना चाहिए।

6. रोलबैक और ओवरलोड सुरक्षा डिज़ाइन करें

पिछला स्थिर वर्ज़न और एक आपातकालीन वैश्विक पॉलिसी रखें। यदि कोई रोलआउट डिस्कनेक्ट, प्रोब ट्रैफ़िक या CPU को थ्रेशोल्ड से ऊपर बढ़ाता है, तो प्रकाशन रोकें और पुराने वर्ज़न को पुनर्स्थापित करें; यदि अपडेट विफल होते हैं, तो मान्य स्नैपशॉट के साथ जारी रखें। दर सीमाएं, टेनेंट सर्किट ब्रेकर्स और कतार बैकप्रेशर जोड़ें ताकि पॉलिसी स्टॉर्म कनेक्शन मैनेजर को प्रभावित न कर सके।

उच्च-गुणवत्ता वाला नमूना उत्तर

मैं keep-alive नीतियों को एक वर्ज़न-नियंत्रित कंट्रोल-प्लेन सेवा के रूप में लागू करूंगा जिसमें आइडल समय, प्रोब अंतराल, अधिकतम प्रोब, कनेक्शन स्कोप और ऑडिट डेटा शामिल होगा। प्लेटफ़ॉर्म एक अक्षम, रूढ़िवादी वैश्विक डिफ़ॉल्ट का उपयोग करेगा और कनेक्शन तथा प्रोब बजट द्वारा टेनेंट सेटिंग्स को सीमित करेगा। नए कनेक्शन एक हस्ताक्षरित स्नैपशॉट पढ़ेंगे और इसके वर्ज़न को बाइंड करेंगे; मौजूदा कनेक्शन केवल बैचों या स्वाभाविक पुनर्कनेक्शन के माध्यम से अपडेट होंगे। रोलआउट के लिए अनुमोदन, चरणबद्ध मेट्रिक्स और स्वचालित रोलबैक की आवश्यकता होगी, जो प्रोब दर, प्रतिक्रियाओं, डिस्कनेक्ट कारणों, फ़ाल्स पॉज़िटिव्स, पुनर्कनेक्शन और नोड लोड को ट्रैक करेगा। Keep-alive ट्रांसपोर्ट लाइवनेस को कवर करेगा जबकि एप्लिकेशन हार्टबीट्स व्यावसायिक हेल्थ की पुष्टि करेंगे। यदि प्रोब ट्रैफ़िक या डिस्कनेक्ट अप्रत्याशित रूप से बढ़ते हैं, तो मैं प्रसार को रोक दूंगा और स्थिर वर्ज़न को पुनर्स्थापित करूंगा।

सामान्य गलतियाँ

  • ACK आने के कारण keep-alive को एप्लिकेशन हेल्थ चेक मान लेना।
  • नोड, इग्रेस और वैश्विक प्रोब बजट के बिना टेनेंट्स को अंतराल छोटा करने की अनुमति देना।
  • पॉलिसी परिवर्तन के तुरंत बाद प्रत्येक कनेक्शन को प्रोसेस करना और सिंक्रोनाइज़्ड चर्न पैदा करना।
  • वर्ज़न, हस्ताक्षर, ऑडिट रिकॉर्ड और अंतिम-ज्ञात-अच्छा स्नैपशॉट छोड़ देना।
  • हानि, पीयर क्लोज़, ओवरलोड और फ़ाल्स पॉज़िटिव्स को वर्गीकृत किए बिना केवल डिस्कनेक्ट गणना को देखना।
  • चरणबद्ध रोलआउट या रोलबैक पथ के बिना वैश्विक स्तर पर प्रकाशित करना।

फ़ॉलो-अप प्रश्न और उत्तर

प्रोब अंतराल को कुछ सेकंड पर क्यों सेट न करें?

लगातार प्रोब नेटवर्क, CPU और बैटरी संसाधनों की खपत करते हैं और कंजेशन को बढ़ा सकते हैं। डिटेक्शन लक्ष्य, कनेक्शन संख्या और संसाधन बजट से पैरामीटर्स की गणना करें, और व्यावसायिक सिमेंटिक्स की आवश्यकता होने पर एप्लिकेशन हार्टबीट को प्राथमिकता दें।

एक टेनेंट तत्काल परिवर्तन चाहता है। आप क्या करेंगे?

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

जब कंट्रोल प्लेन बंद हो जाता है तो क्या होता है?

डेटा प्लेन एक सीमित अवधि के लिए अंतिम असमाप्त हस्ताक्षरित स्नैपशॉट का उपयोग करना जारी रखता है। समाप्ति के बाद यह खाली कॉन्फ़िगरेशन के बजाय एक सुरक्षित वैश्विक डिफ़ॉल्ट पर वापस आ जाता है। एक बार पुनर्प्राप्त होने के बाद, प्रत्येक कनेक्शन को एक साथ रीफ़्रेश किए बिना वर्ज़न का मिलान करें।

आप keep-alive फ़ाल्स पॉज़िटिव का पता कैसे लगाते हैं?

एप्लिकेशन हार्टबीट्स, पुनर्कनेक्शन परिणामों और पाथ मेट्रिक्स के साथ लगातार प्रोब विफलताओं की तुलना करें। एक एकल छूटा हुआ ACK अपर्याप्त है; कॉन्फ़िगर की गई विफलता गणना और पुष्टि करने वाले व्यावसायिक या एप्लिकेशन संकेतों की आवश्यकता होती है।

आप एक बड़े टेनेंट को प्रोब बजट की खपत करने से कैसे रोकते हैं?

कनेक्शन संख्या और प्रोब दर के आधार पर पदानुक्रमित टेनेंट, नोड, ज़ोन और वैश्विक कोटा का उपयोग करें। कोटा से अधिक होने पर, अंतराल बढ़ाएं, आक्रामक सेटिंग्स को अस्वीकार करें, या दूसरों के लिए न्यूनतम सेवा स्तर को बनाए रखते हुए कोटा अपग्रेड की आवश्यकता रखें।

सार्वजनिक स्रोत

संबंधित प्रश्न

संबंधित इंटरव्यू टूल

सिस्टम डिज़ाइन उत्तर के लिए हल करें का उपयोग करें

पहले आवश्यकताओं को स्पष्ट करें, फिर स्केल, आर्किटेक्चर, कंपोनेंट चयन और ट्रेड-ऑफ की ओर बढ़ें।

टूल देखें