На чем начинать кодить свою первую игру?
0 0 614
3 мин.

Оригинал Итак, 30го октября мы установили своеобразный рекорд – 3242 игрока в одной системе, при живой ноде. ...

Оригинал

Итак, 30го октября мы установили своеобразный рекорд – 3242 игрока в одной системе, при живой ноде.  .... - Изображение 1

Оригинал

Итак, 30го октября мы установили своеобразный рекорд – 3242 игрока в одной системе, при живой ноде. Мы и сами не ожидали, что нода всех выдержит, часть того вечера я взволнованно пытался объяснить моей жене, насколько велико это число. Число способно впечатлить многих, но только не участников тех событий.

На следующий день в той же системе, на том же железе, сражались 1200 игроков. И снова геймплей оставлял желать лучшего. По мнению некоторых, было даже хуже чем днем раньше. Они правы, и сегодня я хочу немного поговорить о произошедшем. Не все понимают, что произошло (unintuite), и, по крайней мере для таких матерых нердов, как я, разбор должен быть интересен.

ЕВА – реал-тайм игра, но серверная часть – не реал-тайм система.

Поясню. Основная функция сервера Евы – реагировать на запросы пользователя. Например, запрос «открыть огонь». Однако, крайнего срока на обработку запроса нет – то есть «чем быстрее тем лучше, угу, спасибо». И это хорошо. Иначе, при перегрузке сервера, крайние сроки бы превышались, и чтобы это исправить пришлось бы принимать экстраординарные меры. Например, рэндомно дисконнектить игроков.

У сервера ЕВЫ есть только одна система, которая связана с реальным временем – физический симулятор Destiny. Он в лепешку расшибется, но не позволит игровому миру отстать от часов на стене. Все остальные системы игры ради этого будут жертвовать свободным временем. Процессам Destiny задан повышенный приоритет, и это единственная настройка приоритетов в системе. У всех остальных процессов приоритет одинаковый.

И при чем тут разница между зарубой с локалом 3242 и локалом 1200?

Сейчас дойдем и до этого, но разберем еще один термин – обязательство (commitment, если кто знает тех.соответствие на русском - скиньте плз.)

Нет, не то обязательство. Я про события, после которых что-то обязано произойти. Хороший пример – залп ракеты или запуск шб. Обработка исходного события – запуска – невелика, но она дает начало цепочке обработок - запуск, расчет полета ракеты в космосе, и, если всё ок, взрыва. Обязательства нагружают гораздо больше, чем исходное событие. Киллшот по кораблю – самый экстремальный пример. Расчет выстрела – ерунда по сравнению с обязанным за ним произойти расчетом взрыва корабля. Идет создание врека, расчет что сгорело/что осталось в луте, создание капсулы, пересадка игрока в капсулу, и, наконец, создание килмыла, которое вам так приятно будет прочесть.

Механизм «удушения» сервера таков – пока Destiny пытается обработать приоритетные обязательства, новые запросы от клиентов откладываются. Стабильное состояние достигается в том случае, когда поток входящих команд сокращается до объема, при котором время обработки команд, суммированное с временем обработки связанных с ними обязательных действий, полностью занимает все доступное процессорное время, не занятое движком Destiny.(прим. пер. - спасибо Ostr0mir за подсказку)

Если нагрузка на Destiny незначительна, у нас есть всё время мира, чтобы обработать команды и обязательства. Палить из всех пушек, взрывать кучи кораблей, времени хватит на всё. Но вскоре количество обязательств от этих действий резко вырастет. И пока эти приоритетные события не обработаются - новые запросы будут бесконечно откладываться. Короче говоря, лаг. В худшем случае, будет превышено время отклика ноды на запрос кластера и нода упадет.

Когда на ноду привалило 3242 игрока – нагрузка на Destiny была огромна. Неимоверная была нагрузка.
Иногда мы получали отвратительные реакции сервера с квадратичной сложностью (n^2), которые мы сейчас и пытаемся устранить, но это отдельная история.(прим. пер. - спасибо yleo за подсказку). В итоге, ко всем остальным процессам почти перестали поступать крупные обязательства (в основном – взорвать шип и поднуть). Нода оставалась живой и отчасти восприимчивой к новым запросам, несмотря на чрезвычайную нагрузку.

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

Дополнение после этих выходных: Если бои происходят в разных системах – одному серверу это очень тяжело обработать. Поэтому не забывайте о Fleet Fight Notification Form. Мы выделим аппаратные средства под столько изолированных систем, сколько будет возможно.

Вдогонку – наше решение отделить нагруженную систему от остальных, мягко говоря, плохо сработало. Большинство проблем на этих выходных были связанны с ним. В ближайшую пару месяцев ребята из команды Cobra Kai будут дорабатывать безопасность этого процесса. Опробуем доработки на ближайших масс-тестах, если не хотите повторения таких аварий – не пропустите.

- CCP Veritas
(с) eve-ru.com

Нет комментариев