Click here to load reader
Upload
natachurda
View
544
Download
0
Embed Size (px)
Citation preview
Егор АкуловВедущий программист
ММО сервера, java
Игровые ММО сервера
От социальных игр к мобильным
Динамика трафика по проектам
До этого времени мы работали с соцсетями — Мой мир, Одноклассники, Вконтакте.
Теперь мы хотим разместиться в Apple Game Center и Google Play
Что нам пришлось для этого сделать?
Авторизация Game Center — сохраняем на сервере и в свойствах приложения
сгенерированный, по ключу игрока из Apple Game Center, сервером authentication
token
IOS регистрация
lАвторизуемся в Google
lОтсылаем полученные разрешения и данные игрока на сервер.
lПроверяем полученные данные на сервере.
lГенерируем идентификатор игрока и сохраняем его на сервере и в свойствах
приложения
Google регистрация
Google + IOS авторизация
Вся авторизация сводится к отправке на сервер полученного на этапе регистрации
authentication token.
Планы
Платформ много - игра одна.
Моя
игра
IOS биллинг
Список товаров для покупки в Apple Store поставляется с игрового сервера
IOS биллинг
Каждая покупка проверяется нашим сервером и предоставляется игроку
Google биллинг
Список товаров для покупки заводится в Google Play Developer Console
Результаты покупки проверяются сервером и выдаются на сервере.
Больше ничего делать не надо
Java-сервер — важные детали
1. Архитектура
2. Network layer
3. Обработка клиентских запросов
4. Масштабирование
5. Базы данных
Архитектура
Слабая связанность (программирование по контракту, взаимодействие посредством
интерфейсов)
• Проще вносить изменения в код
• Контракт реализовывать гораздо проще
• Проще тестировать
• Проще использовать
Сильное сцепление (каждый объект фокусируется на достаточно малом четко
определенном круге задач)
• Понятные код -> легче вносить изменения.
• Проще тестировать
Spring Framework IoC(Inversion of Control)
http://static.springsource.org/spring/docs/3.0.x/reference/beans.html
Network layer
Транспортный протокол — TCP
Прикладной протокол — предпочитаем свою реализацию с использованием
сокетов, и при этом поддерживаем туннелирование по HTTP.
Бинарный сжатый — Protocol Buffers, external serialization
o ниже нагрузка на сервер
o ниже нагрузка на сеть
o лучше защищен от подделок
http://www.eclipse.org/jetty/
http://code.google.com/p/protobuf/
http://code.google.com/p/kryonet/
Обработка запросов
Многопоточность - Java Thread Pools
• Увеличение производительности сервера
• Уменьшение времени отклика. Медленные задачи не блокируют выполнение других
задач
• Эффективный доступ к ресурсам – пока один поток читает данные из БД, другие
продолжают обрабатывать запросы пользователей
Deadlock Livelock (гонки)
Масштабирование
Вертикальное масштабирование.
Введение многопоточности
Профайлинг производительности
Профайлинг garbage collector
o Garbage Less подход. Мало «среднеживущих» объектов
o Tuning GC
Различные архитектурные решения
Масштабирование
Горизонтальное масштабирование
Кластеры распределения нагрузки
• кластер менеджер – определяет узел, который будет обрабатывать клиентский
запрос
• Узел – выполняет обработку запросов пользователей
Подготовка клиента – клиент должен уметь работать с кластер менеджером
RMI – простой способ взаимодействия между элементами кластера
Закладывается на этапе формирования архитектуры
Базы данных
Справочники
• сохраняем в файлы или реляционные БД.
• справочники в виде файлов можно поставлять вместе с клиентом
Данные пользователей — key-value способ хранения.
• Данные пользователей с точки зрения БД не структурированы.
• Единица данных имеет версии, для преобразования данных на лету.
• Отложенное сохранение данных
• Ленивая инициализация данных
1. Справочники
2. Данные пользователей
3. Служебные данные – логи, статистика и т.д.
Служебные данные - на выбор разработчика в зависимости от типа данных, их
дальнейшего использования, от доступных ресурсов
Другие моменты
Статистики - производительности программных компонентов сервера, виртуальной
машины, игровые статистики
Тестирование – unit-тестирование, интеграционные тесты, нагрузочные тесты (лучше
имитировать реальную нагрузку против microbenchmarks).
Автоматизация – построение билдов, тестирование, deployment.
Хотите попробовать
Наши вакансии
http://corp.mail.ru/career/principles/
Спасибо за внимание!