Как стать автором
Обновить

Комментарии 8

К сожалению (говорю как близкий к этому делу человек), вынос чата в отдельный сервер не всегда имеет смысл.

За пример возьмём ту же л2, на ней проще всего объяснить. В л2 существуют несколько пакетов для работы с чатом, которые отсылаются прямо в персонажа, а не в зону. Т.е, к примеру, если мы используем обычный, не глобальный чат, то получателям в фиксированном радиусе от персонажа сервер отсылает пакеты состоящие из типа чата и текста. Если глобальный, то мы отсылаем всем чарам в онлайне. Если партийный, то очевидно, всем персонажам в группе.

Вопрос: зачем городить огород и выкидывать чат в микросервис, когда в целом чат можно написать за пару часов, и он не будет нагружать примерно ничего? Опять же, это очень сильно зависит от проекта, архитектуры, онлайна игры, количества общающихся в чате (на дворе не 2004, войсчаты во всех минимально стабильных составах игроков давно присутствуют) и общей специфики чата, но… это какого унылого качества должен быть код, чтоб чат хоть как-то грузил машину (вопрос о масштабируемости)? А насчёт задержки — иногда задержка между сервером и клиентом выше. Та же л2 играбельна даже при пинге в 80мс.

Борьба с ветряными мельницами, имхо.
Микросервисы очень удобно использовать когда напрмер ваша команда не успевает уложится в сроки. Вы просто отдаете на аутсорс микросервис который вам нужен, и не паритесь какая там архитектура, говно код или нет и так далее. Он просто работает, и вы его можете масштабировать как хотите.
Если команда не сильна в архитектуре крупных проектов, это то что нужно. Потому как поддерживать крупный бэкенд с хрупкой архитектурой сложно.
Например в MMO играх типа WoW, Lineage, Eve Online там даже авторизация, игровая логика, магазин поделены на микросервисы. Не потому что они слабы в архитектуре, а просто потому что так удобнее. За счет этого они более гибче могут настроить свою инфраструктуру и аренда серверов будет дешевле и билды собираются быстрее.
Ну и конечно можно писать микросервисы на разных языках и фреймворках, а это дает крутую производительность.
Я например готовые микросервисы с гитхаба использую и это круто экономит время и деньги.
А вообще мы последний год не пишем свои сервера, пишем только игры и бэкенд логику. За бэкенд отвечают платформы типа GameSparks, Photon и т д. (Ну это конечно зависит от наших целей).
Если брать ретейл L2, то мы получим поделенные на сервисы логинсервер, геймсервер, нпцсервер, CacheD, являющийся прослойкой между базой и гсом и сервер коммуникаций (alt+b, community board, темы, клановые борды, етс. что-то вроде внутриигрового форума, который является практически рудиментом, так как им никто не пользуется.). Чат засунут в l2server, т.е в геймсервер.
Если брать эмули, то проект поделен на геймсервер и логинсервер в 99% случаев. Смысла в распиливании на микры нет никакого.

Логика работы чата в л2 объяснена выше. Сервер ловит пакет от клиента, и в виде респонса на этот пакет рассылает, в зависимости от типа чата, получателям сообщения. Чтоб не быть голословным:
скрин с идеи
image.

Так выглядят примерно 90% эмулей л2, если не заводить речь о совсем уж приватных решениях, напиленных с нуля.

ps: я не очень силён в вопросах залива пикч на хабр, если тут привыкли использовать исключительно habrastorage — заранее сорян, залил на свой сервак.

Не то чтобы сильно привыкли, просто это удобно. Сторонний сервер через несколько лет может лечь (как, например, заброшенные раздачи на торрентах все сплошь в «no picture»), а хабрахранилище ляжет только вместе с самим хабром.
Предполагал что в этом дело.
Возьму на заметку, спасибо.
Мода — страшная штука. Особенно в программировании.
Замечания по теме:

— Во-первых, разделение чата и игровой логики хорошо работает в крупных проектах, в которых задействовано несколько серверов изначально. Для небольших проектов такое разделение только будет источником проблем.

— Во-вторых, какая к черту «для приложений чата допустимая задержка составляет 250 миллисекунд» и использование протокола TCP? Это подход программиста-идеалиста, ничего не знающего кроме С++.
Просто берем HTTP с допустимой задержкой 3 секунды и у вас чат на несколько тысяч человек сможет крутиться на виртуальном хостинге за 20 рублей в месяц.
Замечание к первому замечанию — хорошо работает только если чат между игровыми серверами общий (мы же не о физических машинах говорим, верно?). Во всех иных случаях, имхо, смысла не имеет.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации