Рассказ ofer2: долгая дорога к Ingress Prime

В последнее время частенько появляются сообщения о технических работах на серверах Ingress. Что же происходит во время этих работ — читайте в нашем переводе рассказа ofer2. Оригинал доступен на Ingress Community.

Привет, мой ник — @ofer2, и я работаю инженером в команде Ingress в Лос-Анджелесе. Мы стремимся стать более открытыми и честными с сообществом агентов в свете последних проблем с сервером и технических работ. Поэтому я хотел бы позволить вам заглянуть за кулисы и рассказать о текущем положении дел и о том, куда мы движемся.

Начнём с истории. Ingress начинался с небольшой команды в Google, которая задавалась вопросом: «А что, если Google Earth была бы видеоигрой?». Сообщество рисовало фан-арты за инвайты в игру, список порталов взяли из Historical Marker Database (HMdb.org), и игра начала развиваться. Ingress был построен на инфраструктуре Google — это именно то, что мы называем “классическими серверами”.

Позже Niantic выделился из Google как самостоятельный стартап. Когда Niantic перешёл на следующий этап развития, наша команда использовала опыт, полученный при написании Ingress, при создании новой инфраструктуры для нашей второй игры — Pokemon GO. Сервера новой платформы были разработаны, чтобы поддерживать ещё  большее количество игроков онлайн, их производительность была выше, а стоимость — ниже. Тем временем Ingress продолжал работать на “классических серверах”.

Вскоре после успеха Pokemon GO команде Ingress было поручено переписать клиент, поскольку его основной фреймворк больше не поддерживался. Как и в случае с “классическими серверами”, клиент был написан таким образом, что продолжение его разработки было бы гораздо сложнее и стоило бы дороже. Мы также приняли решение перейти от “классических серверов” к серверам новой платформы и написать поверх них специфический для Ingress функционал (такой как линки и поля). К сожалению, замена и клиента, и сервера заняли гораздо больше времени, чем ожидалось. Переписывание клиента было первоочередной задачей: на тот момент существовала угроза потерять поддержку устройств Apple.

Как только Ingress Prime был выпущен, команда переориентировалась на исправление багов и обновление сервера. На завершение работ с сервером требовался ещё примерно год, что вызвало вопрос: надо ли продолжать писать новый сервер, рискуя ещё больше разочаровать сообщество и откладывая внедрение нового функционала в игру?

Мы решили сделать приоритетом сообщество и внедрение нового функционала. Из-за такого выбора нам пришлось думать, как сократить расходы на “классические сервера”, а не заниматься переходом на новые сервера. За это решение нам пришлось заплатить огромную цену. Например, Ingress не может использовать весь восхитительный функционал, который наши новые игры, запущенные на новых серверах, используют с первых дней, поэтому нам пришлось вручную реализовывать весь недостающий функционал.

Чтобы снизить затраты на наши “классические сервера”, мы решили переместить наши сервера из дорогой вычислительной среды в более дешёвую. Замена среды похожа на игру “найди отличия”: мы исправили все, что нашли, но наши “картинки” огромные, а “отличия” между ними — маленькие. Одни отличия важны, а другие — нет. Очень трудно предугадать, какие из них могут привести к неполадкам. Это приводило к тому, что команда вынуждена была тестировать, а затем откатывать такие вещи, как Intel. Intel был развернут в новой среде, но команда обнаружила, что сначала нужно было доделать одну очень важную вещь, что и привело к задержке. Мы оптимистично полагаем, что эта очень важная вещь почти закончена, но нам всё ещё необходимо устранить некоторые оставшиеся проблемы.

Весь код изменений уже написан, и сейчас наша команда сосредоточена на развёртывании “классических серверов” в более дешёвой среде, а также на оценке новых влияний со стороны программного обеспечения. Нам всё ещё приходится сначала тестировать, затем исправлять баги и только потом разворачивать программы. Следующий этап тестирования мы начнём во вторник. После этого мы вернёмся к тестированию Intel, и, в конце концов, к серверам игры.  К тому моменту игра будет работать на более дешёвых “классических серверах”, что позволит нам сконцентрироваться на новом функционале, который оживит игру. Новый функционал уже находятся в разработке, и мы надеемся, что сообщество будет в восторге, когда всё будет готово к использованию.

Я надеюсь, мой рассказ внёс больше ясности в то, как наша команда принимает решения, и сделал более прозрачным процесс создания нового будущего Ingress.

Вопросы и ответы

@iBotPeaches: Означает ли это, что сейчас приоритетом для Ingress является снижение затрат на поддержку работоспособности игры и максимизация прибыли, или всё ещё есть небольшая часть команды, работающая над основным функционалом Prime?

@ofer2: Да, мы сосредоточились на том, чтобы стабилизировать работу Ingress. Это означает, что у нас должны быть увлечённые игроки, и должна быть игра, которая может сама себя финансово обеспечивать. Чтобы достичь этого, мы можем реализовать какой-то функционал новой платформы отдельно от неё (т.е. в классическом программном коде). Второй вариант — мы можем вообще не реализовывать его, а сосредоточиться на новом функционале самой игры. Именно поэтому я сказал, что выбор пока что остаться на классических серверах дался нам непросто.

@iBotPeaches: Как удаётся без гигантских затрат проверять кросс-линки в игре, которая никогда не спит? В чем техническая причина такого распространённого явления, как “фантомные поля”?

@ofer2: Как работает линковка… Это одна из самых безумных частей кода. Сервер, по сути, блокирует всё в регионе и отфильтровывает как можно больше неподходящих точек, основываясь на геометрии. Оставшиеся возможные линки перебираются один за другим на предмет того, не пересекаются ли они с уже существующими. Этот процесс, как вы можете догадаться, стоит очень дорого и проверяет линки только по одному. Поэтому проверка выполняется только один раз, и затем сервер пытается сохранить ею результаты отдельно. Это и есть причина возникновения “фантомных полей”: если проверка проходит, и затем другой игрок делает то, что изменяет состояние игры (т.е. добавляет линки и поля / нейтрализует портал и т.д.), то линк всё равно остаётся: проверка не запускается снова. Эта проблема была решена в серверах Prime, но, к сожалению, они всё ещё очень сырые.

@InvestigateXM: Мне просто интересно… Когда лично Вы посчитали бы переход на новые сервера необходимостью? Или, если у вас есть план, когда это должно быть сделано?

@ofer2: Мы всё время помним о переходе на новые сервера и в какой-то момент мы добьёмся этого. В настоящее время мы считаем, что можем попытаться постепенно переключиться на новые сервера, но конкретных планов нет. Что касается временных рамок, ничего конкретно не известно. Как я уже говорил, мы в основном работаем над тем, чтобы гарантировать устойчивость Ingress. Это означает, что у игры должны быть преданные фанаты, а сама игра должна окупать расходы на себя.

@Perringaiden: Ещё один вопрос: означает ли это, что игра не переедет на сервера RWP (прим. перевод.: очевидно, имеется в виду серверная платформа Niantic, на которой работают Pokemon GO и Harry Potter), или что переезд откладывается, чтобы сначала в Ingress появились новые возможности?

@ofer2: Не знаю, что такое RWP, но я предполагаю, что вы имеете в виду сервера Prime. Ваше утверждение верно, по крайней мере, пока что. В будущем мы можем переехать разом или будем постепенно переезжать на новые сервера, но пока что мы остаёмся на “классических серверах”.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *