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

Компания Pixonic временно не ведёт блог на Хабре

Сначала показывать

Практика использования модели акторов в бэкэнд-платформе игры Quake Champions

Время на прочтение9 мин
Количество просмотров12K
Продолжаю выкладывать доклады с Pixonic DevGAMM Talks — нашего сентябрьского митапа для разработчиков высоконагруженных систем. Много делились опытом и кейсами, и сегодня публикую расшифровку выступления backend-разработчика из Saber Interactive Романа Рогозина. Он рассказывал про практику применения акторной модели на примере управления игроками и их состояниями (другие доклады можно посмотреть в в конце статьи, список дополняется).

Всего голосов 27: ↑27 и ↓0+27
Комментарии11

CICD: бесшовный деплой на распределенные кластерные системы без даунтаймов

Время на прочтение11 мин
Количество просмотров19K
Выкладываю второй доклад с нашего первого митапа, который провели в сентябре. В прошлый раз можно было почитать (и посмотреть) про использование Consul для масштабирования stateful-сервисов от Ивана Бубнова из BIT.GAMES, а сегодня поговорим про CICD. Точнее расскажет об этом наш системный администратор Егор Панов, который отвечает за доступность инфраструктуры и сервисов в Pixonic. Под катом — расшифровка выступления.


Всего голосов 33: ↑33 и ↓0+33
Комментарии1

Использование Consul для масштабирования stateful-сервисов

Время на прочтение12 мин
Количество просмотров19K
22 сентября провели наш первый нестандартный митап для разработчиков высоконагруженных систем. Было очень круто, много позитивного фидбека по докладам и поэтому решил не только их выложить, но и расшифровать для Хабра. Сегодня публикуем выступление Ивана Бубнова, DevOps из компании BIT.GAMES. Он рассказал о внедрении дискавери-сервиса Consul в уже рабочий высоконагруженный проект для возможности быстрого масштабирования и failover`а stateful-сервисов. А также об организации гибкого пространства имен для бэкэнд-приложения и подводных камнях. Теперь слово Ивану.


Я администрирую продакшн-инфраструктуру в студии BIT.GAMES и расскажу историю внедрения консула от Hashicorp в наш проект «Гильдия Героев» — fantasy RPG с асинхронным pvp для мобильных устройств. Выпускаемся на Google Play, App Store, Samsung, Amazon. DAU около 100 000, online от 10 до 13 тысяч. Игру делаем на Unity, поэтому клиент пишем на С# и используем свой собственный скриптовый язык BHL для игровой логики. Серверную часть пишем на Golang (перешли на него с PHP). Дальше — схематичная архитектура нашего проекта.
Всего голосов 27: ↑26 и ↓1+25
Комментарии9

Как мы отлаживаем в браузере самописный ECS на игровом сервере

Время на прочтение6 мин
Количество просмотров5.8K


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

В предыдущих статьях подробно рассказывали (список сразу под катом) о том, как устроена ECS в нашем новом проекте в разработке и как выбирали готовые решения. Одним из таких решений был Entitas. Он не устроил нас в первую очередь из-за отсутствия хранения истории состояний, но очень понравился тем, что в Unity визуально и наглядно можно посмотреть всю статистику по использованию сущностей, компонентов, систему пулов, производительность каждой системы и т.д.

Это вдохновило нас на создание своих инструментов на игровом сервере, чтобы смотреть, что происходит в матче с игроками, как они играют, как перформит система в целом. На клиенте у нас тоже есть подобные наработки для визуальной отладки игры, но инструменты в клиенте чуть более простые по сравнению с тем, что мы сделали на сервере.
Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии4

А что, можно было дешевле?

Время на прочтение6 мин
Количество просмотров13K
Я всегда любил и умел торговаться. Со стороны покупателя это своего рода игра на получение максимальной выгоды, а для продавца — способ показать, что он ценит труд и нелегкую жизнь человека, которому делает скидку. Видел, как торгуются за 10 рублей, за 5 и даже жвачку.

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


Читать дальше →
Всего голосов 46: ↑37 и ↓9+28
Комментарии43

Истории

(А|а)рхитектура: почему это нестандартный митап для разработчиков высоконагруженных систем

Время на прочтение2 мин
Количество просмотров3.4K
Мы давно стремимся быть максимально открытыми и делиться опытом, пусть и не всегда идеальным. Это помогает не только находить узкие места у себя в разработке, но и пробовать что-то новое.

И если в текстовом формате мы не первый раз рассказываем истории из разработки, то теперь решили организовать митап в сентябре вместе с друзьями из DevGAMM, где будем на реальных кейсах разбирать архитектуру в глобальном понимании — от системных решений и приложений до архитектурных паттернов и стилей. И в этот раз мы решили уйти от традиционного стиля «митапов», поэтому — всего 222 отобранных приглашенных, актуальные темы и крутой нетворкинг на митапе (А|а)рхитектура.

А для тех, кто заинтересовался — под катом FAQ и подробности.


Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии2

Раннеры для тех, кто любит унижения или как мы меняли и дорабатывали PixJam

Время на прочтение4 мин
Количество просмотров6.3K

— А мы покажем казуальный PvP-раннер с препятствиями для тех, кто любит унижения.
— Что?
— Что?

Перед одной из презентаций на PixJam Summer'18.

Зимой мы провели первый внутренний PixJam, в котором ребята из всех отделов креативили и придумывали концепты для новых игр (кстати, один из них уже готовится к софт-ланчу). Собрали тонну позитивных отзывов и фидбека, чтобы сделать его еще лучше, и повторили эксперимент. Расскажу, как он проходил на этот раз и что мы изменили.
Читать дальше →
Всего голосов 36: ↑33 и ↓3+30
Комментарии2

Клиент-серверное взаимодействие в новом мобильном PvP-шутере и устройство игрового сервера: проблемы и решения

Время на прочтение10 мин
Количество просмотров19K
В предыдущих статьях цикла (все ссылки в конце статьи) о разработке нового fast paced шутера мы рассмотрели механизмы основной архитектуры игровой логики, базирующейся на ECS, и особенности работы с шутером на клиенте, в частности, реализация системы предсказания локальных действий игрока для повышения отзывчивости игры. В этот раз подробнее остановимся на вопросах клиент-серверного взаимодействия в условиях плохого соединения мобильных сетей и способы повышения качества игры для конечного пользователя. Также вкратце опишу архитектуру игрового сервера.


Читать дальше →
Всего голосов 35: ↑34 и ↓1+33
Комментарии19

Как мы перебанили обычных игроков и заDDoSили свои сервера: практическое руководство

Время на прочтение4 мин
Количество просмотров41K
Рассказывать о новых проектах это, конечно, хорошо, но не всегда всё получается, как мы хотим.

В общем, начали тут вспоминать факапы из прошлого, когда решение одной проблемы прибавляло новых, увлеклись и решили поделиться парочкой. Как забанить невиновных игроков, заддосить собственные сервера, ошибиться в одной букве и словить тонны негатива от пользователей — вот это всё, как мы любим.


Читать дальше →
Всего голосов 110: ↑106 и ↓4+102
Комментарии31

Как мы писали сетевой код мобильного PvP шутера: синхронизация игрока на клиенте

Время на прочтение13 мин
Количество просмотров34K
В одной из предыдущих статей мы провели обзор технологий, которые используются на нашем новом проекте — fast paced шутере для мобильных устройств. Теперь хочу поделиться, как устроена клиентская часть сетевого кода будущей игры, с какими трудностями мы столкнулись и как их решали.


Читать дальше →
Всего голосов 50: ↑49 и ↓1+48
Комментарии31

Допинг для аналитики: почему стоит обратить внимание на Apache Zeppelin

Время на прочтение6 мин
Количество просмотров37K
Все рано или поздно приходят к аналитике за данными. В больших многопользовательских играх (да и синглплеере) без этого уже вообще никуда. Сколько пользователей предпочитают новый режим; где слабые места монетизации; куда смотреть геймдизайнерам, чтобы повысить вовлеченность игроков; и еще миллион вещей — подсчитывается вообще всё. И всё это влияет на решения, которые потом принимают разработчики.

А вот внедряют аналитику все по-разному: кто-то покупает сторонние решения (просто, но негибко), кто-то пишет под себя (долго и дорого), а кто-то пока просто считает несколько базовых метрик силами программистов и не заморачивается.

Поэтому я расскажу об инструменте, который будет полезен для всех. Кто только начинает выстраивать аналитику — сможет «на коленке» создать систему с нуля, а компании с уже готовыми решениями — «бустануть» свой подход.
Читать дальше →
Всего голосов 42: ↑42 и ↓0+42
Комментарии22

Как и почему мы написали свой ECS

Время на прочтение13 мин
Количество просмотров38K
В прошлой статье я описал технологии и подходы, которые мы используем при разработке нового мобильного fast paced шутера. Т.к. это была обзорная и даже поверхностная статья — сегодня я копну глубже и подробно расскажу, почему мы решили написать собственный ECS-фреймворк и не стали использовать существующие. Будут примеры кода и небольшой бонус в конце.

Читать дальше →
Всего голосов 37: ↑36 и ↓1+35
Комментарии48

Google I/O 2018 глазами разработчика мобильных игр + рекомендации по итогам

Время на прочтение6 мин
Количество просмотров14K


В мае вместе с CTO Pixonic Сергеем Ждановым (я — слева, он — справа) посетили Google I/O 2018 в Калифорнии. Хотелось посмотреть на тренды, технологии, пообщаться с разработчиками (я еще собирался поучаствовать в Codelabs, а то в прошлый раз не удалось туда попасть). В целом, если сравнивать с прошлым годом, Keynote был не такой впечатляющий, но все равно есть о чем рассказать по итогам конференции.

Не буду повторять, что и так уже все слышали, а расскажу, что заинтересовало меня, как разработчика мобильных игр, и что будет полезно знать другим. Начнем.
Всего голосов 34: ↑32 и ↓2+30
Комментарии11

Как мы замахнулись на мобильный fast paced шутер: технологии и подходы

Время на прочтение7 мин
Количество просмотров24K


Год назад у нас в компании был один проект — мобильный шутер War Robots с относительно медленными, но красочными и напряженными боями. Игра продолжает развиваться, у нее десятки миллионов установок и игроков по всему миру, постоянно выходят апдейты. В какой-то момент мы захотели сделать динамичный шутер на Unity со скоростями, сравнимыми с Overwatch, CS:GO или Quake. Но реализовать задуманное для мобильных платформ (в первую очередь iOS и Android) на основе War Robots при текущих архитектуре и подходах было практически нереально.

Мы понимали, как это сделать в теории — есть много статей, презентаций на YouTube, детально рассказывающих о том, как написать шутер, как работать с сетью, какие возникают проблемы и как их решать. Здесь нет Rocket Science, все эти подходы придумали еще 30 лет назад и за это время они особо не поменялись. НО: у нас не было практики.

Забегая вперед, скажу — нам удалось реализовать задуманное. Мы создали для мобильных платформ динамичный быстрый шутер, который сейчас находится в бета-тестировании и активно дорабатывается. И мне очень хотелось бы всем этим поделиться. Это первая, обзорная статья с перечислением и кратким описанием практически всего того, что мы используем (прошу не путать с другим нашим проектом в разработке, технологии и подходы в котором похожие, но отличаются в деталях).
Читать дальше →
Всего голосов 41: ↑39 и ↓2+37
Комментарии43

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань

Дневник техлида: вторые полгода разработки нового мобильного PvP

Время на прочтение10 мин
Количество просмотров12K


Я лид команды в Pixonic, где работаю уже год. О старте и развитии одного из наших новых проектов я ранее написал статью на Хабре. По ходу дальнейшего производства, спустя еще полгода, у меня накопилось большое количество интересного опыта, которым хотел опять поделиться. На этот раз речь пойдет о процессе наращивания функционала в мобильном клиенте и поддержании кода в гибком состоянии.

Уверен, подавляющее большинство хотя бы раз запускали какую-нибудь многопользовательскую игру. На старте клиент, как правило, пишет несколько магических сообщений и через несколько секунд (хотя в случае с одним известным десктопным шутером — несколько минут) игрок попадает в главное меню, где есть заветная кнопка «В бой» или типа того. Но процесс запуска состоит из огромного количества этапов, которые происходят очень быстро и без вмешательства игрока:
Читать дальше →
Всего голосов 31: ↑31 и ↓0+31
Комментарии2

Пишем плагин для Unity правильно. Часть 2: Android

Время на прочтение10 мин
Количество просмотров17K


В предыдущей части мы рассмотрели основные проблемы написания нативных плагинов на Unity под iOS и Android, а также методы их решения для iOS. В этой статье я опишу основные рецепты по решению этих проблем для Android, стараясь сохранить схожую структуру взаимодействия и порядок их рассмотрения.
Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии4

Пишем плагин для Unity правильно. Часть 1: iOS

Время на прочтение10 мин
Количество просмотров17K


Когда делаешь на Unity игры для мобильных платформ, рано или поздно придется писать часть функционала на нативном языке платформы, будь то iOS (Objective C или Swift) или Android (Java, Kotlin). Это может быть свой код или интеграция сторонней библиотеки, сама установка может заключаться в копировании файлов или распаковки unitypackage, не суть. Итог этой интеграции всегда один: добавляются библиотеки с нативным кодом (.jar, .aar, .framework, .a, .mm), скрипты на C# (для фасада к нативному коду) и Game Object со специфичным MonoBehavior для отлавливания событий движка и взаимодействия со сценой. А еще часто требуется включать библиотеки зависимостей, которые нужны для работы нативной части.

Весь этот механизм интеграции обычно не вызывает проблем на чистом проекте, в котором еще нет (или мало) интеграций таких сторонних библиотек. Но когда проект разрастается, всплывает много проблем, усложняющих этот процесс, а часто дающих необходимость дополнительных модификаций и адаптирования под проект плагина, что потом выливается в увеличении сложности последующей поддержки и обновления.
Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии3

От установки AWX до запуска первого плейбука — настройка централизованного управления Ansible

Время на прочтение9 мин
Количество просмотров120K


Количество серверов в нашей инфраструктуре уже перевалило за 800, хотя еще год назад их было около 500. Для работы с этим всем активно используются решения от Red Hat. Про FreeIPA — для организации и управления доступами для Linux-серверов — мы уже писали, сейчас же я хочу затронуть тему управления конфигурациями. Для этих целей у нас юзается Ansible, а с недавних пор к нему добавился AWX — представленное полгода назад решение для централизованного управления плейбуками, расписанием их запусков, управления инвентори, учетными данными для доступа к серверам, а также механизм callback'ов для запроса конфигураций со стороны сервера.

Из-за ряда вещей мы не сразу смогли интегрировать его для работы с нашим основным проектом War Robots, но полей для проверки AWX нашлось предостаточно. Во-первых, в компании ведутся разработки новых проектов, которым нужны dev/stage-окружения и, само собой, production-окружения в перспективе. А недавно к этому добавился еще и проект для внутренней аналитики, которому потребовался полностью новый кластер.

Итак, начнём!
Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии11

Как адаптировать игру на Unity под iPhone X к апрелю

Время на прочтение4 мин
Количество просмотров19K


Месяц назад Apple предупредила всех разработчиков, что с апреля все приложения, которые заливаются в App Store, должны быть собраны с использованием последнего iOS 11 SDK. О том, как правильно позиционировать контент, используя новый API, уже давно можно почитать в официальной документации и Human Interface Guidelines. А хорошими и подробными статьями об адаптации игр на Unity ни на русском, ни на английском языке нас не радуют. А так как в War Robots поддержка нового UI появилась с февральским релизом версии 3.6.0, я решил написать собственный гайд со скриптами и скриншотами.
Читать дальше →
Всего голосов 33: ↑32 и ↓1+31
Комментарии8
Помните бесконечное «Давайте Dust 2!» в каждом CS-чате? Реиграбельность — важнейшая черта для онлайн-шутеров. Игрокам раз за разом приходится возвращаться на одни и те же локации, поэтому можно смело сказать, что работа левел-дизайнера не менее важна для проекта, чем код, на котором он написан. Нужно продумать баланс карты во всех ее точках; помнить о разных тактиках игроков и целых команд; расставить достаточное количество укрытий; не забыть о «снайперах»; провести ряд внутренних и внешних тестов; учесть пожелания игроков касательно сеттинга и визуала. И думаем, не только нам интересно, как можно решить все эти задачи.
Подробности – под катом
Всего голосов 45: ↑45 и ↓0+45
Комментарии20