چگونه Roblox نقصهای زیرساخت توزیعشده توسط HashiCorp را تعقیب و رفع کرد که باعث قطعی سه روزه در سراسر جهان شد.
در اواخر اکتبر، شبکه جهانی بازی آنلاین Roblox از کار افتاد، قطعی که سه روز به طول انجامید. این سایت روزانه توسط ۵۰ میلیون گیمر استفاده می شود. کشف و رفع دلایل اصلی این اختلال نیازمند تلاش گسترده مهندسان Roblox و تامین کننده اصلی فناوری آنها، HashiCorp است.
Roblox در نهایت تجزیه و تحلیل شگفت انگیزی را در یک پست وبلاگ در پایان ژانویه. همانطور که مشخص شد، Roblox توسط یک تصادف عجیب چندین رویداد گاز گرفته شد. فرآیندهایی که Roblox و HashiCorp برای تشخیص و در نهایت اصلاح موارد طی کردند، برای هر شرکتی که نصب زیرساخت بهعنوان کد در مقیاس بزرگ را اجرا میکند یا از کانتینرها و ریزسرویسها در زیرساختهای خود استفاده میکند، آموزنده است. p>
تعدادی از درسهایی وجود دارد که باید از قطع شدن Roblox آموخت.
Roblox همه چیز را در پشته نرم افزار HashiCorp وارد کرد.
بازیهای آنلاین انبوه چندنفره Roblox در سرتاسر جهان توزیع میشوند تا کمترین تأخیر شبکه ممکن را فراهم کنند تا از یک میدان بازی منصفانه در میان بازیکنانی که ممکن است از مکانهای دور در حال اتصال هستند اطمینان حاصل شود. از این رو Roblox از کنسول HashiCorp، Nomad و Vault برای مدیریت مجموعه ای از بیش از ۱۸۰۰۰ سرور و ۱۷۰۰۰۰ کانتینر که در سراسر جهان توزیع شده اند استفاده می کند. نرم افزار Hashi برای کشف و زمان بندی بارهای کاری و ذخیره و چرخاندن کلیدهای رمزگذاری استفاده می شود.
راب کامرون، مدیر فنی زیرساخت Roblox، ارائه در کنفرانس کاربران HashiCorp 2020 درباره نحوه استفاده شرکت از این فناوری ها و اینکه چرا آنها برای مدل کسب و کار شرکت ضروری هستند (لینک شما را به متن و ویدئو می برد. ضبط). کامرون گفت: “اگر در ایالات متحده هستید و می خواهید با کسی در فرانسه بازی کنید، ادامه دهید. ما آن را کشف خواهیم کرد و با قرار دادن سرورهای محاسباتی تا حد امکان به بازیکنان، بهترین تجربه ممکن از بازی را به شما ارائه خواهیم کرد.”
تیم مهندسی Roblox در ابتدا مجموعهای از سرنخهای نادرست را دنبال کردند.
در ردیابی علت قطع، مهندسان ابتدا متوجه یک مشکل عملکردی شدند و یک خوشه سخت افزاری بد را فرض کردند که با سخت افزار جدید جایگزین شد. هنگامی که عملکرد همچنان ضعیف بود، آنها نظریه دومی را در مورد ترافیک سنگین ارائه کردند و کل کلاستر Consul با دو برابر هسته های CPU (از ۶۴ هسته به ۱۲۸) و حافظه SSD سریعتر ارتقا یافت. تلاشهای دیگری از جمله بازیابی از یک عکس فوری سالم قبلی، بازگشت به سرورهای ۶۴ هستهای و ایجاد سایر تغییرات پیکربندی انجام شد. اینها نیز ناموفق بودند.
درس شماره ۱: اگرچه مشکلات سخت افزاری در مقیاسی که Roblox کار می کند غیر معمول نیست، گاهی اوقات شهود اولیه برای سرزنش یک مشکل سخت افزاری ممکن است اشتباه باشد. همانطور که خواهیم دید، خاموشی به دلیل ترکیبی از خطاهای نرم افزاری بود.
مهندسین Roblox و HashiCorp در نهایت دو علت اصلی پیدا کردند.
اولین اشکال در BoltDB بود، یک پایگاه داده منبع باز که در Consul برای ذخیره داده های گزارش خاص استفاده می شد، که به درستی استفاده از دیسک را پاک نمی کرد. این مشکل به دلیل بار غیرمعمول زیاد در ویژگی جدید استریم Consul که اخیراً توسط Roblox عرضه شده بود تشدید شد.
درس شماره ۲: همه چیز قدیمی دوباره جدید است. چیزی که در مورد این دلایل جالب بود این است که آنها با همان نوع مسائل مدیریت منابع سطح پایین مرتبط بودند که طراحان سیستم ها را از اولین روزهای محاسبات درگیر خود کرده بودند. BoltDB نتوانست فضای ذخیرهسازی دیسک را آزاد کند زیرا دادههای گزارش قدیمی حذف شدند. استریم کنسول تحت بارهای بسیار بالا با مناقشه نوشتن مواجه شد. دستیابی به علت اصلی این مشکلات مستلزم دانش عمیق در مورد نحوه ردیابی صفحات رایگان در سیستم فایل BoltDB و نحوه استفاده Consul streaming از Go Concurrency است.
امروزه افزایش مقیاس به معنای چیزی کاملاً متفاوت است.
هنگام اجرای هزاران سرور و کانتینر، مدیریت دستی و فرآیندهای نظارت واقعاً ممکن نیست. نظارت بر سلامت چنین شبکه پیچیده و مقیاس بزرگی نیازمند رمزگشایی داشبوردهایی مانند موارد زیر است:
درس شماره ۳: هر ارائهدهنده خدمات در مقیاس بزرگ باید روالهای اتوماسیون و هماهنگسازی را توسعه دهد که بتواند به سرعت خرابیها یا مقادیر غیرعادی را قبل از اینکه کل شبکه را از بین ببرد، به صفر برساند. برای Roblox، تغییرات صرفاً میلیثانیهای تأخیر مهم است، به همین دلیل است که از پشته نرمافزار HashiCorp استفاده میکنند. اما نحوه تقسیم بندی خدمات نیز بسیار مهم است. Roblox تمام خدمات back-end خود را بر روی یک Consul Cluster اجرا کرد و این به یک نقطه شکست برای زیرساخت آن تبدیل شد. Roblox از آن زمان مکان دومی را اضافه کرده و شروع به ایجاد چندین منطقه در دسترس برای افزونگی بیشتر خوشه کنسول خود کرده است.
یکی از دلایلی که Roblox از HashiStack استفاده می کند، کنترل هزینه ها است.
«ما زیرساختهای اساسی خود را بهصورت پیشفرض میسازیم و مدیریت میکنیم، زیرا در مقیاسی که میدانیم با رشد پلتفرم خود به آن دست خواهیم یافت، توانستهایم هزینهها را در مقایسه با استفاده از ابر عمومی به طور قابل توجهی کنترل کنیم و تأخیر شبکه خود را مدیریت کنیم. Roblox در پست وبلاگ خود نوشت. “HashiStack a>” یک راه کارآمد برای مدیریت یک شبکه جهانی از خدمات است و به Roblox اجازه می دهد تا به سرعت حرکت کند—آنها می توانند سایت های چند گره را در چند روز بسازند. کامرون در سخنرانی خود در سال ۲۰۲۰ گفت: “با HashiStack، ما یک الگوی طراحی تکرارپذیر برای اجرای بارهای کاری خود بدون توجه به اینکه می رویم داریم.” با این حال، بیش از حد به یک خوشه کنسول وابسته بود – نه تنها کل زیرساخت Roblox، بلکه نظارت و تله متری مورد نیاز برای درک وضعیت آن زیرساخت.
درس شماره ۴: مهارت های اشکال زدایی شبکه برتر است. اگر نمیدانید در زیرساخت شبکهتان چه میگذرد، باید نان تست کنید. اما اشکال زدایی هزاران میکروسرویس فقط بررسی گزارش های روتر نیست. این نیاز به یک فرو رفتن عمیق در چگونگی تناسب قطعات مختلف با هم دارد. این به ویژه برای Roblox چالش برانگیز بود زیرا آنها کل زیرساخت خود را بر روی سخت افزار سرور سفارشی خود ساخته بودند. و از آنجا که یک وابستگی دایره ای بین سیستم های نظارتی Roblox و کنسول وجود داشت. پس از آن، Roblox این وابستگی را حذف کرد و تله متری خود را گسترش داد تا دید بهتری به عملکرد کنسول و BoltDB و الگوهای ترافیک بین خدمات Roblox و کنسول ارائه دهد.
در مورد قطعی های خود با مشتریان خود شفاف باشید.
این به معنای چیزی بیشتر از گفتن است “ما خراب بودیم، اکنون دوباره آنلاین شده ایم.” جزئیات برای برقراری ارتباط مهم هستند. بله، Roblox بیش از دو ماه طول کشید تا داستان خود را منتشر کند. اما سندی که آنها تهیه کردند، به بررسی مشکلات پرداختند، شروع اشتباه آنها را نشان داد، و توضیح داد که چگونه تیم های مهندسی در Roblox و HashiCorp با یکدیگر برای حل مشکلات همکاری کردند، طلای خالص است. این الهام بخش اعتماد به Roblox، HashiCorp، و تیم های مهندسی آنها است.
وقتی به روابط عمومی HashiCorp ایمیل زدم، آنها پاسخ دادند، “به دلیل نقش مهمی که نرم افزار ما در محیط های مشتری بازی می کند، ما به طور فعال با مشتریان خود شریک می شویم تا بهترین شیوه های توصیه شده و راهنمایی های پیشگیرانه خود را در معماری محیط آنها ارائه دهیم.” امیدواریم ارائهدهنده زیرساختهای حیاتی شما در زمان وقوع قطعی بعدی شما به همان اندازه مایل باشد.
واضح است که Roblox در حال بررسی مواردی بود که HashiStack میتوانست ارائه دهد، اما خبر خوب این است که آنها مشکلات را کشف کردند و در نهایت آنها را برطرف کردند. یک قطع سه روزه نتیجه خوبی نیست، اما با توجه به اندازه و پیچیدگی زیرساخت Roblox، با این وجود، این یک دستاورد عالی بود. و حتی برای محیطهای پیچیدهتر نیز درسهایی برای آموختن وجود دارد، جایی که برخی از کتابخانههای نرمافزاری ممکن است هنوز یک اشکال سطح پایین را پنهان کنند که ناگهان در آینده آشکار میشود.
پست های مرتبط
فاجعه بومی ابر Roblox: یک مرگ پس از مرگ
فاجعه بومی ابر Roblox: یک مرگ پس از مرگ
فاجعه بومی ابر Roblox: یک مرگ پس از مرگ