вторник, 11 июня 2013 г.

Дневники разработчиков: о профработах

Дневники разработчиков: о профработах



«Уважаемые игроки! Сегодня с --:-- до --:-- по мск будут проводиться профилактические работы на всех серверах…».
Каждый раз, как на нашем сайте появляется подобная новость, Сарнаут замирает для всех вас. И каждый раз находится тот, кто обязательно спросит: «почему так долго?!».
Как вы можете подозревать, профилактические работы – несколько более сложный процесс, чем перезагрузка компьютера. Мы постараемся рассказать вам обо всех особенностях профилактики и внесём ясность в понимание загадок, которые всегда не давали покоя умам игроков.

Сразу стоит внести оговорку в терминологию: для игроков сервер – это отражение Сарнаута («Раскол», «Наследие Джунов», «Нить судьбы» и т. д.), а с точки зрения системного администратора, сервер – это один физический сервер, металлическая коробка определённой формы, нашпигованная «мощными» деталями.
Они различаются по размеру и содержанию в зависимости от целей, для которых предназначены.
На одно отражение Сарнаута приходятся десятки ядер и сотни гигабайт оперативной памяти. Каждый игровой сервер – это восемь современных и мощных физических серверов.
Почему их несколько?
Игровой сервер - сложноорганизованная система, где каждый элемент выполняет определённые задачи. Как в часовом механизме, в котором важна каждая шестерёнка, в этой системе важен каждый физический сервер. Какие-то из них отвечают за работу игровой механики, какие-то - за доступ в игровой мир, на других происходит сохранение информации и ещё множество важных процессов. Если хотя бы одна из частей этого сложного «механизма» выйдет из строя - в опасности окажутся остальные. 
Все производственные мощности находятся в специализированном помещении для обработки, хранения и передачи информации — дата-центре. Подобные «серверные» всегда оборудованы по последнему слову техники, а внутри них поддерживается определённая температура, что способствует работоспособности оборудования.
Также, что немаловажно, серверная обеспечена широкополосным каналом интернет-соединения.
Как правило, выглядят все дата-центры однотипно: множество шкафов со стойками, в которых расположены слоты с электроникой на салазках.



Но давайте вернёмся непосредственно к нашей теме. Для игроков начало профилактики наступает в тот момент, когда заканчивает обратный отсчёт, запущенный после появления внутриигрового сообщения: «Уважаемые игроки! Сегодня с --:-- до --:-- по мск будут проводиться профилактические работы на всех серверах…».
Что же происходит в эти часы за кулисами студии Allods Team? Подготовка уже идёт полным ходом, все на своих местах, ждут команды.
Итак, 3…2…1… СТОП!

1. Выключение серверов

Первым делом наши боевые админы запускают процесс «опустошения» серверов. Это обязательная процедура, без неё завершение работы прошло бы некорректно. За этот период необходимо выгнать всех игроков из игрового мира и зафиксировать прогресс развития персонажей. Остановка серверов только начинается.
Сейчас происходит сохранение всего игрового прогресса. В обычных условиях автоматическое сохранение растянуто во времени и не имеет единого момента записи. Говоря проще, в игре постоянно что-то сохраняется.
В случае же выключения серверов в базе единовременно фиксируется прогресс всех игроков, которые только что покинули игровой мир. Это достаточно большой объём информации, и это занимает время.
Наконец, серверы отключаются.

Что интересно, судя по комментариям на форуме, у игроков складывается мнение, что профилактика должна продолжаться небольшой промежуток времени. Однако не всё так просто.

2. Сохранение информации

Как только в игровом мире не останется ни одного персонажа, запустится процесс сохранения базы данных – формируется «бэкап».
Перед установкой новой версии в обязательном порядке создаётся резервная копия всей игровой информации. Если людей поделить на тех, кто уже бэкапит и на тех, кто ещё не делает бэкапов, то мы - третий тип - те, кто бэкапит всегда.
Чтобы понять, сколько времени на это уходит, попробуйте скопировать несколько десятков гигабайт информации с одного жёсткого диска на другой. Теперь представьте, что игровая база хранится на более пятистах жёстких дисках, а общий объём памяти исчисляется сотнями терабайт.
Во время профилактики нам приходится копировать информацию в огромном количестве несколькими потоками одновременно. Этот процесс требует пристального внимания.

3. Установка обновления и запуск серверов

Следующий шаг  –  установка обновления. Стоит отметить, что в данном контексте имеется в виду не установка глобального обновления, которые происходят несколько раз в год, а вообще какое-либо обновление базы. Ведь даже хотфикс - это обновление, просто маленькое.
Со стороны процесс выглядит весьма занимательно: суровый админ вводит загадочные рунические символы в командную строку, а та в свою очередь что-то ему отвечает.


Именно это таинство, занимающее до половины времени профилактических работ, и является «обновой» – на серверы копируется новая версия исполняемых файлов и игровых ресурсов. Мы называем это «Деплой».
После завершения копирования происходит старт машин. Чтобы игроки смогли зайти в игру, необходимо запустить 80 физических серверов, а это не так просто.  Все игровые серверы запускаются параллельно, согласованно выполняя множество подготовительной работы. К примеру, в процессе запуска происходит обновление структуры базы данных, об объёме которой вы уже имеете представление.
По сути, для облегчения понимания, базу можно отдалённо сравнить с экселем, только с огромным количеством таблиц, полей, столбцов и ячеек. Она не статична. Во время обновления неизбежно меняется её структура, происходит адаптация старой версии под новые игровые реалии – появляются новые разделы, какие-то удаляются, что-то дополняется.
Что подразумевается под новыми реалиями?
Это может быть замена игровых предметов в сумке/банке/почте, добавление поддержки новых структур данных вроде появления возможности инкрустировать самоцветы в предметы, и многое-многое другое.
Но игровая база, состоящая из таблиц, ресурсов и ещё множества исполняемых файлов, является лишь строительным материалом. За время запуска сервер собирает элементы данных воедино, инициализируя игровой мир: расставляет объекты и населяющих Сарнаут неигровых персонажей и монстров на свои места, подгружает карты, просчитывает пути. Одним словом – выстраивается трёхмерная модель мира, чтобы он смог ожить. Процесс подготовки к открытию идёт полным ходом.
Только после завершения сборки этого «конструктора» появляется возможность в нём существовать.
Помните, как Морфиус первый раз показывал Избранному модель матрицы? Пустое белое пространство. Спустя мгновение на этом месте выстраивались трёхмерные объекты, пустота заполнялась потоками информации. Вот и на наших серверах происходит нечто подобное. Разве что у инженера матрицы серверы помощнее были, хотя и не факт.
Однако мы всегда ищем более рациональные пути решения задач и оптимизируем все процессы для их ускорения. Мир создавался 7 дней, а мы создаём Сарнаут за несколько десятков минут.
Если обновление большое, профилактика может затягиваться из-за ряда особенностей:
Обновление системного программного обеспечения. Это особенно долгий процесс, который занимает до 5-6 часов. Именно поэтому мы стараемся проводить подобные технические работы в момент наименьшей активности игроков. Сложилось так, что это время выпадает на ночные часы в Москве. Пока большинство игроков спит, наши системные администраторы проводят обновление программного обеспечения серверов.
Обновление оборудования. Например, если требуется заменить какую-либо часть в каком-то из серверов или сервер полностью.
Пожалуй, самая существенная особенность - обновление данных персонажей. Хоть этот процесс полностью автоматизирован, он затрагивает всех персонажей, зарегистрированных в игре. Продолжительность данного этапа занимает несколько часов.
Если речь идёт об установке обычного хотфикса, а не крупного контентного обновления (например, ... 4.0.01, 4.0.02, 4.0.03 ... и так далее) оно сокращается до нескольких минут.
Чтобы заранее устранить все возможные риски и отладить все процессы, мы всегда проводим «репетицию» обновления на тестовом сервере, технические характеристики которого идентичны любому из игровых серверов.
Тем не менее, админ всегда находится в шаговой доступности от разработчиков и в любой момент может оперативно отреагировать на любую внештатную ситуацию. А все вместе мы всегда неподалёку от Сарнаута, мы всегда следим из окон своего офиса, что всё в порядке.



4. Проверка

Серверы запущены, но пока ещё не открыты для всех. В бой вступает специально обученная группа сотрудников, отвечающих за контроль качества. Они производят базовую проверку работоспособности основных элементов игры. Такие как: механика работы телепортов, аукциона, почты, корректность запуска внутриигровых событий, Лавка Редкостей, базовая механика работы астрала и многое другое.
Пускай квалификация наших специалистов закалена годами работы, проверить абсолютно все особенности игрового процесса небольшой группе людей просто невозможно.
Именно поэтому мы всегда просим оперативно сообщать в центр поддержки пользователей информацию о каких-либо игровых ошибках. Ведь игроков в разы больше, чем сотрудников студии, и шанс найти ошибку намного выше. После этого ошибка передаётся разработчикам, а они стараются оперативно внести соответствующие правки.
Обратите внимание, что просто так «зафиксить баг» без остановки сервера невозможно. Необходимо обязательно провести мини-обновление - хотфикс.
По результатам финального тестирования, если не выявлено каких либо ошибок, принимается решение, будет ли обновление открыто игрокам.

5. Открытие обновления для скачивания

Файлы обновления загружаются на патч-сервер и открываются для игроков.
С этого момента всем, кто запустит Игровой Центр, обновление игры станет доступно для скачивания.
Кстати говоря, если появилась возможность скачать обновление, это ещё не означает, что сервер открыт для входа. Если обновление большое, мы стараемся выдать его несколько раньше, чтобы к моменту запуска всех серверов игроки смогли частично или полностью скачать его.
И вот, серверы открыты, можно зайти в игровой мир. Всё возвращается на круги своя, Сарнаут оживает.
Далее за своё дело принимаются саппорт, комьюнити менеджеры, специалисты контроля качества и многие другие, в чьи задачи входит сбор информации от игроков после проведения профилактики. Мы ведь должны знать, что всё в порядке. Но, впрочем, это совсем другая история…

На основе всего сказанного уже можно представить всё многообразие и сложность процесса проведения профилактики.


Послесловие

В момент установки обновления на игровые серверы всегда формируется рабочая группа для оперативного реагирования на любые ситуации. В её числе состоят не только системные администраторы, но и разработчики, а также операторы технической и информационной поддержки.
Даже в ночные часы всегда есть тот, кто следит за серверами и делает всё возможное для обеспечения их стабильности. Если необходимо, дежурный может разбудить среди ночи всех ответственных сотрудников, и вот уже мы, борясь с чарами Морфея, хватаем на лету чашку кофе и сломя голову бежим в офис исправлять положение.
Вот так, благодаря силам и стараниям наших админов и всех остальных, живёт и процветает Сарнаут, Нихаз пытается строить свои коварные планы, Сарн – разрушить этот мир, а Тэп, казалось бы, создатель иллюзорного мира, и сам не подозревает, что живёт в виртуальной реальности.

Надеемся, что нам удалось доступным языком рассказать вам, что же на самом деле представляет собой профилактика, и приоткрыть занавес этого загадочного события. Теперь вы знаете, насколько непрост этот процесс.