архитектурные приемы онлайн игры
DESCRIPTION
TRANSCRIPT
![Page 1: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/1.jpg)
Архитектурные приемы:онлайн-игры
Павел Кудинов
![Page 2: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/2.jpg)
О чём?• отказываемся от SQL+memcached• отказываемся от Apache• комбинируем prefork и multiplex• проблемы realtime проекта• KISS• о перфекционизме
![Page 3: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/3.jpg)
SQLid name hp
666 Завулон 10000
player_id item
666 мел судьбы
666 «старый мельник»
![Page 4: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/4.jpg)
Скриптid 666
name Завулон
hp 10000
items 1 мел судьбы
2 «старый мельник»
![Page 5: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/5.jpg)
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
![Page 6: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/6.jpg)
SQL «проседает» на чтении
SQL скриптОЙ!
![Page 7: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/7.jpg)
Применяем memcached
id 666
name Завулон
hp 10000
items 1 мел судьбы
2 «старый мельник»
u_666 =>
![Page 8: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/8.jpg)
SQL + скрипт + memcached
SQL скриптmem
cached
![Page 9: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/9.jpg)
SQL «проседает» на записи
SQL скрипт
ОЙ!
memcached
![Page 10: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/10.jpg)
memcached играет роль БД!
SQL скриптmem
cachedой?
backup
![Page 11: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/11.jpg)
Зачем теперь 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
+• две различных схемы
• доступ только по ключу
![Page 12: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/12.jpg)
диск
скрипт кеш
backup
интер фейс
ой?
![Page 13: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/13.jpg)
Всё уже украдено до нас
• MemcacheDB by Google
• TugelaCache by MediaWiki
• BerkleyDB by Oracle
• In Soviet Russia, Велосипед by YOU!
![Page 14: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/14.jpg)
Apachemaster
worker worker
modperl
FastCGI
worker
... CGI
запрос
запрос
запрос
Apache
запрос
![Page 15: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/15.jpg)
Эволюция Apache
1. Передача файлов по HTTP
2. Динамические страницы на CGI
3. Быстрая динамика на mod_* и FastCGI
![Page 16: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/16.jpg)
Передача файлов по HTTP
apache
nginx
vs
![Page 17: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/17.jpg)
Динамические страницы на CGI
apache CGIОЙ!
![Page 18: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/18.jpg)
mod_perlmod_phpFastCGI
master
worker
modphp
FastCGI
worker
modperlПродай слона!
![Page 19: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/19.jpg)
Маленький prefork
скрипт скрипт
скриптскрипт скрипт
скрипт
1. Организуем POOL
2. Уходим от CGI к HTTP
3. Не кормим слона
4. …
5. PROFIT!!!!!
![Page 20: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/20.jpg)
prefork or not prefork?
скрипт
скриптчат
война
чат
война
скрипт хранилищеОЙ!
![Page 21: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/21.jpg)
Комбинируем prefork и multiplex
скрипт
скрипт
чат
война
чат
война
скрипт
демон
демон
![Page 22: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/22.jpg)
Как сделать multiplex демон?
pavel-kudinov.livejournal.com/47420.html
см. доклад HighLoad-2007«Сетевая многозадачность:событийные машины»
Как собрать всё воедино?
![Page 23: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/23.jpg)
Проблемы realtime проекта
1. ОЙ!
![Page 24: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/24.jpg)
Проблемы realtime проекта• Упало
– Frontend (nginx)– Backend (любой prefork pool)– Демоны (multiplex чата, «войны»)– Хранилище (SQL/memcached/велосипед)
• Хотим внести изменения• Статистика и логи
![Page 25: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/25.jpg)
KISS: Keep it simple, Stupid!
Перфекционизм – это патология …
(с) WikiPedia
![Page 26: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/26.jpg)
Упало: Frontend (nginx)• Дайте два!
– DNS balancer– Linux Virtual Server– carp + nginx– велосипед?
![Page 27: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/27.jpg)
Упало: Backend (prefork pool)
ВСЕ СРАЗУ?Упал
backend
да ОЙ!
нет HeartBeat
![Page 28: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/28.jpg)
Упало: демоны (чата, «войны»)
Железно?Упал
демон
да
нет WatchDog
Запасной сервер
![Page 29: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/29.jpg)
Упало: хранилище
Реплика целая?
Упала база
да
нетБекап
теперь она
мастер
![Page 30: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/30.jpg)
Зомби нельзя убить!
• Целостность данных нарушена?
• Аварийное завершение процесса?
• Сервис временно недоступен?
• НИЧЕГО СТРАШНОГО!
![Page 31: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/31.jpg)
Хотим внести изменения
• «Мягкий» рестарт?
• 404 Not Found?• “Вам повезло: мы делаем кое-что новое”
![Page 32: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/32.jpg)
Статистика и логи
• Асинхронный коллектор
• Выделенный SQL сервер
• «Ваш запрос поставлен в очередь»(приходите через 20 минут)
![Page 33: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/33.jpg)
Как-то так…
nginx
nginx
prefork MASTER SLAVE
чат бой SQL
скрипт
логи
![Page 34: архитектурные приемы онлайн игры](https://reader033.vdocuments.mx/reader033/viewer/2022061109/545170a0af7959af2f8b8d5c/html5/thumbnails/34.jpg)
Спасибо за внимание!
Архитектурные приемы:
онлайн-игрыПавел КудиновПавел Кудинов[email protected]@kudinov.namepavel-kudinovpavel-kudinovpavel-kudinovpavel-kudinov