Глобальний збій в онлайн-грі Roblox

Глобальний збій в онлайн-грі Roblox

ІТ

Наприкінці жовтня глобальна мережа онлайн-ігор Roblox вийшла з ладу, що тривало три дні. Сайтом щодня користуються 50 мільйонів гравців. Щоб з’ясувати причини цього збою та усунути його, знадобляться величезні зусилля інженерів проекту та їх основного постачальника технологій HashiCorp.

Наприкінці січня Roblox надав дивовижний аналіз у своєму блозі. Як виявилося, стався дивний збіг кількох подій. Процеси, які проходили Roblox і HashiCorp для діагностики та остаточного вирішення проблем, є глибокими для будь-якої компанії, яка використовує масштабне розгортання інфраструктури як коду або активно використовує контейнери та мікросервіси у своїй інфраструктурі. Існує ряд уроків, винесених із виходу з ладу Roblox.

Roblox пішов ва-банк на стек програмного забезпечення HashiCorp

Багатокористувацькі онлайн-ігри Roblox розповсюджуються по всьому світу, щоб запропонувати мінімальну затримку мережі та забезпечити справедливі умови для гравців, які можуть підключатися з віддалених місць. Тому Roblox використовує Consul, Nomad і Vault HashiCorp для управління колекцією з понад 18 000 серверів і 170 000 контейнерів, поширених по всьому світу. Програмне забезпечення Hashi використовується для виявлення та планування робочих навантажень, а також для зберігання та обертання ключів шифрування.

Роб Кемерон, технічний директор з інфраструктури в Roblox, зробив презентацію на конференції користувачів HashiCorp 2020 року про те, як компанія використовує ці технології та чому вони є важливими для бізнес-моделі компанії (посилання переведе вас на стенограму та відео запис). Кемерон сказав: «Якщо ви в Сполучених Штатах і хочете зіграти когось у Франції, продовжуйте. Ми дізнаємося та запропонуємо вам найкращий ігровий досвід, розмістивши комп’ютерні сервери якомога ближче до гравців».

Команда інженерів Roblox спочатку пішла за серією помилкових слідів.

Шукаючи причину збою, інженери вперше помітили проблему з продуктивністю і припустили несправний апаратний кластер, який замінили новим обладнанням. Коли продуктивність продовжувала погіршуватися, вони розробили другу теорію про інтенсивний трафік, і весь кластер Consul був оновлений за допомогою вдвічі більшої кількості ядер ЦП (з 64 ядер до 128) і швидшого SSD-накопичувача. Були зроблені й інші спроби, зокрема відновлення з попереднього працездатного знімка, повернення до 64-ядерних серверів та інші зміни конфігурації. Ці також були невдалими.

Урок №1. Хоча проблеми з апаратним забезпеченням не є рідкістю в масштабах роботи Roblox, початкова інтуїція звинувачення в апаратній проблемі іноді може бути помилковою. Як ми побачимо, відключення сталося через комбінацію програмних помилок.

Інженери Roblox і HashiCorp зрештою знайшли дві причини.

Першою була помилка в BoltDB, базі даних з відкритим вихідним кодом, яка використовується в Consul для зберігання певних даних журналу, яка не очищала належним чином використання диска. Проблему посилило надзвичайно високе навантаження на нову функцію потокової передачі Consul, нещодавно представлену Roblox.

Урок №2: Все старе знову нове. Цікавим у цих причинах було те, що вони були пов’язані з тими ж проблемами низькорівневого керування ресурсами, які мучили системних дизайнерів з перших днів комп’ютерної роботи. BoltDB не зміг звільнити місце на диску, оскільки старі дані журналу були видалені. Consul Stream страждає від конфліктів запису під дуже високими навантаженнями. Щоб зрозуміти першопричину цих проблем, потрібно було глибоко зрозуміти, як BoltDB відстежує безкоштовні сторінки у своїй файловій системі та як Consul Stream використовує Go concurrency.

Збільшення масштабів сьогодні означає щось зовсім інше.

Під час роботи тисяч серверів і контейнерів процеси ручного керування та моніторингу насправді неможливі. Для моніторингу працездатності такої складної великої мережі потрібно розшифрувати такі панелі інструментів:

Урок №3: Кожен великий постачальник послуг повинен розробити процедури автоматизації та оркестровки, які можуть швидко виявляти помилки або ненормальні значення, перш ніж вони виведуть з ладу всю мережу. Коливання затримки всього в мілісекунди важливі для Роблокс, тому вони використовують програмний стек HashiCorp. Але сегментація послуг також має вирішальне значення. Roblox запускав усі свої серверні служби на одному кластері Consul, і це виявилося єдиною точкою збою для його інфраструктури. З тих пір компанія додала другий сайт і почала створювати кілька зон доступності для подальшого резервування свого кластера Consul.

Однією з причин, чому Roblox використовує HashiStack, є контроль витрат.

«Ми створюємо та керуємо власною базовою інфраструктурою локально, тому що в масштабах, яких ми знаємо, ми досягнемо у міру розвитку нашої платформи, ми змогли значно контролювати витрати порівняно з використанням загальнодоступної хмари та керувати затримкою нашої мережі», роблокс написав у своєму блозі. “HashiStack”, ефективний спосіб керування глобальною мережею сервісів, дозволяє Roblox швидко рухатися – вони можуть створювати багатовузлові веб-сайти за лічені дні. «З HashiStack ми маємо повторюваний шаблон проектування для виконання наших робочих навантажень незалежно від того, куди ми йдемо», – сказав Кемерон під час своєї презентації у 2020 р. Однак занадто багато залежало від одного консульського кластера – не лише всієї інфраструктури Roblox, а й моніторингу та телеметрія необхідна для розуміння справності цієї інфраструктури.

Урок №4: Навички налагодження мережі на першому місці. Якщо ви не знаєте, що відбувається у вашій мережевій інфраструктурі, ви обдурили. Але налагодження тисяч мікросервісів – це не просто перевірка журналів маршрутизатора; це вимагає глибокого занурення в те, як різні елементи поєднуються один з одним. Це було особливим викликом для Roblox, оскільки вони створили всю свою інфраструктуру на власному серверному обладнанні. І тому, що існувала кругова залежність між системами спостереження Roblox і Consul. В результаті Roblox усунув цю залежність і покращив свою телеметрію, щоб забезпечити кращу видимість продуктивності Consul і BoltDB, а також моделей трафіку між службами Roblox і Consul.

Будьте прозорими для своїх клієнтів щодо своїх невдач

Це означає більше, ніж просто сказати: «Ми були несправними, тепер ми знову в мережі». Деталі важливі для спілкування. Так, Roblox знадобилося більше двох місяців, щоб опублікувати свою історію. Але документ, який вони підготували, який вирішує проблеми, детально описує їхні фальстарти та описує, як інженерні групи Roblox та HashiCorp працювали разом, щоб вирішити проблеми, є чистим золотом. Це вселяє довіру до Roblox, HashiCorp та їхніх інженерних команд.

Коли я надіслав електронний лист у відділ зв’язків з громадськістю HashiCorp, вони відповіли: «Через важливу роль, яку наше програмне забезпечення відіграє в середовищі клієнтів, ми активно працюємо з нашими клієнтами, щоб надати наші рекомендовані найкращі методи та проактивні вказівки щодо архітектури їхнього середовища. Сподіваємося, ваш постачальник критичної інфраструктури буде так само готовий, коли відбудеться наступне відключення.

Очевидно, що Roblox довели те, що може запропонувати HashiStack, до межі, але хороша новина полягає в тому, що вони з’ясували проблеми та врешті-решт виправили їх. Триденне відключення не є чудовим результатом, але враховуючи розміри та складність інфраструктури Roblox, це все одно було великим досягненням. І навіть для менш складних середовищ, де деякі бібліотеки програмного забезпечення все ще можуть приховувати помилку низького рівня, яка раптово виявиться в майбутньому, є уроки, які слід вивчити.

Схожий матеріал: Майнкрафт: Унікальність та секрет успіху

Залишити відповідь