архитектурные приемы онлайн игры
-
Upload
ontico -
Category
Technology
-
view
16 -
download
3
description
Transcript of архитектурные приемы онлайн игры
Архитектурные приемы:онлайн-игры
Павел Кудинов
О чём?• отказываемся от SQL+memcached• отказываемся от Apache• комбинируем prefork и multiplex• проблемы realtime проекта• KISS• о перфекционизме
SQLid name hp
666 Завулон 10000
player_id item
666 мел судьбы
666 «старый мельник»
Скриптid 666
name Завулон
hp 10000
items 1 мел судьбы
2 «старый мельник»
SQL скрипт
«старый мельник»
мел судьбы
2
1items
10000hp
Завулон
666
name
id
«старый мельник»
мел судьбы
2
1items
10000hp
Завулон
666
name
id10000
hp
Завулон
name
666
id
10000
hp
Завулон
name
666
id
«старый мельник»666
мел судьбы
item
666
player_id
«старый мельник»666
мел судьбы
item
666
player_id
SQL «проседает» на чтении
SQL скриптОЙ!
Применяем memcached
id 666
name Завулон
hp 10000
items 1 мел судьбы
2 «старый мельник»
u_666 =>
SQL + скрипт + memcached
SQL скриптmem
cached
SQL «проседает» на записи
SQL скрипт
ОЙ!
memcached
memcached играет роль БД!
SQL скриптmem
cachedой?
backup
Зачем теперь SQL?
10000
hp
Завулон
name
666
id
10000
hp
Завулон
name
666
id
«старый мельник»666
мел судьбы
item
666
player_id
«старый мельник»666
мел судьбы
item
666
player_id
«старый мельник»
мел судьбы
2
1items
10000hp
Завулон
666
name
id
«старый мельник»
мел судьбы
2
1items
10000hp
Завулон
666
name
id
+• две различных схемы
• доступ только по ключу
диск
скрипт кеш
backup
интер фейс
ой?
Всё уже украдено до нас
• MemcacheDB by Google
• TugelaCache by MediaWiki
• BerkleyDB by Oracle
• In Soviet Russia, Велосипед by YOU!
Apachemaster
worker worker
modperl
FastCGI
worker
... CGI
запрос
запрос
запрос
Apache
запрос
Эволюция Apache
1. Передача файлов по HTTP
2. Динамические страницы на CGI
3. Быстрая динамика на mod_* и FastCGI
Передача файлов по HTTP
apache
nginx
vs
Динамические страницы на CGI
apache CGIОЙ!
mod_perlmod_phpFastCGI
master
worker
modphp
FastCGI
worker
modperlПродай слона!
Маленький prefork
скрипт скрипт
скриптскрипт скрипт
скрипт
1. Организуем POOL
2. Уходим от CGI к HTTP
3. Не кормим слона
4. …
5. PROFIT!!!!!
prefork or not prefork?
скрипт
скриптчат
война
чат
война
скрипт хранилищеОЙ!
Комбинируем prefork и multiplex
скрипт
скрипт
чат
война
чат
война
скрипт
демон
демон
Как сделать multiplex демон?
pavel-kudinov.livejournal.com/47420.html
см. доклад HighLoad-2007«Сетевая многозадачность:событийные машины»
Как собрать всё воедино?
Проблемы realtime проекта
1. ОЙ!
Проблемы realtime проекта• Упало
– Frontend (nginx)– Backend (любой prefork pool)– Демоны (multiplex чата, «войны»)– Хранилище (SQL/memcached/велосипед)
• Хотим внести изменения• Статистика и логи
KISS: Keep it simple, Stupid!
Перфекционизм – это патология …
(с) WikiPedia
Упало: Frontend (nginx)• Дайте два!
– DNS balancer– Linux Virtual Server– carp + nginx– велосипед?
Упало: Backend (prefork pool)
ВСЕ СРАЗУ?Упал
backend
да ОЙ!
нет HeartBeat
Упало: демоны (чата, «войны»)
Железно?Упал
демон
да
нет WatchDog
Запасной сервер
Упало: хранилище
Реплика целая?
Упала база
да
нетБекап
теперь она
мастер
Зомби нельзя убить!
• Целостность данных нарушена?
• Аварийное завершение процесса?
• Сервис временно недоступен?
• НИЧЕГО СТРАШНОГО!
Хотим внести изменения
• «Мягкий» рестарт?
• 404 Not Found?• “Вам повезло: мы делаем кое-что новое”
Статистика и логи
• Асинхронный коллектор
• Выделенный SQL сервер
• «Ваш запрос поставлен в очередь»(приходите через 20 минут)
Как-то так…
nginx
nginx
prefork MASTER SLAVE
чат бой SQL
скрипт
логи
Спасибо за внимание!
Архитектурные приемы:
онлайн-игрыПавел КудиновПавел Кудинов[email protected]@kudinov.namepavel-kudinovpavel-kudinovpavel-kudinovpavel-kudinov