Социальный игровой сервер на python: от первого коммита...
DESCRIPTION
Важными потребностями современного человека являются: общение с другими людьми и игры. На стыке двух этих потребностей и возникли различные игровые приложения в социальных сетях. Обычно такие приложения требуют наличия серверной стороны, способной справляться с высокими нагрузками. В данном докладе Алексей делится опытом разработки серверов на Python для социальных игр, начиная от этапа разработки дизайнерского документа и заканчивая выпуском игры в продакшн и её дальнейшей поддержкой. Автор: Алексей РомановTRANSCRIPT
Социальный игровой сервер на Python: от первого коммита до продакшена
Алексей Романов, ведущий разработчикКомпании Melesta
Пара слов о компании
●Дата создания: 2008 год●Пишем казуальные игр для платформ PC, iOS, Android, Web
●В основном пишем на C++, Python, Action Script
●Около 80 человек в штате
Веселая ферма
Солдатики
Toy Monsters
Цели доклада1. Поделиться опытом создания социальных игр
2. Рассказать о архитектуре и реализации социального игрового сервера на python
3. Рассказать об особенностях выпуска в различных социальных сетях
Вкратце о соцсетях
О проектеСотрудник отдела продаж, которого едва не сожгли на костре
Ингридиенты● Готовая игра на pc/android/ios/tizen● Куча арта и сбалансированных карт● Готовые адаптеры для соц. cетей●Скелет сервера
Команда●Клиетский Flashпрограммист: 1 шт.●Серверный Pythonпрограммист: 1 шт.
● Геймдизайнер: 1 шт.●Художник: 0.5 (арт ведь уже весь есть!!)
С чего начать?● Написание дизайнерского документа тов. геймдизайнером
●Согласование фич с руководством●Планирование работы и график релизов
●Организация работы команды
Планы релизов!
● VK OK Facebook( + Zynga → →Network) Nasha Klassa→
●Все фичи должны быть готовы уже для VK
Организация работы●Все люди в одной комнате● Redmine + SVN● Тестовый сервер
Что же делать программисту?●Проектировать архитектуру●Общаться с геймдизайнером●Проводить бенчмарки своего кода и других проектов
● Развернуть тестовый сервер● Апгрейдить технологический стек
Компоненты игры
Сервер(Python)
Клиент(Flash)Клиент(Flash)
Социальная сетьClient Social API
Servertoclient API
Server Social API
Архитектура игрового сервера
Game Server
MySQL
Redis
Rabbitmq Login Server
Billing server
Person bind
Admin site
Game client
Nginx
RPC(AMF)
HTTP(S)
RPC(msgpack)
RPC(msgpack)
Cronscripts
Технолоческий стек
Пишем код сервера●Код пишется довольно просто и быстро●Не забываем думать про производительность
●Не забываем, что код асинхронный●Много времени уходит на согласование взаимодействия сервера и клиента
Код в студию!
Деплоймент в production
Prod1
Prod2
СтатикаРеплика MySQLОбсчет статистики
MySQLRabbitMQRedisИгровые сервисыКронскрипты
Деплоймент: /dev/hands , rsync
Особенности соцсетей
● Вконтакте●Одноклассники● Naszaklasa ● Facebook● Belbeit
VK
●Легко выходить●Довольно неплохая документация
●Неплохая статистика●Платежи: вырезано цензурой
ОК● Для релиза нужен договор
● “Злой” процесс review приложения
● Отвратительная документация
● Кривенькая глючная статистика
● На старте игры много траффла
● “Веселый” биллинг :)
● Платежи: вырезано цензурой
NK● Open Social
● “Сверхзлой” процесс review приложения
● Нет статистики из соц.сети● Платежи: вырезано цензурой
FB
●Легко выходить●Отличная документация●Клевая статистика●Платежи: вырезано цензурой
Belbeit●Арабская!●Очень сырая●Плохая документация, зато есть прямой чат с разработчиками :)
●Мало людей ● Никакой статистики пока нет●Платежи: вырезано цензурой
Тактика на сервере●Правильные структуры данных в памяти●Асинхронная обработка запросов● RPC для клиента, RPC для внутренних сервисов
● SQL+NoSQL+message queue: наше всё●Консольный игровой клиент – это клёво●Статику – в облако!(если что)
Стратегические аспекты
● “Толстый” клиент “тощий” сервер
●Использование opensource●Ограничение фантазии геймдизайнера
Спасибо за внимание
Контакты: ● Facebook:
http://www.facebook.com/alexei.romanoff
● Email: [email protected]