Всем привет!
Как многие из вас знают, недавнее обновление Fortnite 32.00 ухудшило стабильность и производительность игры. Оно также привело к серьёзным неполадкам: материалы UEFN и творческого режима были недоступны игрокам, авторы не могли попасть в UEFN и творческий портал, а некоторые функции работали с ошибками.
После обновления 32.10 ситуация повторилась — в течение нескольких часов игроки и авторы то и дело теряли доступ к материалам и инструментам UEFN.
Эти обновления не соответствовали нашим стандартам качества, поэтому мы долгое время обсуждали их внутри команды и пытались понять, как могли упустить подобные неполадки, а также искали способы избегать таких ситуаций в будущем.
Активно развивать экосистему Fortnite, при этом поддерживая стабильность и совместимость разнообразных функций и режимов — задача непростая, но мы стремимся делать всё, чтобы справиться с ней. В том числе мы признаём свои ошибки и учимся на них. Кроме того, мы хотим открыто поговорить о крупных проблемах, с которыми недавно столкнулись авторы, и чётко обозначить планируемые правки.
Поэтому далее мы составили сводку самых критических неполадок версии 32. В каждом пункте мы описываем проблему, её причину и последствия, а также изменения, которые собираемся внести, исходя из полученных данных.
Это не все ошибки, которые были в обновлениях 32.00 и 32.10, но именно они повлияли на всю экосистему и заставили нас задействовать внутренний протокол Epic по устранению критических инцидентов.
Проблема: ухудшение сервиса управления контентом (32.00 и 32.10)
Сервис управления контентом — это наша внутренняя система, которая отслеживает все пользовательские материалы творческого режима Fortnite и UEFN (в том числе метаданные версий и статусов публикаций). Иными словами, это наш «индекс метавселенной», являющийся критическим звеном функционала Fortnite и UEFN.
Чем больше мы, Epic, используем UEFN, тем сильнее полагаемся на сервис управления контентом.
Изменения клиента и сервера Fortnite в обновлении 32.00 непреднамеренно привели к значительному увеличению нагрузки на сервис. В один момент объём трафика превышал обычные значения в 10 раз. Этот резкий всплеск привёл к неполадкам, так как сервис управления контентом пытался справиться с нагрузкой за счёт масштабирования, из-за чего пострадал ряд функций UEFN и творческого режима Fortnite.
Попытки перенастроить сервис или вертикально масштабировать его не дали результатов, а возможности моментально исправить поведение клиента или сервера у нас не было. К счастью, наша команда безопасности экосистемы смогла настроить наш брандмауэр таким образом, чтобы снизить объём пропускаемого трафика и дать службам восстановиться.
Мы приняли соответствующие меры при выпуске обновления 32.10, но оно всё равно привело к увеличению пользовательского трафика, из-за чего производительность сервиса управления контентом снова ухудшилась. На этот раз сервис продолжил работу, но доступ к авторским островам и некоторым функциям UEFN был ограничен в течение нескольких часов. Кроме того, в этот период был полностью недоступен режим Fortnite «Перезарядка».
Последствия: 2 ноября, после выхода обновления 32.00, некоторые материалы Fortnite (в том числе «Перезарядка», треки для импровизации и авторские острова) были недоступны с 10:00 до 21:00 по московскому времени.
13 ноября, после выхода обновления 32.10, доступ к авторским островам и функционалу UEFN был ограничен примерно с 15:00 до 21:00 по московскому времени. В этот период игрокам удавалось подключиться к островам приблизительно в 70% случаев. Режим Fortnite «Перезарядка» был недоступен в это время.
Изменения: мы активно работаем над исправлением неполадок с масштабированием и верим, что сумеем продержаться до конца года.
Мы также улучшили анализ трафика клиента и сервера игры перед выпуском обновлений, чтобы выявлять существующие проблемы.
Проблема: неполадки Persistence (32.00)
Вскоре после восстановления сервиса управления контентом авторы, пользующиеся Persistence, сообщили о том, что в инвентарях их игроков пропали некоторые типы предметов.
В ходе расследования мы выяснили, что некоторые материалы Fortnite были реорганизованы для будущих обновлений. Из-за этой реорганизации пути к ресурсам некоторых отслеживаемых предметов вроде бриллиантов изменились, из-за чего в инвентаре они выглядели как новые предметы с нулевым количеством. В движке Unreal Engine есть система для управления перемещёнными ресурсами (указатели перенаправления), но из-за ошибки в коде Persistence она не сработала.
В этом случае у нас были две основные цели:
- Исправить неполадку, чтобы предотвратить потерю данных новых игроков.
- Восстановить инвентари игроков, уже пострадавших от этой неполадки.
Для выполнения первой задачи нам понадобилось создать, протестировать и активировать новый сервер. Обычно этот процесс занимает меньше 24 часов, но из-за ряда факторов (в том числе работы над другими неполадками), мы смогли активировать новый сервер только 5 ноября — тремя днями позже. Мы прекрасно понимаем, что этот срок абсолютно неприемлем при неполадке такого масштаба.
При выполнении второй задачи нам понадобилось написать скрипт, чтобы восстановить инвентари игроков, игравших на острове до выхода обновления 32.00. Решиться на восстановление в данном случае непросто, так как неполадка затронула каждый остров по-разному. Восстановить прежние данные или оставить новые? Всё зависело от последствий неполадки и длительности восстановления.
Мы предложили авторам пострадавших островов восстановить данные игроков и начали заниматься этим 6 ноября в 22:00 по московскому времени. Процесс был завершён 7 ноября в 23:00 по московскому времени.
Изменения: у нас есть автоматизированная система, которая сообщает об удалении ресурсов, тем самым предотвращая исчезновение предметов на авторских островах. Однако эта система не сообщила нам о перемещении ресурсов, так что мы обновим её алгоритмы соответствующим образом.
Кроме того, мы рассматриваем возможность автоматического оповещения об ошибках при загрузке предметов в инвентарях, но это более трудоёмкая задача, на которую уйдёт больше времени.
Кроме того, как уже было сказано выше, активация сервера с исправлением неполадки заняла слишком много времени. Мы будем оптимизировать этот процесс.
Проблема: общая нестабильность клиента (32.00)
Практически сразу мы обратили внимание на увеличившееся количество критических сбоев в клиентах на всех платформах.
Основной причиной для них стали правки в обновлении 32.00, которые были призваны устранить ошибки с отключением урона от оружия в зонах модификаторов. Из-за этих правок возникло условие «гонки», при котором два потока могли одновременно получать доступ к массиву. В некоторых случаях это могло приводить к критическому сбою при выполнении игроком действий во время возрождения.
Так как сбои происходили в клиенте, мы не могли исправить их на сервере, поэтому нам пришлось выпустить обновление для клиента на всех платформах. На создание обновлений для клиента уходит больше времени — кроме того, на некоторых платформах они должны проходить сертификацию. Из-за этого обновление вышло лишь в среду, 16 ноября.
Последствия: обновление 32.00 ухудшило стабильность клиента игры на всех платформах.
Изменения: при разработке каждой версии Fortnite мы выявляем и исправляем критические сбои. В ходе длительного расследования и тестирования мы не нашли предыдущих проявлений этой неполадки. Даже определив её причину, мы всё равно не смогли целенаправленно воспроизвести условия сбоя.
Подобные «разрастающиеся проблемы» нам знакомы. Сбой, который происходит в 0,01% случаев, можно не обнаружить во время разработки, но он будет проявляться у десятков тысяч людей каждый день, если в игру играют миллионы.
В качестве меры против подобных сбоев мы планируем чаще использовать «очищающие» сборки во время тестирования. Эти сборки позволяют точнее выявлять проблемы с доступом к памяти, даже если они не всегда сразу же приводят к критическим сбоям. Мы не можем с уверенностью сказать, что такая сборка помогла бы поймать недавнюю проблему, но есть высокая вероятность, что она позволит предотвращать похожие неполадки в будущем.
Проблема: критический сбой редактора при загрузке проектов (32.00)
После выхода обновления 32.00 мы сразу же начали получать жалобы от авторов, которые столкнулись с критическими сбоями редактора при попытке открыть проект. Поначалу мы считали, что эти сбои имеют отношение к проблемам сервиса по управлению контентом, но вскоре поняли, что это была отдельная неполадка.
Диагностировать проблему оказалось непросто, так как она была сопряжена со сбоем графического драйвера, который обычно предоставляет скудную информацию о неполадке. Найдя причину сбоя, мы порекомендовали авторам временно переключить UEFN на Direct3D 11.
Главным источником сбоев оказались проекты с большим количеством предупреждений при запуске, всплывающих в уведомлениях внизу справа. Для отображения каждого предупреждения требовался чрезмерный объём памяти. Если предупреждений было много, память могла закончиться, что приводило к сбою.
К счастью, мы можем обновлять UEFN отдельно от Fortnite, так что смогли выпустить исправление уже на следующий день.
К сожалению, эта ошибка была замечена один раз при внутреннем тестировании ранней версии UEFN 32.00, но разработчики не смогли воспроизвести её, так что закрыли отчёт.
Последствия: в первые восемь часов после выхода обновления произошло несколько сотен критических сбоев в UEFN.
Изменения: во время подведения итогов проделанной работы мы заметили, что рабочие устройства команды гораздо мощнее, чем машины рядовых пользователей — особенно в плане объёма видеопамяти.
Раньше при тестировании совместимости мы в первую очередь фокусировались на «впечатлениях новых пользователей» UEFN, а не работе с крупными проектами. В будущем мы планируем чаще проводить тестирования на машинах с минимальными и пользовательскими характеристиками, чтобы выявлять возможные неполадки в крупных проектах.
Надеемся, что эта сводка помогла вам лучше понять причины неполадок, с которыми вы могли столкнуться при выходе обновления 32.00. Мы серьёзно относимся к созданию стабильной среды, в которой авторы смогут разрабатывать увлекательные проекты для игроков.
Поэтому мы ставим перед собой задачи улучшать наши системы и процессы, прислушиваться к вашим отзывам о неполадках и регулярно рассказывать о работе над улучшением UEFN и творческого режима Fortnite для всех пользователей.
Спасибо!
Эндрю