архитектурные приемы онлайн игры

Preview:

DESCRIPTION

 

Citation preview

Архитектурные приемы:онлайн-игры

Павел Кудинов

О чём?• отказываемся от 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

скрипт

логи

Спасибо за внимание!

Архитектурные приемы:

онлайн-игрыПавел КудиновПавел Кудиновpavel@kudinov.namepavel@kudinov.namepavel-kudinovpavel-kudinovpavel-kudinovpavel-kudinov

Recommended