یک خط کد که نیمی از اینترنت رو پایین آورد

چند وقت پیش به مدت حدودا یک ساعت و پانزده دقیقه قطعی توی اینترنت اتفاق افتاد که تقریبا نیمی از اینترنت برای بعضی از آدما توی دنیا قابل دسترس نبود. توی این مطلب سعی می‌کنم دلیل قطعی رو بگم و دقیق تر ببینیم چه اتفاقی افتاده.در تاریخ 21 2022 June از ساعت 6:27 UTC تا ساعت 7:42 UTC نیمی از اینترنت از دسترس کاربران خارج میشه که دلیل قطعی مشکلی توی سرور های کلودفلر (cloudflare) بود که باعث شد 19 تا از دیتاسنتر های این شرکت از دسترس خارج بشن.البته این قطعی فقط برای بعضی از کاربران بوده (با توجه به محلی که زندگی می‌کردند) و بقیه کاربران بدون مشکل به اینترنت دسترسی داشتن.اگرچه این 19 تا سرور فقط 4% از کل شبکه کلودفلر رو شامل میشده اما همین قطعی باعث شده که 50% از کل درخواست های داخل شبکه تحت تاثیر قرار بگیرن.همونطوری که می‌دونید سرویس هایی که روی اینترنت داده میشن به شکل کلی یک بخش پردازش دارن (برنامه های سمت سرور بخش اصلی این کار رو می‌کنند) و یک بخش که نیاز به پردازش نداره و فقط فایل های مربوط به اون سرویس ذخیره سازی می‌شه (به عنوان مثال فایل های استاتیک و کد های فرانت) و می‌دونیم که ذخیره سازی از پردازش ارزون تر هست. و این هم می‌دونیم که موقعیت مکانی شما و فاصله شما نسبت به سرور مهم هست.کلودفلر که یک شرکت سرویس دهنده خدمات زیرساخت و شبکه هست، سرویسی به نام CDN یا Content Delivery Network داره.به شکل ساده اگر بخوام بگم کلودفلر تعداد زیادی دیتاسنتر توی نقاط مختلف دنیا داره و مثلا فایل های استاتیک سایت های مختلف رو داخل سرور های این دیتاسنتر ها کپی کرده در نتیجه مثلا وقتی شما می‌خواید به فلان سایت برید که از CDN کلودفلر استفاده می‌کنه با توجه به موقعیت مکانی شما درخواست شما به نزدیک ترین سرور می‌رسه . (مسلما من تخصصی توی شبکه و این شکل از مباحث ندارم و سعی کردم به شکل کلی توضیح بدم . اگر شما به این مسئله مسلط هستید توی کامنت ها می‌تونید بهم بگید که من متن رو اصلاح کنم :) )نکته ای که در مورد اینترنت خوبه بدونیم این هست که اینترنت شبکه ای از کامپیوتر ها نیست و در واقع شبکه ای از شبکه هاست که بهم وصل هستند.پروتکلی به نام BGP وجود داره که وظیفش این هست که داخل شبکه کوتاه ترین مسیر رو پیدا کنه.برای پیدا کردن کوتاه ترین مسیر داخل شبکه باید به ‌ip کامپیوتر ها نگاه کنیم. از روی ip می‌تونیم محل کاربر رو پیدا کنیم و بر اساس همین مورد کوتاه ترین مسیر رو تا رسیدن به مقصد پیشنهاد بدیم.مشکل کلودفلر به خاطر آپدیتی بود که قبل از قطع شدن سرویس ها انجام داده بود.برای پیدا کردن کوتاه ترین مسیر داخل شبکه می‌تونیم بر اساس ip کاربر یکسری سیاست رو مشخص کنیم.کد زیر بخشی از سیاست ها تعیین شده بر اساس ip کاربر رو نشون میده که توی آپدیت کلودفلر تغییر کرده بودن.قسمتی از کد که بررسی می‌کنه بر اساس ای.پی. چه اتفاقی بیوفته. برای پیدا کردن مشکل کافی هست که فقط به این سه خط بیشتر توجه کنیدقسمتی از کد که مشکل قطعی رو ایجاد کرده-به خط اول نگاه کنیدهمونطوری که می‌بینید این قسمت از کد داره پیشوند های ip ها رو بررسی می‌کنه و میگه که اگر این ip با فلان پیشوند بود از کدوم مسیر برده و اگر ip ما توی هیچ کدوم از این شرط ها صدق نکرد reject بشه.اما اگر نگاه کنید بعد از reject دو خط کد دیگه وجود داره که هیچوقت اجرا نمیشن چون قبل از اینکه بررسی بشن reject میشن و همین باعث شده بود که حجم زیادی از درخواست ها reject بشن.عکس زیر رو سایت کلودفلر منتشر کرده که ترافیک شبکه رو در لحظه قطع شبکه و بعد از برگشت شبکه نشون می‌ده.نمودار وضعیت ترافیک شبکه قبل،بعد و در زمان قطعی شبکههمونطور که گفتم تخصص من شبکه نیست در نتیجه سعی کردم چیز هایی رو که از جا های مختلف خونده بودم بهم وصل کنم و توضیح بدم.اگر خواستید خبر رو دقیق‌تر بخونید این گزارش از کلودفلر رو ببینید.