پرش به محتوای اصلی

در بازی نام دامنه شرم نیست: DNS به معنای واقعی کلمه محکوم به فنا است

دِ رجیستر۱۴۰۵ مهر ۲۰, دوشنبه، ساعت ۱۹:۵۷حدود 5 دقیقه مطالعه

کمی سرگرم کننده هستید؟ همیشه DNS است

DNS چیست؟ درست است، این یک پایگاه داده است. شما می توانید با من مخالف باشید، اما اشتباه می کنید. چه چیزی را می توانید در یک پایگاه داده قرار دهید؟ رشته ها، ints (و اگر شناسه حساب AWS شما صفر اول باشد، تفاوت را به سرعت یاد می گیرید!)، اشیاء JSON، مختصات. برخی از پایگاه‌های داده‌ای که در آنجا وجود دارند، انواع بسیار باطنی دارند. PostgreSQL از حلقه، چند ضلعی، macaddr8 و tsquery پشتیبانی می کند. Oracle یک ROWID و منزلت شما را ذخیره می کند. در یک کلام، پایگاه های داده داده ها را ذخیره می کنند. آیا می توانید پاسخ ها را در پایگاه داده قرار دهید؟ خوب مطمئن می توانید ثبت کنید که "3 + 2 برابر است با 5" و آن پاسخ را ذخیره کنید.

شما می توانید همین کار را با عملگرهای مقایسه انجام دهید. "3 بزرگتر از 2 است" و غیره. یک قدم جلوتر بروید و با پایگاه داده خود چیزی ساخته اید: یک ماشین حساب بسیار ناخوشایند. بنابراین اکنون ثابت کرده ایم که می توانید حساب و تصمیمات را در یک پایگاه داده ذخیره کنید. و با آن چیزها چه کنیم؟ درست است، ما می توانیم دستورالعمل ها را دنبال کنیم! کار خوب! و دستورالعمل های زیر چه نیازی دارد؟ به طور کلی، حافظه؛ مکانی برای ذخیره اعداد، دستورالعمل های شما و دستورالعمل بعدی. اگر فقط جایی برای نگهداری آن چیزها داشتیم. اوه درست است، ما انجام می دهیم. ما یک پایگاه داده داریم!

حالا این جستجوها را به هم وصل کنید. یک دستورالعمل را بخوانید، یک پاسخ را جستجو کنید، نتیجه را ذخیره کنید، در صورت نیاز تکرار کنید. پس ما چه ساخته ایم؟ درست است: یک کامپیوتر! و کامپیوتر چه چیزی را می تواند اجرا کند؟ برنامه ها! من، تو در این کار خیلی خوب هستی و حالا، خواننده ی مهربان: ظاهرا ما چه برنامه ای را موظف به اجرا در هر رایانه ای داریم؟ اوه بله، اگرچه بسیاری از شما می‌خواهید عقب بنشینید و به جای آن بگویید "اوه نه" تا زمانی که دوره‌های ترسناک از شما عبور می‌کند. من در مورد Doom صحبت می کنم. همین نشریه با من موافق است!

من چه کار کرده ام؟ درست است؛ من Doom را برای یک ماشین 32 بیتی کامپایل کرده ام که محاسبات و حافظه آن در DNS است. یک برنامه کوچک سیم‌کشی و ساعت را تامین می‌کند، که معماران DNS مناسب نمی‌دانستند که شامل هیچ‌کدام از آنها باشند. اما DNS پاسخ ها را ارائه می دهد. بنابراین، آیا می توانیم Doom را بازی کنیم؟ فقط در صورتی که نوبتی باشد. به هر حال در مقیاس های زمانی انسانی ارائه نمی شود. در اولین تلاشم، Right را فشار دادم و سپس 577 ثانیه منتظر ماندم تا بفهمم چه اتفاقی افتاده است.

با استفاده از حمل و نقل بومی، خط لوله، بسته بندی رجیسترها و بهینه سازی بلوک های دستورالعمل، قبل از برخورد با دیوار توانستم آن را به 146 ثانیه کاهش دهم. BIND در حدود 7 میکرو ثانیه در هر پرس و جو از طریق TCP و 4 میکروثانیه روی UDP پاسخ می دهد که سریع است. مشکل این است که یک افزوده 32 بیتی چهار جستجوی DNS است، یک شعبه 5 است، و یک فریم به 6.6 میلیون مورد نیاز دارد، بنابراین از سروری استفاده نکنید که به ازای هر درخواست شارژ می شود.

و وقتی BIND آنطور که ما می خواهیم عمل نمی کند، چه کار می کنیم؟ من نمی‌دانم شما چه می‌کنید، اما من کدم را منتشر می‌کنم، سپس با Paul Vixie، پیشگام DNS و معمار BIND 8 تماس می‌گیرم تا به‌طور غیر قابل توجیه شکایت کنم. سپس ظاهرا پل به من به خاطر "بهترین استفاده از RFC 2136 DNS UPDATE" که تا به حال دیده بود، تبریک می گوید. با توجه به اینکه او یکی از نویسندگان آن RFC است، من گمان می کنم که او زیاد دیده است! که خوشحال کننده بود، اما بی فایده بود. بنابراین اجازه دهید یک شکاف دیگر در آن داشته باشیم. چه می شود اگر پیش بینی کنم؟ فکر خوب، نتیجه بد، زیرا BIND با تعداد پیام ها محدود می شود، نه عمق زنجیره.

خوب، من چند ترفند دیگر در کیسه بزرگ ایده های احمقانه ام دارم. بنابراین من کمی جلوتر رفتم و از طریق تخصیص رجیسترها به DNS کمتر، انتقال جستجوها به UDP، گفتن به BIND برای متوقف کردن پر کردن پاسخ‌ها با سوابق معتبر، و نیاز به جستجوی کمتر در هر دستورالعمل، در نهایت توانستم زمان فشار را از 577 ثانیه به 146.3 ثانیه به 54 x 4 بهبود دهم. و حالا فکر می کنم به دیوار برخورد کرده ام.

حتی در یک تبادل DNS در هر دستورالعمل (که به مراتب بهتر از هر چیزی است که به طور واقعی قابل دستیابی است)، 1.4 میلیون دستورالعمل در تقریبا 10 میکرو ثانیه هر کدام 14 ثانیه در هر تیک است. Doom می گوید نرخ تیک آن 35 در ثانیه است، بنابراین "قابل پخش" هر 28.6 میلی ثانیه یک تیک است. من در 54000 میلی‌ثانیه باقی می‌مانم که سه مرتبه با پیروزی فاصله دارد. خوب جدی، چی؟ این کار مشروع است. هر commit یک RFC 2136 UPDATE با یک نیاز سخت است: شکست می خورد مگر اینکه حالت قبلی دقیقا همان چیزی باشد که آخرین نوشته شده است.

ظاهرا افراد پایگاه داده "واقعی" آن را همزمانی خوش بینانه یا مقایسه و تعویض می نامند. شوخی با شما دوستان. DNS از سال 1997 همراه با آن ارسال شده است. پایگاه داده پایین تری دارید؟ پایگاه داده خود 6.4 میلیون ردیف جداول حقیقت است. ff.01.0.add "001" را نگه می دارد: 255 به اضافه 1 00 حمل 1 است. DNS فقط به عنوان یک کتابدار در اینجا عمل می کند، پاسخ های حفظ شده برای هر سوال حسابی در محدوده را می گیرد و در صورت درخواست پاسخ را برمی گرداند. همچنین قابل تایید است! فریمی که به بیرون ریخته می‌شود روی هر پیکسل در مقابل یک شبیه‌ساز مستقل بررسی می‌شود.

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

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

بنابراین، در عوض، این هیولا را به عنوان یک پایگاه داده با مقدار کلید خوانده شده، نوشتن شرطی و 6.4 میلیون ردیف از پاسخ های از پیش محاسبه شده در نظر بگیرید. این واقعا یک کامپیوتر نیست. این به سادگی یک پایگاه داده بسیار خوب است. و معلوم می شود که کافی است. ®

خواندن متن کامل در دِ رجیستربه زبان اصلی، در سایت ناشر باز می‌شود
متن اصلی (انگلیسی)

No shame in the Domain Name game: DNS is doomed, literally

Fancy a bit of fun? It's always DNS

همه‌ی اخبار فناوری