لینک کوتاه مطلب : https://hsgar.com/?p=6350

زمان آن فرا رسیده است که ثانیه کبیسه را در گذشته رها کنیم

مفهوم  ثانیه کبیسه برای اولین بار در سال 1972 توسط سازمان  خدمات بین المللی چرخش زمین و سیستم های مرجع (IERS) در تلاش برای به روز رسانی دوره ای ساعت همانگ جهانی (UTC) به دلیل عدم دقت زمان خورشیدی (UT1) و  کاهش سرعت چرخش زمین در هر ۳۲۰۰۰ سال معرفی شد. این تنظیم دوره ای عمدتاً به نفع دانشمندان و ستاره شناسان است زیرا به آنها اجازه می دهد اجرام آسمانی را با استفاده از UTC برای اکثر اهداف مشاهده کنند. اگر تصحیح UTC وجود نداشت، باید تنظیماتی در تجهیزات و نرم افزارهای قدیمی که برای مشاهدات نجومی با UTC همگام می شوند، انجام شود.

 از زمان معرفی ثانیه کبیسه، UTC بیست و هفت بار به روز شده است.

در حالی که ثانیه کبیسه ممکن است راه حل قابل قبولی در سال 1972 باشد، زمانی که هم جامعه علمی و هم صنعت مخابرات را خوشحال کرد، این روزها UTC هم برای برنامه های دیجیتال و هم برای دانشمندان که اغلب TAI یا UT1 را به جای آن انتخاب می کنند، به همان اندازه بد است.

در متا، ما از تلاش‌های صنعتی برای متوقف کردن معرفی ثانیه‌های کبیسه در آینده و ماندن در سطح فعلی 27 حمایت می‌کنیم. معرفی ثانیه‌های کبیسه جدید یک عمل پرخطر است که بیشتر از اینکه مفید باشد ضرر دارد، و ما معتقدیم که زمان معرفی جدید است. فناوری هایی برای جایگزینی آن

پریدن از روی اعتقاد

یکی از عوامل بی‌نظمی در چرخش زمین، ذوب شدن و انجماد مجدد کلاهک‌های یخی در بلندترین کوه‌های جهان است. این پدیده را می توان به سادگی با فکر کردن به یک اسکیت باز در حال چرخش، که با کنترل بازوها و دستان خود، سرعت زاویه ای را مدیریت می کند، تجسم کرد. همانطور که آنها بازوهای خود را باز می کنند، سرعت زاویه ای کاهش می یابد و حرکت اسکیت باز حفظ می شود. به محض اینکه اسکیت باز بازوهای خود را به عقب برگرداند، سرعت زاویه ای افزایش می یابد.

برای تجسم تغییر سرعت زاویه ای، به یک اسکیت باز در حال چرخش فکر کنید.

تاکنون فقط ثانیه های کبیسه مثبت اضافه شده است. در روزهای اولیه، این کار با افزودن یک ثانیه اضافی انجام می‌شد که منجر به یک مهر زمانی غیرمعمول می‌شد:

23:59:59 -> 23:59:60 -> 00:00:00

در بهترین حالت، چنین جهشی زمانی برنامه‌ها را از کار می‌اندازد یا حتی داده‌ها را خراب می‌کند، به دلیل زمان‌های عجیب و غریب در ذخیره‌سازی داده‌ها.

با تغییر الگوی چرخش زمین، به احتمال بسیار زیاد در مقطعی در آینده به یک ثانیه جهشی منفی خواهیم رسید. سپس مهر زمانی به شکل زیر خواهد بود:

23:59:58 -> 00:00:00

تاثیر یک ثانیه کبیسه منفی هرگز در مقیاس بزرگ آزمایش نشده است. این می تواند تأثیر مخربی بر نرم افزار با تکیه بر تایمرها یا زمان بندی ها داشته باشد.

در هر صورت، هر ثانیه کبیسه برای افرادی که زیرساخت‌های سخت‌افزاری را مدیریت می‌کنند، منبع دردناکی است.

لکه دار کردن

اخیراً، “لکه کردن” یک ثانیه کبیسه با کاهش سرعت یا افزایش سرعت ساعت به یک روش معمول تبدیل شده است. هیچ راه جهانی برای انجام این کار وجود ندارد، اما در متا، ثانیه کبیسه را در طول 17 ساعت، از ساعت 00:00:00 UTC شروع می کنیم. بر اساس داده های منطقه زمانی (tzdata) محتوای بسته.

ثانیه کبیسه
لکه گیری دوم در متا.

بیایید این را کمی تفکیک کنیم.

ما یک مدت زمان 17 ساعت را در درجه اول به این دلیل انتخاب کردیم که لکه گیری در Stratum 2 اتفاق می افتد، جایی که صدها NTP سرورها لکه گیری را همزمان انجام می دهند. برای اطمینان از اینکه تفاوت بین آنها قابل تحمل است، مراحل باید حداقل باشد. اگر مراحل لکه گیری خیلی بزرگ باشد، مشتریان NTP ممکن است برخی از دستگاه ها را معیوب بدانند و آنها را از حد نصاب حذف کنند، که ممکن است منجر به قطع شود.

نقطه شروع در ساعت 00:00:00 UTC نیز استاندارد نیست و گزینه های ممکن زیادی وجود دارد. به عنوان مثال، برخی از شرکت ها شروع به لکه گیری در ساعت 12:00:00 UTC روز قبل و در طول 24 ساعت می کنند. برخی این کار را دو ساعت قبل از رویداد انجام می دهند و برخی دیگر درست در لبه.

همچنین الگوریتم های مختلفی روی خود لکه گیری وجود دارد. تصحیح دوم جهشی هسته، لکه گیری خطی (در صورت اعمال مراحل مساوی)، کسینوس و درجه دوم (که متا از آن استفاده می کند) وجود دارد. الگوریتم ها بر اساس مدل های ریاضی مختلف هستند و نمودارهای افست متفاوتی را تولید می کنند:

ثانیه کبیسه
آغشته کردن دوم کرنل با NTPD

منبع نشانگر جهش بین صورت فلکی GNSS (به عنوان مثال، GPS، GLONASS، Galileo، و BeiDou) متفاوت است. در برخی موارد چندین ساعت قبل از طریق ماهواره ها پخش می شود. در موارد دیگر، زمان در UTC با جهش از قبل اعمال شده منتشر می شود. در صورت فلکی مختلف، مقدار دوم کبیسه بسته به زمان پرتاب متفاوت است.

ثانیه کبیسه
تفاوت در مقادیر ثانیه کبیسه بین صورت فلکی GNSS.

همه اینها مستلزم منطق تبدیل غیر پیش پا افتاده در منابع زمانی، از جمله منابع خود ما است دستگاه زمان. از دست دادن سیگنال GNSS در چنین زمان حساسی ممکن است منجر به از دست دادن یک نشانگر جهشی و وضعیت تقسیم مغز شود که می تواند منجر به قطع شود.

رویداد جهشی نیز ماهها قبل از طریق بسته tzdata منتشر می شود و برای طرفداران ntpd از طریق یک فایل دوم جهشی از طریق وب سایت کارگروه مهندسی اینترنت (IETF) توزیع شده است. نداشتن یک کپی جدید از فایل ممکن است منجر به فراموشی یک ثانیه کبیسه و ایجاد قطعی شود.

همانطور که قبلا ذکر شد، لکه گیری یک لحظه بسیار حساس است. اگر سرور NTP در این مدت راه‌اندازی مجدد شود، احتمالاً با زمان «قدیمی» یا «جدید» مواجه می‌شویم که ممکن است به کلاینت‌ها منتشر شود و منجر به قطع شود.

به دلیل چنین ابهاماتی، استخرهای عمومی NTP لکه گیری نمی کنند، گاهی اوقات یک نشانگر جهشی را به مشتریان ارسال می کنند تا متوجه این موضوع شوند. کلاینت‌های SNTP معمولاً در نهایت با عواقبی که قبلاً توضیح داده شد دست و پنجه نرم می‌کنند. مشتریان باهوش تر ممکن است یک استراتژی پیش فرض را برای لکه دار کردن جهش به صورت محلی انتخاب کنند. در مجموع، این بدان معناست که بازیکنان بزرگی مانند متا، که در خدمات عمومی لکه گیری می کنند، نمی توانند به استخرهای عمومی بپیوندند.

و حتی پس از رویداد جهشی، همه چیز همچنان در خطر است. نرم‌افزار NTP باید دائماً در مقایسه با منبع زمانی که از آن استفاده می‌کند (GNSS، TAI یا ساعت اتمی) افست را اعمال کند و نرم‌افزار PTP باید به اصطلاح پرچم افست UTC را در پیام‌های اعلام منتشر کند.

تاثیر منفی ثانیه های کبیسه

ثانیه جهشی و جبران آن باعث ایجاد مشکلاتی در سراسر صنعت می شود. یکی از ساده‌ترین راه‌ها برای ایجاد خاموشی این است که با فرض زمانی که همیشه به جلو می‌رود، پخت و پز را انجام دهید. بگویید ما یک کد مانند این داریم:

start := time.Now()

// کاری بکنید

صرف شده := time.Now().Sub(شروع)

بسته به نحوه صرف کرد استفاده می شود، ممکن است در طی یک رویداد دوم جهشی در موقعیتی قرار بگیریم که بر یک مقدار منفی تکیه می کند. چنین فرضیاتی باعث قطعی های متعدد شده است و مقالات زیادی وجود دارد که این موارد را توصیف می کند.

در سال 2012، Reddit با تجربه قطعی عظیم به دلیل یک ثانیه کبیسه؛ سایت برای 30 تا 40 دقیقه غیر قابل دسترسی بود. این زمانی اتفاق افتاد که تغییر زمان تایمر با وضوح بالا (hrtimer) را گیج کرد و باعث ایجاد بیش فعالی در سرورها شد که CPU ماشین ها را قفل کرد.

در سال 2017، Cloudflare یک مطلب بسیار ارسال کرد مقاله مفصل در مورد تأثیر یک ثانیه کبیسه بر DNS عمومی شرکت. علت اصلی اشکالی که سرویس DNS آنها را تحت تأثیر قرار داد این باور بود که زمان نمی تواند به عقب برگردد. کد مقادیر زمان بالادست را گرفت و به تابع rand.Int63n() Go فرستاد. تابع rand.Int63n () به سرعت دچار وحشت شد زیرا آرگومان منفی بود که باعث از کار افتادن سرور DNS شد.

حرکت فراتر از ثانیه کبیسه

رویدادهای دوم جهشی باعث ایجاد مشکلاتی در سراسر صنعت شده است و همچنان خطرات زیادی را به همراه دارد. به عنوان یک صنعت، هر زمان که یک ثانیه کبیسه معرفی شود، با مشکل مواجه می شویم. و از آنجا که این یک رویداد بسیار نادر است، هر بار که اتفاق می افتد جامعه را ویران می کند. با تقاضای فزاینده برای دقت ساعت در تمام صنایع، ثانیه کبیسه در حال حاضر بیشتر از اینکه خوب باشد، خسارت وارد می‌کند و منجر به اختلالات و قطع برق می‌شود.

به عنوان مهندسان متا، ما از یک جامعه بزرگتر برای متوقف کردن معرفی ثانیه های کبیسه در آینده و باقی ماندن در سطح فعلی 27 حمایت می کنیم، که معتقدیم برای هزاره آینده کافی خواهد بود.

لینک منبع

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.