پس از قطعی 6 ساعته پلتفرمهای فیسبوک، اینستاگرام و واتساپ که همگی متعقل به مارک زکربرگ، میلیاردر مشهور سیلیکون ولی و صاحب فیسبوک هستند، سیل انتقادات به این مجموعه وارد شد.
این قطعی تاثیر مخربی بر بسیاری از کسبوکارها و البته سهام این 3 شرکت و ثروت شخصی مارک زکربرگ گذاشت.
پس از رفع مشکل، Santosh Janardhan که از اعضای این مجموعه است، توضیحاتی را در سایتFacebook Engineering ارائه کرد که در ادامه آنها را میخوانیم:
دلیل قطعی پلتفرمهای فیسبوک از زبان متخصصین این مجموعه
Santosh Janardhan:
این قطعی از سیستمی ناشی میشد که شبکه جهانی ما را شکل میدهد (Backbone Network). سیستمی که برای اتصال تمام ادوات محاسباتی فیسبوک در سرتاسر جهان ساخته شده است. این سیستم متشکل از دهها هزار کیلومتر کابل فیبر نوری است که تمام دیتاسنترهای ما در سرتاسر جهان را به هم متصل میکند.
دیتاسنترهای ما در انواع مختلفی وجود دارند. برخی از آنها ساختمانهای بسیار بزرگی هستند که از میلیونها دستگاه برای ذخیرهسازی دادهها و انجام محاسبات سنگین میزبانی میکنند. در نقطه مقابل، برخی دیگر مجموعههای کوچکتری هستند که سیستم اتصال و ارتباط (همان Backbone Network) ما را به اینترنت و افرادی که از پلتفرمها استفاده میکردند وصل میکنند.
وقتی شما یکی از اپلیکشینهای ما را روی تلفن همراهتان باز و پیامها یا صفحه فیدتان را لود میکنید، درخواستی از جانب اپلیکیشن به نزدیکترین دیتاسنتر فرستاده میشود تا اطلاعات لازم را به موبایل شما ارسال کند.
این درخواستها و اطلاعات از طریق Backbone Network به دیتاسنترهای عظیم فرستاده میشوند. به این ترتیب است که شما میتوانید از اپلیکیشنهای ما استفاده کنید و پیامها و پستهای دیگران را روی موبایلتان داشته باشید.
این حجم بالا از ترافیک بین مجموعههای محاسباتی، توسط روترها مدیریت میشوند. این دستگاهها وظیفه دارند که بفهمند دیتاهای ورودی و خروجی باید به کجا فرستاده شوند. طبیعی است که چنین سیستم تبادل اطلاعاتی عظیمی نیاز به نگهداری دائمی دارد. در برخی مواقع، مهندسین ما مجبور میشوند بخشی از این سیستم را از شبکه خارج کنند تا بتوانند تعمیرات و تغییرات لازم را اعمال کنند.
مثلاً تعمیر فیبر نوری، افزایش ظرفیت یا بهروزرسانی نرمافزاری که روی روتر نصب شده است.
دلیل قطعی رخ داده در چهارم اکتبر هم همین نگهداریهای همیشگی و روتین بود! طی انجام کار، یکی از فرمانهای مرتبط با بررسی ظرفیت سیستم Backbone دچار مشکل شد. همین اتفاق بهصورت ناخواسته تمام شبکه را قطع کرد؛ به بیانی دیگر، تمام دیتاسنترهای فیسبوک در سرتاسر دنیا از دسترس خارج شدند.
البته ما از قبل برنامههایی را برای جلوگیری از بروز چنین اتفاقاتی پیشبینی کرده بودیم، اما مشکل اصلی این بود که این برنامهها هم دچار اختلال شدند و نتوانستند بر اجرای درست دستور مشکلساز نظارت کنند.
این مشکل منجر به قطع کامل اتصال بین سرورها، دیتاسنترها و اینترنت شد. متاسفانه این قطعی همهجانبه، مشکل دیگری را ایجاد کرد که شرایط را از قبل هم بدتر کرد.
مشکل پشت مشکل!
یکی از وظایف دیتاسنترهای کوچکتر ما، پاسخ به درخواستهای DNS است. همانطور که میدانید، DNS مثل دفترچه تلفن دنیای اینترنت است. (میتوانید مقاله DNS چیست را بخوانید)
به بیان ساده، وظیفه آن تبدیل نام سایتی است که ما در نوار آدرس مرورگرمان مینویسیم. تبدیل آنها به آدرس آیپی که زبان کامپیوترها برای شناسایی یکدیگر است. نِیمسرورهای ما که آدرسهای آیپی شناختهشده را در خود دارند، به این ترجمهها پاسخ میدهند.
اینجا پروتکل دیگری با نام BGP وارد عمل میشود.
BGP چیست؟
این عبارت مخفف Border Gateway Protocol است و بهعنوان یک پروتکل مسیریابی در اینترنت شناخته میشود. در واقع این پروتکل، همچون نقشهای عمل میکند که بهترین مسیر را از مبداء تا مقصد مشخص میکند و چگونگی برقراری ارتباط بین روترها برای انتشار انتقال اطلاعات را معلوم میکند. بدون BGP، روترها نمیدانند چه باید بکنند و به زبان ساده، اینترنت کار نخواهد کرد.
اینترنت شبکهای است که از شبکههای دیگر تشکیل شده و توسط BGP کنار یکدیگر قرار گرفتهاند. BGP به یک شبکه (مثلا فیسبوک) کمک میکند تا حضورش را به دیگر شبکههای موجود در اینترنت نمایش دهد. در زمان قطعی، فیسبوک نمیتوانست این کار را انجام دهید و به همین خاطر، هیچ شبکه دیگری نمیتوانست آن را روی اینترنت پیدا کند. درست مثل اینکه تمام دیتاسنترهای این مجموعه از برق کشیده شده و خاموش باشند.
هر شبکهای در BGP، یک شماره AS دارد (ASN). مثلاً ASN گرینوب 61173 است.
در پروتکل BGP، روترهای مرکزی با یکدیگر Peer میشوند و حضور خود را در دنیای اینترنت اعلام میکنند. در واقع فیسبوک، حضور خود در دنیای اینترنت را از طریق BGP به دیگر کامپیوترها اعلام میکرد؛ اما در زمان قطعی، این کار انجام نمیشد و گویی چنین سایتی در اینترنت وجود ندارد.
بنا به گزارش Cloudflare، در ساعت 15:58 دقیقه بهوقت محلی در روز حادثه، فیسبوک دیگر مسیر پیشوندهای DNS را به اینترنت معرفی نمیکرد؛ یعنی در بهترین حالت، سرورهای DNS این سایت از دسترس خارج شده بودند. به همین خاطر، سرورهای فیسبوک با هیچ آیپیای شناسایی نمیشدند.
در حالی که باقی آدرسهاسی آیپی فیسبوک بهدرستی مسیریابی میشدند، اما از آنجایی که DNS و دیگر سرویسهای مربوطه از دسترس خارج بودند، این مسیریابی عملاً فایدهای بهدنبال نداشت.
معمولاً تغییراتی که BGP سایتها رخ میدهد، نرخ تغییر بسیار کوچکی دارد؛ اما در حوالی ساعت 15:40 بهوقت محلی، BGP فیسبوک تغییرات بیسابقهای را شاهد بود. دقیقاً زمانی که مشکل آغاز شد.
بهجهت توقف نمایش آیپیهای DNS فیسبوک، هیچ DNS resolversای در اینترنت راهی برای پیدا کردن و متصل شدن به سرورهای فیسبوک نداشت. بههمین خاطر، resolverهای اصلی مثل 1.1.1.1 شروع به نمایش پاسخهای SERVFAIL کردند.
سپس یک سونامی از درخواستهای DNS بهوجود آمد. مرورگرها و اپلیکیشنهای مختلف این پاسخ را نمیپذیرفتند و به تلاش برای اتصال ادامه میدادند. از طرفی، کاربران هم باور نمیکردند که اختلال جهانی باشد و با رفرش کردن مداوم سایتها و برنامهها، باعث تشدید اختلال در دنیای اینترنت شدند.
نمودار زیر، افزایش ترافیک (تعداد درخواستها) در 1.1.1.1 را نشان میدهد:
در ضمن این قطعی، ترافیک زیادی را روانه اپلیکیشنهای رقبای فیسبوک کرد. شاید برای جایگزینی، شاید هم برای بررسی اخبار و دلایل قطعی از آنها. نمودار زیر افزایش ترافیک سیگنال، توییتر، تلگرام و تیکتاک را نشان میدهد:
در نهایت حوالی ساعت 21 به وقت محلی بود که فیسبوک و واتساپ و اینستاگرام به چرخه خدماترسانی بازگشتند و مشکل برطرف شد. همانطور که در نمودار زیر مشاهده میکنید، ترافیک شدیدی روانه سرورهای این مجموعه شد:
نمودار زیر ساعتهایی را نشان میدهد که فیسبوک از دسترس خارج شد. همچنین زمان بازگشت مجدد هم در تصویر مشخص است:
برگردیم سراغ توضیحات Santosh Janardhan از این ماجرا:
امنیت شدید روند بازگردانی را کند کرد!
در قطعی اخیر، تمام Backbone از چرخه عملیاتی خارج شد. در نهایت، با وجود اینکه سرورهای DNS همچنان در حال فعالیت بودند، از دسترس خارج شدند. به همین خاطر، پیدا کردن سرورهای ما برای کل کامپیوترهای متصل به اینترنت غیرممکن شد.
تمام این اتفاقات در عرض یک چشمبههم زدن رخ داد. وقتی مهندسان ما شروع به عیبیابی کردند، با دو مانع اصلی روبهرو شدند:
- امکان دسترسی به دیتاسنترها به شکل نرمال ممکن نبود؛ چراکه شبکههای آنها از دسترس خارج شده بودند.
- قطعی DNS بسیاری از ابزارهایی که در این مسائل به ما کمک میکردند را هم از دسترس خارج کرد.
دسترسی اصلی ما به شبکه قطع شده بود. به همین خاطر مجبور شدیم مهندسینمان را بهصورت حضوری به دیتاسنترها بفرستیم تا مشکل را رفع و سیستمها را ریاستارت کنند؛ اما خب انجام این کار زمانبر بود؛ چراکه تمام این فضاها با پروتکلهای امنیتی سطح بالا محافظت میشوند. ورود به آنها و انجام تغییرات لازم روی روترها کاری نبود که بتوان آن را بهسرعت انجام داد.
بهمحض اینکه سیستم Backbone Network ما به شبکه بازگشت و دیتاسنترهایمان مجدداً فعال شدند، پلتفرمها هم به چرخه خدماترسانی برگشتند؛ اما خب مشکل کاملاً رفع نشده بود.
برگشت سرویسها در آن واحد و هجوم ترافیک شدید، میتوانست منجر به ایجاد ایرادات جدید شود. گزارشهایی که از هر دیتاسنتر به دست میآمد، نشان میداد که مصرف برق تا دهها مگاوات هم افزایش یافته و این میتوانست به تمام دستگاهها آسیب جدی وارد کند.
خوشبختانه برای این مشکل آمادگی کامل داشتیم. قبلاً بارها چنین شرایطی را شبیهسازی کرده بودیم. به همین خاطر توانستیم بازگشت ترافیک به پلتفرمهایمان را بهخوبی مدیریت کنیم. بهطوری که بدون هیچ مشکلی این کار را انجام دادیم و حالا تمام سرویسها بدون مشکل در حال فعالیت هستند.
Santosh Janardhan میگوید فیسبوک از این اتفاق درس خواهد گرفت
خارج شدن سیستم Global Backbone برای ما تجربهای شد که در آینده برای بروز چنین مشکلاتی هم آماده باشیم.
این اتفاقات ناخوشایند فرصت بسیار مناسبی برای یادگیری و بهتر شدن هستند و قطعیای که پشت سر گذاشتیم برای ما دنیایی از تجربه بههمراه داشت! بعد از وقوع هر مشکلی چه کوچک و چه بزرگ، متخصصین ما آن را از تمام جوانب بررسی میکنند تا دلیل بروز آن را کاملاً درک کنند و از رخ دادن دوباره آن جلوگیری کنند. به شما اطمینان میدهیم که پروسه یادگیری و کسب تجربه از این قطعی بزرگ، هماکنون در حال اجرا شدن است.
ما برای اینکه جلوی دسترسی غیرمجاز به دادهها و دیتاسنترهایمان را بگیریم، پروتکلهای قدرتمند و سختگیرانهای را اعمال کردیم. جالب اینکه همان سختگیریها، سرعت ما را برای برطرف کردن این مشکلات کاهش دادند. جالبتر اینکه مشکل پیش آمده یک حمله خارجی نبود و اشتباهی بود که از جانب خودمان سر زد. معتقدیم رخدادهای اینچنینی باعث میشوند اهمیت سرعت ریکاوری کردن اطلاعات و رفع مشکل در کنار حفظ امنیت بیشتر به چشم بیاید.
از حالا به بعد، وظیفه ما اجرای تستهای بیشتر و کاملتر و افزایش اعتبار سرورهایمان است. به این ترتیب، میتوانیم امکان وقوع چنین اتفاقات ناخوشایندی را تا بیشترین حد ممکن پایین بیاوریم.
نکته جالب اینکه بسیاری از مردم در سرتاسر دنیا فکر میکردند محدودیت از جانب حاکمیت کشورشان اعمال شده است. بر اساس گزارشی از سایفون، همزمان با قطعی این پلتفرم و اپلیکیشنهای وابسته، 1.75 میلیون نفر از برنامه این شرکت استفاده کردند. نمودار نرخ استفاده را در تصویر زیر میبینید:
منبع: Facebook Engineering