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

Linux इंटरव्यू: आपको वॉल-क्लॉक टाइम के बजाय मोनोटोनिक क्लॉक का उपयोग कब करना चाहिए?

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

प्रश्न

एक Linux सर्विस दो सेकंड का रिक्वेस्ट टाइमआउट लागू करने के लिए CLOCK_REALTIME का उपयोग करती है, और उसी मान का पुनः उपयोग ऑडिट लॉग, रोज़ाना 09:00 बजे चलने वाले जॉब और क्रॉस-सर्विस इवेंट ऑर्डरिंग के लिए करती है। NTP सुधार या मैन्युअल क्लॉक परिवर्तन के बाद, कुछ रिक्वेस्ट तुरंत टाइमआउट हो जाती हैं जबकि अन्य बहुत अधिक समय तक प्रतीक्षा करती हैं। कारण स्पष्ट करें, प्रत्येक मामले के लिए सही क्लॉक चुनें, और सस्पेंड, प्रोसेस रीस्टार्ट, क्रॉस-मशीन प्रोपेगेशन तथा टेस्टिंग को कवर करें।

समस्या और इसका उपयोग क्षेत्र

एक Linux सर्विस रिक्वेस्ट शुरू होने पर CLOCK_REALTIME को पढ़ती है और “वर्तमान समय घटाव शुरूआती समय” के आधार पर दो सेकंड का टाइमआउट लागू करती है। वही स्रोत ऑडिट रिकॉर्ड्स को टाइमस्टैम्प करता है, स्थानीय समय के अनुसार प्रतिदिन 09:00 बजे एक जॉब शेड्यूल करता है, और कई सेवाओं के इवेंट्स को क्रमबद्ध करता है। NTP सुधार या मैन्युअल क्लॉक परिवर्तन के बाद, वॉल टाइम आगे या पीछे जा सकता है। कुछ रिक्वेस्ट तुरंत समाप्त हो जाती हैं; अन्य दो सेकंड से कहीं अधिक समय तक प्रतीक्षा करती हैं।

स्थानीय व्यतीत समय (elapsed time) और टाइमआउट, ऐसी लीज़ जो मशीन के सस्पेंड रहने के दौरान समाप्त होनी चाहिए, मानव कैलेंडर शेड्यूल, स्थायी ऑडिट समय और क्रॉस-मशीन कॉज़ल ऑर्डरिंग के लिए उपयुक्त क्लॉक या ऑर्डरिंग तंत्र चुनें। प्रोसेस रीस्टार्ट, सीरियलाइज़ेशन, क्लॉक स्क्यू और सत्यापन योजना को कवर करें।

दो सेकंड का टाइमआउट, सस्पेंड व्यवहार और शेड्यूल इंटरव्यू की धारणाएँ हैं। मुख्य Linux क्लॉक CLOCK_REALTIME, CLOCK_MONOTONIC और CLOCK_BOOTTIME हैं; एक लैंग्वेज रनटाइम इन्हें रैप कर सकता है। श्रेणी general है क्योंकि मुख्य कौशल ऑपरेटिंग-सिस्टम टाइम सेमेन्टिक्स और विश्वसनीयता तर्क है, न कि कोई एकल एप्लिकेशन फ्रेमवर्क।

2026 में अपडेट किया गया एक सिस्टम-डिजाइन इंटरव्यू संसाधन वॉल क्लॉक, मोनोटोनिक क्लॉक, क्लॉक सुधार और स्क्यू विफलताओं को एक अभ्यास विषय के रूप में मानता है। POSIX.1-2024 रेशनल, Linux मैन-पेज और Go दस्तावेज़ स्वतंत्र रूप से सत्यापन योग्य API सीमाएँ प्रदान करते हैं। ये स्रोत वर्तमान प्रासंगिकता और स्थायी तैयारी मूल्य स्थापित करते हैं; वे किसी कंपनी-विशिष्ट प्रश्न या इंटरव्यू आवृत्ति को स्थापित नहीं करते हैं।

इंटरव्यूअर क्या मूल्यांकन कर रहा है

पहला, क्या उम्मीदवार यह पूछ सकता है कि किसी समय मान को किस प्रश्न का उत्तर देना है? वॉल टाइम उत्तर देता है “यह कौन सा नागरिक या UTC क्षण है?” और ऑडिट, सर्टिफिकेट वैधता तथा कैलेंडर शेड्यूल के लिए उपयुक्त है। मोनोटोनिक टाइम उत्तर देता है “इस रनटाइम में कितना समय बीत चुका है?” और अवधि, बैकऑफ तथा टाइमआउट के लिए उपयुक्त है। कोई API नाम या नैनोसेकंड सटीकता सेमेन्टिक्स का विकल्प नहीं हो सकती।

दूसरा, क्या उम्मीदवार जानता है कि मोनोटोनिक का अर्थ पूरी तरह से एक समान, वैश्विक रूप से सुसंगत या हमेशा आगे बढ़ना नहीं है? Linux CLOCK_MONOTONIC सिस्टम समय सेट करने से होने वाले असतत (discontinuous) उछाल से प्रभावित नहीं होता है और पीछे नहीं जाता है, लेकिन क्रमिक NTP समायोजन इसकी दर को प्रभावित करते हैं और इसमें सिस्टम सस्पेंड शामिल नहीं होता है। लगातार पढ़ने पर यह समान मान भी लौटा सकता है।

तीसरा, क्या उम्मीदवार CLOCK_MONOTONIC, CLOCK_BOOTTIME, CLOCK_MONOTONIC_RAW और CPU टाइम के बीच अंतर कर सकता है? BOOTTIME मोनोटोनिक है और इसमें सस्पेंड शामिल है। MONOTONIC_RAW क्रमिक NTP समायोजन से बचाता है और लो-लेवल क्लॉक मापन के लिए उपयोगी है, लेकिन यह डिफ़ॉल्ट एप्लिकेशन-टाइमआउट समाधान नहीं है। प्रोसेस और थ्रेड CPU क्लॉक CPU पर निष्पादन के समय को गिनते हैं, न कि प्रतीक्षा में बिताए गए समय को।

चौथा, क्या उम्मीदवार किसी स्थानीय मोनोटोनिक रीडिंग को सार्वभौमिक टाइमस्टैम्प की तरह बनाए रखने या प्रसारित करने से बचेगा? इसके आरंभिक बिंदु (origin) का कोई कैलेंडर अर्थ नहीं होता है, और यह रीस्टार्ट के दौरान एक स्थायी टाइमलाइन नहीं है। केवल भौतिक टाइमस्टैम्प क्रॉस-मशीन क्रम को सिद्ध नहीं कर सकते। आवश्यकतानुसार व्यावसायिक अनुक्रम, डेटाबेस कमिट स्थिति, सर्वसम्मति (consensus) लॉग, लैम्पॉर्ट क्लॉक या हाइब्रिड लॉजिकल क्लॉक को शुद्धता सुनिश्चित करनी चाहिए।

अंत में, क्या उम्मीदवार वास्तविक क्लॉक विफलताओं को इंजेक्ट कर सकता है? एक बार दो सेकंड प्रतीक्षा करना वॉल-क्लॉक स्टेप्स, स्लीविंग, सस्पेंड, रीस्टार्ट या रिमोट स्क्यू में से किसी को भी कवर नहीं करता है।

उत्तर देने से पहले स्पष्ट करने योग्य प्रश्न

  • क्या दो सेकंड का अर्थ सक्रिय रनटाइम है या वास्तविक व्यतीत समय? जब प्रोसेस सामान्य रूप से चलता है तब रिक्वेस्ट टाइमआउट के लिए CLOCK_MONOTONIC का उपयोग किया जाता है। एक स्थानीय लीज़ जिसे एक मिनट के सस्पेंड के बाद समाप्त होना चाहिए, उसे CLOCK_BOOTTIME पर विचार करना चाहिए।
  • क्या डेडलाइन को प्रोसेस रीस्टार्ट के बाद भी बने रहना चाहिए? इन-मेमरी मोनोटोनिक डेडलाइन एक चालू इंस्टेंस से संबंधित होती है। एक आधिकारिक वॉल-टाइम समाप्ति या व्यावसायिक स्थिति को स्थायी (persist) करें, फिर स्टार्टअप के बाद एक सीमित स्थानीय बजट स्थापित करें।
  • कौन सा टाइम ज़ोन “प्रतिदिन 09:00 बजे” को परिभाषित करता है, और DST गैप या फोल्ड में क्या होता है? एक कैलेंडर जॉब के लिए IANA ज़ोन और छूटे हुए या दोहराए गए स्थानीय क्षणों के लिए एक नीति की आवश्यकता होती है। मोनोटोनिक समय उस नियम को व्यक्त नहीं कर सकता।
  • एक ऑडिट रिकॉर्ड को क्या सिद्ध करना चाहिए? एक पठनीय UTC क्षण खोज और अनुपालन का समर्थन करता है, लेकिन बराबरी (ties), क्लॉक रोलबैक और मल्टी-होस्ट स्क्यू के लिए एक स्थिर ID, कमिट अनुक्रम या कॉज़ल फ़ील्ड की भी आवश्यकता होती है।
  • क्या क्रॉस-सर्विस ऑर्डरिंग प्रदर्शन (display), डिडुप्लीकेशन, कार्य-कारण संबंध (causality) या एक सख्त कुल क्रम (strict total order) के लिए है? प्रदर्शन स्क्यू को सहन कर सकता है। एक लेज़र या रेप्लिकेटेड स्टेट मशीन को आमतौर पर “बड़ा टाइमस्टैम्प जीतता है” के बजाय एक कमिट प्राधिकरण या सर्वसम्मति लॉग की आवश्यकता होती है।
  • लक्षित प्लेटफ़ॉर्म सस्पेंड और VM माइग्रेशन को कैसे संभालता है? Linux अपने क्लॉक सेमेन्टिक्स को परिभाषित करता है, लेकिन वास्तविक भाषा रनटाइम, होस्ट, वर्चुअलाइज़ेशन लेयर और रिज़ॉल्यूशन को अभी भी संस्करण-विशिष्ट सत्यापन की आवश्यकता होती है।
  • क्या सिंक्रोनाइज़ेशन क्लॉक को स्टेप (step) करता है या स्लीव (slew) करता है? वॉल-क्लॉक स्टेप सीधे अवधि घटाव को बाधित करता है। स्लीविंग मोनोटोनिक समय को गैर-घटते क्रम में छोड़ता है लेकिन कच्चे हार्डवेयर काउंटर के सापेक्ष इसकी दर को थोड़ा बदल देता है।

30-सेकंड उत्तर फ्रेमवर्क

“मैं प्रश्न के आधार पर क्लॉक चुनता हूँ। ऑडिट टाइमस्टैम्प और दैनिक 09:00 शेड्यूल के लिए स्थायी वॉल टाइम की आवश्यकता होती है। एक ही प्रोसेस के भीतर दो सेकंड की अवधि या टाइमआउट मोनोटोनिक क्लॉक का उपयोग करता है ताकि वॉल-क्लॉक स्टेप इसे जल्दी या देर से समाप्त न करे। यदि सस्पेंड के दौरान लीज़ को समाप्त होना चाहिए, तो Linux CLOCK_BOOTTIME प्रदान करता है। मैं न तो मोनोटोनिक रीडिंग को सीरियलाइज़ करता हूँ और न ही रीस्टार्ट या मशीनों के बीच उनकी तुलना करता हूँ। क्रॉस-सर्विस वॉल टाइम अवलोकनात्मक है; एक व्यावसायिक संस्करण, कमिट लॉग या लॉजिकल क्लॉक शुद्धता प्रदान करता है। मैं आगे और पीछे वॉल-क्लॉक स्टेप्स इंजेक्ट करूँगा, फिर प्रत्येक उपयोग के मामले के लिए एक अलग इनवेरिएंट के विरुद्ध स्लीविंग, सस्पेंड, रीस्टार्ट और होस्ट स्क्यू का परीक्षण करूँगा।”

चरण-दर-चरण गहन विश्लेषण

चरण 1: एक समय मान को पाँच आवश्यकताओं में विभाजित करें

पूरे सिस्टम को एक स्रोत सौंपने के बजाय एक निर्णय तालिका बनाएँ:

आवश्यकताअनुशंसित आधारमुख्य कारण
स्थानीय अवधि, पुनः प्रयास बैकऑफ, दो सेकंड का टाइमआउटCLOCK_MONOTONICअसतत वॉल-क्लॉक परिवर्तनों से अप्रभावित
स्थानीय लीज़ जो सस्पेंड समय का उपभोग करती हैCLOCK_BOOTTIMEमोनोटोनिक और इसमें सस्पेंड शामिल है
UTC ऑडिट क्षण, सर्टिफिकेट वैधताCLOCK_REALTIMEUnix Epoch अर्थ; स्थायी और विनिमेय
दैनिक 09:00 स्थानीय समयवॉल क्लॉक + IANA ज़ोन + DST नीतिमानव कैलेंडर द्वारा परिभाषित
सही क्रॉस-होस्ट क्रमव्यावसायिक संस्करण, कमिट लॉग या लॉजिकल क्लॉकभौतिक स्क्यू का अर्थ है कि टाइमस्टैम्प कार्य-कारण संबंध सिद्ध नहीं करता
प्रोफाइलर में CPU लागतप्रोसेस या थ्रेड CPU क्लॉकवास्तव में CPU पर निष्पादित होने वाले समय की गणना करता है

एक रिकॉर्ड दो समय आयाम ले जा सकता है। उदाहरण के लिए, एक रिक्वेस्ट लॉग पुनर्प्राप्ति के लिए UTC observed_at संग्रहीत करता है जबकि प्रोसेस मोनोटोनिक स्टार्ट रीडिंग से duration_ms की गणना करता है। ये फ़ील्ड अलग-अलग प्रश्नों के उत्तर देते हैं और एक-दूसरे की जगह नहीं लेते हैं।

चरण 2: समझाएँ कि वॉल टाइम अवधि घटाव को क्यों बाधित करता है

मान लीजिए कि कोड elapsed = realtime_now - realtime_start का मूल्यांकन करता है। यदि रिक्वेस्ट शुरू होने के बाद वॉल टाइम 90 सेकंड आगे बढ़ जाता है, तो अगला चेक गलत तरीके से टाइमआउट घोषित कर देता है। यदि यह 90 सेकंड पीछे चला जाता है, तो elapsed नकारात्मक हो सकता है और रिक्वेस्ट तब तक प्रतीक्षा कर सकती है जब तक कि वॉल टाइम बराबर न हो जाए। NTP क्लॉक की दर बदलकर समय को धीरे-धीरे ठीक भी कर सकता है। वॉल टाइम को बाहरी नागरिक समय के साथ संरेखित होना चाहिए, इसलिए कोई एप्लिकेशन लगातार बढ़ती हुई रीडिंग मानकर नहीं चल सकता।

शुरुआती और वर्तमान दोनों रीडिंग एक ही मोनोटोनिक क्लॉक से लें, या स्पष्ट रूप से उस पर आधारित टाइमर/डेडलाइन API का उपयोग करें। कभी भी मोनोटोनिक रीडिंग से रियलटाइम रीडिंग को न घटाएं; उनके आरंभिक बिंदु भिन्न होते हैं। केवल इसलिए MONOTONIC_RAW न चुनें क्योंकि 'raw' अधिक सटीक लगता है। एप्लिकेशन टाइमआउट आमतौर पर एक गैर-घटती क्लॉक से लाभान्वित होते हैं जिसके सेकंड वास्तविक सेकंड के करीब अनुशासित रहते हैं, जो कि सामान्य POSIX/Linux मोनोटोनिक क्लॉक प्रदान करती है।

चरण 3: तय करें कि क्या सस्पेंड बजट को खर्च करता है

जब सिस्टम सस्पेंड होता है तो Linux CLOCK_MONOTONIC संचय करना बंद कर देता है। यदि कोई लैपटॉप एक मिनट के लिए स्लीप मोड में जाता है, तो रिज्यूमे के बाद 30-सेकंड के स्थानीय MONOTONIC टाइमर में अभी भी समय बचा हो सकता है। यह रन करने योग्य समय में परिभाषित कार्य के लिए उपयुक्त हो सकता है, लेकिन किसी सत्र या सुरक्षा लीज़ के लिए नहीं जो मशीन के स्लीप मोड में होने पर समाप्त होनी चाहिए।

CLOCK_BOOTTIME में सस्पेंड शामिल है और यह बाद वाले नियम के अनुकूल है। कार्य करने के लिए सस्पेंड की गई मशीन को जगाने के लिए अतिरिक्त रूप से उपयुक्त अलार्म क्षमता और अनुमतियों की आवश्यकता होती है; केवल BOOTTIME चुनने से यह अपने आप नहीं जागती। रीबूट तक चलने वाली लीज़ अभी भी केवल BOOTTIME संख्या को बनाए नहीं रख सकती क्योंकि नया बूट पुराने मूल का पोर्टेबल सातत्य प्रदान नहीं करता है।

चरण 4: कैलेंडर डेडलाइन और पर्सिस्टेंस को अलग से संभालें

“प्रतिदिन 09:00 बजे” एक कैलेंडर नियम है। इसके लिए वॉल टाइम, एक नामित समय क्षेत्र और एक DST नीति की आवश्यकता होती है। किसी तारीख का 09:00 नियम परिवर्तन के बाद एक अलग UTC ऑफ़सेट पर मैप हो सकता है; कुछ स्थानीय समय दोहराए जाते हैं या मौजूद नहीं होते हैं। इसे स्टार्टअप पर एक बार मोनोटोनिक अवधि में बदलने के बजाय कैलेंडर अभिव्यक्ति और ज़ोन को संग्रहीत करें जिसे कभी दोबारा नहीं गिना जाता है। एक बार ट्रिगर होने के बाद, मोनोटोनिक समय उस रन के निष्पादन टाइमआउट को नियंत्रित कर सकता है।

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

चरण 5: क्रॉस-प्रोसेस और क्रॉस-मशीन प्रोपेगेशन को सीमित करें

एक पूर्ण मोनोटोनिक रीडिंग केवल अपने परिभाषित रनटाइम वातावरण में ही सार्थक होती है। Go का आधिकारिक दस्तावेज़ सीरियलाइज़ेशन के दौरान मोनोटोनिक रीडिंग को स्पष्ट रूप से हटा देता है। कोई प्रोटोकॉल दूसरे होस्ट को monotonic_deadline=8374921 नहीं भेज सकता है और सीधे तुलना करने के लिए नहीं कह सकता है; उस होस्ट का दूसरा आरंभिक बिंदु, बूट चक्र या API अनुबंध हो सकता है।

एक RPC एक सीमित शेष बजट या एक UTC डेडलाइन का प्रसार कर सकता है, लेकिन ट्रेडऑफ़ स्पष्ट होना चाहिए। प्रत्येक हॉप एक स्थानीय मोनोटोनिक क्लॉक के साथ बजट खर्च करता है और ट्रांजिट, कतार और स्क्यू के लिए हेडरूम छोड़ता है। एक उच्च-जोखिम वाली लीज़ केवल क्लाइंट समय पर भरोसा नहीं कर सकती। सर्वर प्राधिकरण, एक लीज़ युग (epoch), और एक फेंसिंग टोकन तय करते हैं कि राइट्स मान्य हैं या नहीं।

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

चरण 6: टेस्ट्स को क्लॉक इनवेरिएंट्स में बदलें

निम्नलिखित को कवर करने के लिए एक टेस्ट वातावरण में एक इंजेक्टेबल क्लॉक या प्लेटफ़ॉर्म टाइम नेमस्पेस/वर्चुअल क्लॉक का उपयोग करें:

  1. 500 मिलीसेकंड के बाद वॉल टाइम को 90 सेकंड आगे बढ़ाएं; मोनोटोनिक दो-सेकंड का टाइमआउट तुरंत ट्रिगर नहीं होना चाहिए।
  2. वॉल टाइम को 90 सेकंड पीछे ले जाएं; टाइमआउट अभी भी लगभग दो व्यतीत सेकंड के बाद ट्रिगर होता है, जबकि UTC लॉग बिना ID टकराव के पीछे जा सकते हैं।
  3. क्रमिक सुधार का अनुकरण करें, सत्यापित करें कि कोई नकारात्मक अवधि नहीं है, और अनुमत मापन त्रुटि दर्ज करें।
  4. लीज़ से अधिक समय तक सस्पेंड करें। एक MONOTONIC कार्य अपने परिभाषित बजट को बनाए रखता है; एक BOOTTIME लीज़ समाप्त हो चुकी है।
  5. प्रोसेस को रीस्टार्ट करें। कोई पुरानी मोनोटोनिक रीडिंग पुनर्स्थापित नहीं की जाती है; स्थायी समाप्ति स्थिति इसके अनुबंध के अनुसार फिर से स्थापित की जाती है।
  6. दो परीक्षण नोड्स को विपरीत क्लॉक ऑफ़सेट दें। स्टेट मशीन अभी भी घटनाओं को वॉल-क्लॉक परिमाण के बजाय संस्करण या लॉग स्थिति द्वारा लागू करती है।
  7. DST गैप और फोल्ड का अनुकरण करें, फिर स्पष्ट दैनिक-09:00 नीति को सत्यापित करें।

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

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

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

फिर मैं अन्य आवश्यकताओं को विभाजित करूँगा। ऑडिट रिकॉर्ड UTC वॉल टाइम के साथ-साथ एक स्थिर रिकॉर्ड ID रखते हैं। दैनिक 09:00 एक IANA ज़ोन और एक स्पष्ट DST नीति रखता है। यदि सस्पेंड के दौरान एक स्थानीय लीज़ समाप्त होनी चाहिए, तो Linux CLOCK_BOOTTIME उपयुक्त है; यदि केवल निष्पादन योग्य समय मायने रखता है, तो CLOCK_MONOTONIC उपयुक्त है। न तो CPU टाइम और न ही MONOTONIC_RAW एक साधारण रिक्वेस्ट टाइमआउट के लिए सीधे प्रतिस्थापन हैं।

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

अंत में, मैं 90-सेकंड का फ़ॉरवर्ड स्टेप, 90-सेकंड का रोलबैक और क्रमिक सुधार इंजेक्ट करूँगा, फिर सस्पेंड, प्रोसेस रीस्टार्ट, दो विपरीत रूप से स्क्यूड नोड्स और DST सीमाओं का परीक्षण करूँगा। सफल होने का अर्थ है कोई नकारात्मक अवधि नहीं, वॉल-क्लॉक स्टेप से कोई तत्काल या 90-सेकंड की देरी वाला रिक्वेस्ट टाइमआउट नहीं, वादा किया गया सस्पेंड व्यवहार, और क्रॉस-होस्ट स्टेट ऑर्डर जो भौतिक स्क्यू से अपरिवर्तित रहता है।”

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

  • प्रत्येक टाइमस्टैम्प को मोनोटोनिक क्लॉक में ले जाना → मोनोटोनिक मानों में विनिमेय कैलेंडर अर्थ का अभाव होता है और वे दैनिक 09:00 को व्यक्त नहीं कर सकते → अवधि, कैलेंडर, ऑडिट और ऑर्डरिंग के लिए अलग-अलग चयन करें।
  • टाइमआउट के लिए CLOCK_REALTIME को घटाना जारी रखना → आगे का स्टेप जल्दी समाप्त हो जाता है और रोलबैक देर से समाप्त होता है → एक मोनोटोनिक डोमेन में प्रारंभ, समय सीमा और वर्तमान समय की गणना करें।
  • यह दावा करना कि मोनोटोनिक समय NTP से पूरी तरह से अप्रभावित है → Linux MONOTONIC असतत स्टेप्स से बचाता है लेकिन क्रमिक आवृत्ति समायोजन स्वीकार करता है → 'कभी पीछे नहीं जाता' को 'पूरी तरह से एक समान' से अलग रखें।
  • यह मान लेना कि CLOCK_MONOTONIC में सस्पेंड शामिल है → Linux सस्पेंड किए गए समय को बाहर करता है → पहले सस्पेंड सेमेन्टिक्स को परिभाषित करें और जब इसे गिनना आवश्यक हो तो BOOTTIME का उपयोग करें।
  • CLOCK_MONOTONIC_RAW को एक अपग्रेड किए गए डिफ़ॉल्ट के रूप में मानना → क्लॉक अनुशासन को बायपास करने से वास्तविक सेकंड का मापन खराब हो सकता है → एप्लिकेशन टाइमआउट के लिए सामान्य मोनोटोनिक समय का उपयोग करें और निम्न-स्तरीय मापन के लिए raw का मूल्यांकन करें।
  • दूसरे होस्ट पर एक मोनोटोनिक डेडलाइन को सीरियलाइज़ करना → रिसीवर के पास कोई पोर्टेबल साझा आरंभिक बिंदु नहीं होता है → एक परिभाषित बजट या UTC डेडलाइन का प्रसार करें, स्थानीय रूप से परिवर्तित करें, और स्क्यू जोखिम को सीमित करें।
  • क्रॉस-होस्ट व्यावसायिक क्रम के रूप में created_at का उपयोग करना → स्क्यू और रोलबैक घटनाओं को उलट सकते हैं → संस्करणों, कमिट स्थितियों, सर्वसम्मति लॉग या लॉजिकल क्लॉक्स में शुद्धता रखें।
  • एक मैन्युअल क्लॉक परिवर्तन का परीक्षण करना → स्लीविंग, सस्पेंड, रीस्टार्ट और DST अनकवर रह जाते हैं → एक इंजेक्टेबल-क्लॉक मैट्रिक्स का उपयोग करें और स्वतंत्र इनवेरिएंट्स को सत्यापित करें।

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

क्या क्रमिक NTP सुधार दो सेकंड के CLOCK_MONOTONIC अंतराल को गलत बनाता है?

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

एक लीज़ को रीस्टार्ट के बाद भी जीवित रहना चाहिए और मशीन के एक मिनट तक ऑफ़लाइन रहने के दौरान समाप्त होना चाहिए। क्या बदलता है?

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

यदि दोनों सेवाएँ NTP का उपयोग करती हैं, तो क्या मिलीसेकंड टाइमस्टैम्प घटना क्रम निर्धारित कर सकते हैं?

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

प्रोसेस CPU टाइम के साथ रिक्वेस्ट लेटेंसी को क्यों न मापें?

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

डेलाइट-सेविंग ट्रांज़िशन पर दैनिक 09:00 को कैसा व्यवहार करना चाहिए?

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

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

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