Разработка многопользовательских онлайн игр. Архитектура Dozory.ru и Chernovik-online.ru Лекция 3
О чем эта лекция? Проект dozory.ru За два года 2.5 млн уникальных поситителей В среднем тысяч поситетелей в день Пиковые нагрузки – одновременно играющих пользователей Проект chernovik-online.ru – открытая бета Как они устроены изнутры? Программно и аппаратно
Что нужно от вас? Просите расшифровать непонятные термины Задавайте вопросы если хотите узнать больше по какой-то теме Критикуйте! Вместе можем придумать как улучшить архитектуру
О нас в прошедшем времени Несколько лет веб разработки Сайты, интернет магазины, CSM,.... Был опыт нагруженного проекта (целых два сервера на проект, вместо одного на десять) Активно изучаем новые технологии и любим их применять, особенно в новых проектах
Дозоры. Как придумали и как все начиналось Всей компании хотелось поработать над своим проектом Идея родилась в многочисленных обсуждениях, выбирали между банерной сетью и игрой Пробуем прототипы Первые трудности в коммуникациях
Выбор архитектуры Сервер на С Или CGI на perl
Выбираем CGI Мы знали как работают web проекты Вообще не представляли специфику игр Количество perl разработчиков больше Прототипы были на том же perl
Как устроена первая версия? mod_perl Не оптимизированный MySQL Есть зачатки кеширования
Как устроено само приложение? Модель Представление Контроллер
Альфа тест. Запуск первой версии 3 месяца активной разработки Внутренний тест – 10 человек из офиса Запуск – падение через 3 минуты Поиск ошибок практически до утра После сна сразу несколько человек поняли в чем проблема :)
1е правило проектирования высокнагрузочных систем Если что-либо может чисто теоретически произойти – оно обязательно произойдет!
Что же было не так? Мы не сделали lock's на кеш
Игра и база даных 3я нормальная форма Как ускорить? Если можете не обращаться к БД – не обращайтесь (Петр Зайцев)
Механизмы кеширование Кеширование есть в самой БД Файлы Shared memory Memcached
Кеширование объектов Один объект содрежит в кеше всех потомков Каждый объект в кеше отдельной записью
онлайн. Что делать? Оптимизация MySQL, innodb Memcached Perscached и person_storer Memcached для локов критичных объектов
Как обеспечить устойчивость работы? 24/7 HA cluster (LVS) Апачи через ldirector Дублирование сайтов на двух машинах Дублирование базы данных Модули для бэкендов расшарены по nfs (drdb для синхронизации) Пишем с бэкэндов по fuse-ssh
Новые технологии Нас настиг Web 2.0 Ушли то фреймов XML+XSLT как замена представления
Финальная схема 16 физических серверов
Еще схема
Что изменилось после нас? Более мощные машины на бэкенды Nginx перед тяжелыми апачами Перевели некоторые расчеты на отдельные демоны Заменили XML+XSLT на json
Черновик Выбор технологий Выбор архитектуры
Схема работы
Технически все должно быть хорошо Так ли это – покажет время
25й кадр В отдел разработки игр мы ищем геймдизайнера!