230 likes | 437 Views
Инструметы разработки социальных игр. Куперштох Алексей Alawar. Игра "Городской Магнат". Игра "Городской магнат". http://vkontakte.ru/app2386811 Стандартный ситибилдер Запустился 5 дней назад Команда: 1.5 серверных разработчика 2 flash-разработчика 1 QA
E N D
Инструметы разработки социальных игр Куперштох Алексей Alawar
Игра "Городской магнат" • http://vkontakte.ru/app2386811 • Стандартный ситибилдер • Запустился 5 дней назад • Команда: • 1.5 серверных разработчика • 2 flash-разработчика • 1 QA • Художники, менеджеры, гейм дизайнеры, ... • Команда разделена географически • Разница в часовых поясах - 4 часа • Одна из пилотных социальных игр компании Alawar
Клиент-Сервер • Типичное клиент-серверное приложение • Клиент - Flash • Сервер - PHP • Протокол взаимодействия - JSON-based HTTP
JSON открытый текстовый достаточная поддержка на клиенте и на сервере можно смотреть все вызовы в браузере - полезно для отладки клиентом может выступать не только flash AMF пропритетарный бинарный хорошая поддержка на клиенте, с сервером дела хуже JSON vs AMF
Поиск ошибок • Логи на сервере • tail -f | grep uid • Debug-режим, который не видят простые смертные • Дебаговые приложения • Дебаговые юзеры • Логи на клиенте • debug panel в самой игре • console.log • Показ дополнительной информации прямо в интерфейсе игры (id, состояния, таймеры, ...)
Ошибки синхронизации • Если что-то реализовано и на сервере, и на клиенте- это БОЛЬШОЙ источник габлей • Невозможно писать идентичный код с точностью до всех условий и округлений (у нас не получилось :) • Ответ от сервера очень важен. • ошибки не учитываем • ошибки учитываем, логируем • ошибки учитываем, логируем, падаем • Дополнительная информация при обмене между клиентом и сервером
Ошибки синхронизации времени • Timestamp'ы у нас - это unix timestamp * 1000 • Хранятся в bigint • Переходные состояния • Жильцы сбежали - деньги с них больше не собрать. • Но если они сбежали менее минуты назад, то для некоторых действий мы еще считаем, что они не сбежали. • Если пользователь пытается собрать прибыль со здания, которое её произведёт только через 5 секунд - позволим - нам не жалко. • Накапливание ошибки времени
Серверная часть • Принципы, архитектура • Инструменты, фреймворки, среды, языки, движки, библиотеки • Производительность, трафик • Проблемы
Сервер - LNMP-стэк • Linux - Ubuntu Server 10.04 LTS • Nginx • MySQL + Memcached • Memcached отключён • PHP 5.3 • фишки 5.3 не используются
MySQL • Почему бы и нет? • Проект и так достаточно экспериментальный • MySQL знают все • Его пока хватает, несмотря на write-ориентированность игры • Простые варианты использования MySQL и поддержка memcached - залог того, что при необходимости можно будет перейти на другие базы данных • MongoDB удобен в плане гибкости схемы данных в коллекциях • Redis хорош своими структурами данных и высокой производительностью
Производительность • Простые алгоритмы, в основном сложность O(1) или O(log(n)) • Мы не используем фреймворк, НО, очень часто это приводит к тому, что самописные поделки тормозят еще больше - в основном из-за криво реализованных моделей и всяких ACL. Мы - не исключение. • Кроме отсутвия фреймворка - нет никаких предварительных оптимизаций. Не экономьте на спичках. В 90% случаев вы всё равно не отгадаете, что будет тормозить.
Мониторинг • Техническая • Munin • Zabbix • Бизнес • Самописная статистика • На что тратят голоса
Framework • Админка на YII • С моделью • Шаблоны для генератора админки • Игровой бэкенд - самописный. • Парсит json • Проверяет авторизацию • Исполняет серверные события • Запускает команды одну за одной • Пакует и отдаём ответы • Игровая модель - самописная • Очень не хватает Propel и Doctrine :)
Генерация и хранение идентификаторов • Мы не используем AUTO_INCREMENT • Мы храним свои счётчики для каждого пользователя • ID новых строений генерируются клиентом • Практически все обращения к базе данных используют поле UID. • Лучше сразу закладываться на приспособенность к нескольким социальным сетям и хранить uid в виде строк с префиксами
Библиотечные данные • Курсы валют • Здания • Типы жильцов • ...
Деплоймент • Сейчас думаем над тем, как облегчить работу художникам и гейм дизайнерам. • Скорее всего это будет раскладывание библиотек и файлов с сервера на сервер по одному нажатию кнопки • С кодом и апдейтами базы данных по-прежнему будем работать вручную - дело в том, что сервер имеет состояние.
Командная разработка • Разница в 4 часа • Незнакомые изначально люди • Несоблюдение принципа "Сервер всегда прав" • Сложно заслужить авторитет
Инструменты для удалённой разработки • Skype • Google Docs • Google Drawings • http://www.websequencediagrams.com/
Инструменты разработчика • IDE • Netbeans • PHPStorm • SCM • svn repo • git-svn client • Browser • Google Chrome • debug flash player • Bugtracker • Jira • QA-инженер должен описывать ошибки в виде "что делаю - что ожидаю - что получилось", иначе это не работает
Вопросы? e-mail/gtalk: alexey.kupershtokh@gmail.com skype: alexey.kupershtokh