Как обслужить сто миллионов пользователей и не сойти с ума? Какие технологии использовать? На чем, в конце концов, написать авторизацию для твоего будущего хайлоада, чтобы все было «как у больших»? Такими вопросами мучается каждый второй разработчик, и ответов, как правило, нет. Иногда кажется, что мир настоящего экстремального хайлоада где-то далеко, недоступен абсолютному большинству, а самые сокровенные секреты надежно охраняют суровые QA. Обычно так оно и есть. Однако ребята из Wargaming — счастливое исключение из правил.
 

Факты


Филипп Кучерявый, software engineer в команде оперирования

  • Ему 24, и он бородат
  • In love with Linux and Python
  • Параноик
  • Не имеет диплома о высшем образовании
  • github.com/Friz-zy

Дмитрий Трофимов, глава frontend-разработки UI WoT

  • Увлекается кодингом с 14 лет
  • В 17 лет написал простенькую графическую оболочку для MS-DOS
  • Помимо «Танков», одна из любимых игр — Heroes of Might and Magic III
  • Большой поклонник технологии Java
  • Имеет ряд дипломов и сертификатов по программированию

Дмитрий Овчинников, веб-разработчик

  • Пришел в веб через Perl
  • Имеет три диплома об образовании
  • Ненавидит провода — только Bluetooth/Wi-Fi
  • После семи лет с Gentoo перешел на OS X и не жалеет
  • Скрывает, что знает PHP
 

Цифры

  • 3500+ сотрудников работают в офисах Wargaming по всему миру
  • 15+ игр выпущено WG с момента основания компании в 1998 году
  • 110 000 000+ пользователей зарегистрировано в проектах Wargaming
  • В 50 странах мира приложение World of Tanks Blitz попало в топ-3 приложений App Store и было скачано более 12 000 000 раз; Android-версия была скачана более 5 000 000 за первых два месяца
 

Технологический стек

Филипп Кучерявый

Наш сервер вращается на движке BigWorld — это C++ и Python. Все, что критично для скорости, — на C++, все остальное делается на Python.

Железа у нас очень много, огромный зоопарк. Без автоматизации здесь никак. Для автоматизации мы используем Ansible, Fabric и Puppet. Для мониторинга — Zabbix.

Мы смотрим в сторону модной виртуализации вроде Docker, но пока не хотим пускать это в продакшен. В данный момент пытаемся перевести на такую виртуализацию локальные инстансы, так как это серьезная экономия ресурсов. Сейчас они тоже на виртуалках, но на более «серьезных», не настолько специализированных — VMware и прочих.

Какая-то часть всего написана на Erlang, к примеру транзакции. Но это лишь внешние прикрутки к движку, некие отдельные костыли — подсистемы, вроде доставки сообщений и связи. Движок этим не занимается.

У нас очень специфическая разработка, много тулз, очень сильно завязанных на нас. То есть мы используем open source, стараемся контрибутить, проводить всякие meetup (я сам люблю в них участвовать). Однако при этом у нас есть очень специфические вещи, которые не стоит выкладывать в паблик. Не потому, что это какой-то большой секрет, а просто потому, что, кроме нас, они вообще никому не нужны.

Железо у нас свое. Мы сами выбираем необходимое железо, закупаем и дальше оперируем с ним. Потому что облака — это, конечно, здорово, но далеко не всем подходят.

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

Когда ты сам полностью владеешь железом, то можешь реально оценивать ситуацию. Скажем, мы долгое время играли с гипертрейдингом и до сих пор пытаемся оценить его плюсы и минусы. В некоторых ситуациях он только мешал, и мы его сознательно отключали. Имея доступ к железу, мы сами можем обновлять прошивки BIOS и смотреть, что там происходит.

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

За масштабирование у нас в основном отвечает RabbitMQ. Плюс у BigWorld есть собственные технологии связи в кластеризации (среди машин, среди кластеров). Русский сервер сейчас — это девять периферий и центр. BigWorld имеет собственную технологию связи периферии с центром, собственный протокол. «Кролик» используется для связи BigWorld и веба, отдельно, как стека.

Наши QA имеют доступ к волшебной кнопке «сделать мне хорошо». То есть в любой момент, когда им нужна определенная версия какого-либо окружения или проекта, они нажимают эту кнопку, и им, как ни странно, становится хорошо. Я считаю, к этому стоит стремиться всем — максимально автоматизировать свою работу.

Циклы разработки у нас в основном месячные. По завершении — выкатываемся на продакшен. Локально чаще. Продакшен мы выкатываем под ручным контролем. Частично все это автоматизировано, частично нет.

Деплоим мы прямо из сырцов, никаких пакетов. Дело в том, что мы работаем с кодом большого объема, и каждый раз собирать пакеты размером много-много гигабайт никто не хочет. Тем более когда просто нужно сделать патч. К тому же доставка идет сразу на много серверов. Это сразу забивает канал и ресурсы, на которые в тот же момент идет нагрузка и от игроков. То есть нужно делать все очень аккуратно.


Дмитрий Трофимов

Что такое BigWorld со стороны клиента? Как ни парадоксально, тот же самый Python, что и на сервере. К BigWorld у нас подключена технология, позволяющая интегрировать Flash внутрь клиента игры. Там своя виртуальная машина, своя реализация от компании AutoDesk. Есть GFX-плеер, которой гоняет Flash внутри клиента.

Да, мы используем Flash как UI для «Танков».

Есть мнение, что Flash умирает. Это не совсем так. Тренд таков – Flash переходит в ранг узкоспециализированной технологии. Да, всякие Flash-игры в вебе, скорее всего, и правда умрут. Но в таких крупных проектах, как «Танки», «Корабли» и так далее, Flash оказалась очень востребованной технологией. Она как нельзя лучше подходит для решения задач задач по оптимизации отрисовки UI, облегченных приемов создания анимаций, а так же программирования интерфейсной логики.

Почему именно Flash? Во-первых, когда мы взялись за Flash, никаких альтернатив вроде HTML5 еще не было вовсе. Во-вторых, Flash нативно поддерживает HTML, и некоторые вещи мы делаем именно HTML-разметкой.

Переход на HTML5 означал бы переобучение огромной команды флеш-разработчиков на новую технологию, что нельзя назвать оптимальным решением. Ну и конечно, не стоит забывать о том, что все это просто нужно будет переписать. Это нам сейчас не подходит.

Лично я бы вообще не стал рассчитывать на HTML5, на данном этапе его развития, учитывая, что он не слишком хорошо держится на рынке. У него есть конкуренты, которые продвигаются довольно активно, — Mozilla, Unity, у них сейчас очень тесные взаимоотношения по развитию этой технологии. В результате HTML5 может вообще отойти в сторону.

Кстати, мы пытались не использовать Flash, делали UI доступными альтернативами — компонентами Python. Как выяснилось позже, это просто страшные костыли, постоянно чего-то не хватало, а то, что было, не умело того, что нам нужно. Мы стали думать, что с этим делать, и принялись создавать различные самописные компоненты. Как только дело дошло до сложных анимаций, эффектов и прочего, стало ясно, что нужен очень серьезный редактор, чтобы задавать различные визуальные вещи, анимировать их и «оживлять». Flash оказалась единственной по-настоящему мощной технологией, которая умела все это. С тех пор используем ее.

Хотя мы и ищем альтернативы Flash, пока она прекрасно справляется с текущими задачами. Внутреннюю реализацию делать пока не планируем.

Из Flash мы используем всякие open source штуки, типа GreenSock, портированные на AS3 стандартные библиотеки Java для работы со структурами данных. От green sock впоследствии отказались, поскольку под scaleform данная библиотека работала медленно

Единственное, что могу отметить, — поиск флешеров сейчас стал некоторой проблемой. Дело в том, что наши запросы по Flash значительно выросли, а почти все самые опытные ребята или уже работают у нас в команде, или заняты в смежных компаниях. На рынке действительно стало сложно найти хорошего, опытного специалиста.

Филипп Кучерявый

Разумеется, Flash — не единственная клиентская технология. Разные платформы — разные технологии. Так, для Xbox пилится своей клиент; для мобильной версии у нас тоже свой движок, которым активно занимается наша студия. У нас много разных технологий.

 

Хранение данных

Дмитрий Овчинников

В вебе мы используем стек Python/Django. Также есть несколько асинхронных проектов на Twisted + Erlang. Ну и плюс memcached, RabbitMQ и MySQL в качестве data storage. Этот набор нас вполне устраивает по скорости работы и предоставляемым возможностям

Мы используем OpenID в качестве системы аутентификации. С ним мы можем очень быстро интегрировать поддержку Wargaming.net ID в новые проекты компании.

Филипп Кучерявый

Мы до сих пор экспериментируем с разными форками MySQL. В основном все упирается в железо. Все данные, касающиеся BigWorld и веба, висят на «мускулях». То есть у веба свои базы, у BigWorld — свои, но они умеют общаться друг с другом через RabbitMQ.

У нас используются Percona и MySQL. Притом мы смотрим их на разных ОС. Точно знаю, что сверхоптимизацией мы не занимается, в основном у нас все из коробки.

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

Мы обращаем внимание на современные, модные стеки, вроде Kibana и Logstash. Для них мы посматриваем, к примеру, на ZeroMQ. Но кластеру нужно централизованное решение, ZeroMQ не вписывается, оно децентрализовано, — RabbitMQ лучше ложится в нашу схему.

У нас есть свой кластер Hadoop. С ним работают data-ребята, это статистика и смежные вещи. Эти данные мы собираем не для игроков, а для себя. Агрегируем различные статы, анализируем, и потом наши аналитики занимаются расчетами.

NoSQL базы данных тоже используем, но не для продакшена. У себя в деплойменте мы используем MongoDB для хранения статистики и информации: собираем туда статы серверов и процессим их дальше уже своими тулзами. Грубо говоря, это просто хранилище JSON-данных. Это не продакшен, это просто помощь нам самим.


 

Сложности и фейлы

Филипп Кучерявый

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

Часто фейлы происходят по независящим от нас причинам. Порой из строя выходит оборудование, и приходится реагировать быстро. Бывает, что технические проблемы возникают не у нас, а у внешних провайдеров.

Как-то раз возникла ситуация: в суппорт поступало множество жалоб, что игроки не могут играть, мол, все пропало, мы все умрем, ничего не работает. Мы начали разбираться, но никто не признавался. Подозрение пало на одну из магистралей России. Наши ребята из суппорта тогда просто обзвонили всех знакомых, кто когда-либо работал в провайдерах, и выяснили, что, да, у какого-то провайдера действительно легла магистраль. Просто те не признавались.

Больше всего проблем с провайдерами возникает в Китае. Там, конечно, и нагрузка достаточно хорошая, но проблемы возникают просто из-за связи с Китаем. Особенности китайского интернета таковы, что там между двумя соседними площадками связь может быть хуже, чем между мной и Китаем. Ну и нельзя забывать их заморочки с файрволами — все технические подробности очень долго согласовываются.

Китай активно фильтрует и режет все. Все, кто работает с Китаем и их провайдерами, проходят обязательную сертификацию всего, что идет наружу. Они активно смотрят по портам и вырезают лишнее. Мы с ними даже порты согласовывали.


 

Начинающим (и не только) игроделам

Дмитрий Трофимов

Когда начинаешь собственный проект, нужно понимать, каков твой стартовый бюджет. Если стартовый бюджет меньше миллиона долларов, ни о какой Flash речи не идет.

Мы часто говорим: «Это геймдев, детка!» Рынок геймдева очень бурный. Скорость смены технологий здесь просто фантастическая, никто ни от чего не застрахован.

Иногда приходится поддерживать легаси, просто потому, что это дешевле. Даже если мы возьмем для работы над проектом какую-то суперактуальную и многообещающую технологию, вполне возможно, что, когда понадобится, будет очень тяжело и дорого эту технологию поменять. Так что выбор прост: либо смириться и жить с этим, поддерживая старую технологию, либо переписывать все глобально, менять кадры, переобучаться. Это дорого и зачастую неоправданно.

Филипп Кучерявый

Действуйте раундами. Любой продукт нужно делать исходя из того, что ты сам знаешь, чтобы он максимально быстро окупился. Если ты что-то знаешь и любишь, нет смысла менять технологию и пытаться по-быстрому вникнуть во что-то другое только потому, что оно круче и эту технологию будут поддерживать еще N лет.

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

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

Делегируйте обязанности. Скажем, если у компании нет ресурсов, нет хороших админов для железа, зачем вообще самостоятельно этим заморачиваться? Такой компании проще выйти в облако, быстро подняться, заработать денег, нанять кого-нибудь и уже тогда думать о железе.

Дмитрий Трофимов

Разные подходы и отношение к технологиям — это разные бизнес-модели. К примеру, можно сразу потратить много денег, запилить суперабстрактную систему (которую потом, кстати, придется весьма недешево обслуживать). Но при этом можно вообще не выйти на рынок, потому что старт был слишком долгим. Либо можно ужиматься, хардкодить и говнокодить, потом мучиться с сопровождением, но при этом выйти на рынок и быстро реализовать какие-то фичи. И получать деньги.


 

О себе

Филипп Кучерявый

В Wargaming я работаю уже более двух с половиной лет. Меня взяли джуниором, прямо из универа, где я учился на радиофизика. В итоге я так и не доучился — сделал выбор в пользу работы.

Как вообще я попал сюда? После третьего курса активно искал, чем себя занять. На тот момент я знал на продвинутом уровне Linux и Python. Обнаружил вакансию в WG, но благополучно ее прошляпил. Меня приглашали безопасником в банк, были еще какие-то вакансии по мелочи, но я переждал месяц, и снова появилась вакансия в WG. Я пришел сюда на собеседование и в итоге остался, о чем ни капли не жалею.

Я очень люблю читать, поглощаю массу информации. Из веб-ресурсов читаю Хабру, The Hacker News, «Хакер» и много чего другого.

На досуге попиливаю на Python на GitHub. Но это домашние разработки, больше направленные на обучение самого себя. Я стараюсь специально лезть в те области, с которыми раньше не сталкивался, которые мне интересны.

На работе я тоже пишу на Python, но чаще это какие-то небольшие приблуды для помощи, для автоматизации чего-либо. Дома я пытаюсь заниматься другими вещами, скажем асинхронным программированием.

Для меня работа — это хобби, за которое платят хорошие деньги. Как еще это описать? WG — это коллектив, в который я прихожу пообщаться на интересные мне темы. Это комьюнити, которое самоорганизовывается по интересам.

Периодически я выступаю на meetup’ах, и это действительно интересно. Собираются разные люди из того же Минска. Они не знают друг друга, пытаются объединиться, познакомиться. Здорово, когда приходишь туда, видишь человека уже в третий раз, и вы уже отлично общаетесь, обмениваетесь контактами. Это объединяет.

Дмитрий Трофимов

Я занимаюсь кодингом с четырнадцати лет. Сразу после учебы пошел работать девелопером. Меня взяли на работу по той же схеме, которую мы уже обсуждали: я не имел опыта в Java, но меня взяли Java-разработчиком, на обучение. Так я проработал около года, а потом случился кризис, и меня занесло в геймдев. Компания RamStudio тогда искала Flash-разработчиков, я прошел собеседование и там научился Flash-технологии, которую сам изначально не знал. После я решил перейти в более серьезный проект и через некоторое время попал в Wargaming.

Спустя какое-то время я «прокачался», разобрался со всеми нужными технологиями, прикинул специфику «Танков» и сейчас в свободное время больше занимаюсь не Flash — я увлекся мобильной разработкой, она очень интересно пересекается с Java.

Для меня работа — это тоже хобби, за которое мне платят деньги. Я занимаюсь этим хобби уже больше десяти лет, и порой мне кажется, что это просто феерическое везение, что так не бывает. Могу сказать одно — делай то, что тебе нравится, и у тебя все получится.

Дмитрий Овчинников

При ожидаемом от разработчика стремлении постоянно совершенствоваться, я порой просто люблю сесть на диван и поиграть в Playstation :). Люблю вкусно поесть, а моя голубая мечта — переписать «Рельсы» на Python. Я очень нежно люблю Ruby on Rails, а поскольку в работе мы используем Django, мне порой не хватает тех уникальных возможностей, которые кружат голову при использовании этого фреймворка.

Мне глубоко симпатичен мир Ruby, их конвенции, соглашения, подходы. Хочется понемногу перетащить все это... может быть, в стол. Но сама мысль о том, что я это делаю, мне нравится. Хотя я вряд ли кому-то это покажу :).

Как ни странно, до WG я особо на Python не писал. Хотя в веб-разработке я давно: начинал на Perl, потом у меня были разные отношения с Ruby, PHP и так далее. Когда в Wargaming мне предложили писать на Python, я подумал — почему бы и нет? Опыт и понимание у меня есть, а уж в питоне прокачаюсь по ходу дела :). Так и вышло.

Я повидал много компаний: работал в аутсорсинговых компаниях, в продуктовых, сейчас вот в геймдеве. Могу сказать, что Wargaming — это самое удачное, на мой взгляд, сплочение профессионалов, которое можно собрать в индустрии. При этом все они очень активные, веселые и интересные люди, с которыми приятно общаться каждый день.

В Wargaming постоянно происходит какая-то внерабочая активность, в том числе и организованная самими сотрудниками WG (спортивные ивенты, технические, meetup’ы). Компания не стоит в стороне — всячески помогает и поддерживает подобную самоорганизацию.

Мы проводим ежемесячные Python Meetup в Минске, при поддержке компании Wargaming, стремясь расширить комьюнити разработчиков.

Очень сложно передать, что ты чувствуешь, являясь частью Wargaming. Можно посмотреть фотоотчеты, видео с наших ивентов, но пока ты не придешь сюда — не поймешь.


 

Как попасть в Wargaming

Филипп Кучерявый

Нельзя сказать, что для работы в WG нужно знать конкретно вот это и то. Лично я считаю, что в жизни нужно найти то, что тебе нравится, и заниматься этим. Не нужно ориентироваться на конкретную компанию. Когда я сам искал работу, я искал вакансии «под себя», знал, что хочу заниматься Python. Я искал по этому критерию, и на тот момент работу предлагали буквально три компании, в числе которых была Wargaming.

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

Дмитрий Трофимов

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

Учись общаться с людьми, находить общий язык. Это едва ли не важнее, чем быть крутым технарем. Человеческий язык несовершенен, порой возникают недопонимания, нужно уметь их разрешать, доносить свою мысль до собеседника. Особенно это важно в такой большой компании, как WG.

Дмитрий Овчинников

Мой пример показывает, что отсутствие опыта с конкретной технологией — не преграда. БОльшая необходимость есть в целеустремленности, общем опыте и понимании, что происходит. А какой-то конкретный язык... это не rocket science, это приходит довольно быстро.

Сначала ты получаешь общие знания о том, как все работает, как устроено в целом, об архитектуре. А уж на каком языке писать... лет через пять это становится неважно.

Нужно больше страсти к тому, что ты делаешь. Девиз нашей компании: Globally with passion. Нам очень нужен этот самый passion. Мы очень любим людей, которые переживают за то, что они делают; людей, которым интересно что-то делать; которые не просто «ходят на работу», но пытаются стать частью того большого Wargaming, который создаем мы все.


 

Python Meetup

Wargaming всячески старается показать атмосферу WG людям, которые не работают в компании. Для этого публикуются интересные посты, фотоотчеты об ивентах, прошедших внутри компании либо при ее поддержке. Так, совсем недавно состоялся первый белорусский PyCon, прошедший под эгидой PSF, где Wargaming участвовала в роли партнера.

Еще существуют Minsk Python Meetup — ежемесячные встречи Python-разработчиков, проходящие при поддержке WG. Здесь много полезностей для начинающих, хардкорные доклады от гуру Python’а и бесценный опыт общения комьюнити.

  • https://www.facebook.com/MinskPythonMeetup — здесь можно найти анонсы, а также фотоотчеты с прошедших встреч.
  • http://habrahabr.ru/company/wargaming/ — здесь выкладываются видео докладов.
    Если есть желание выступить с докладом, пиши на meetup@wargaming.net.

Оставить мнение