34
Архитектурные приемы: онлайн-игры Павел Кудинов

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

  • Upload
    ontico

  • View
    16

  • Download
    3

Embed Size (px)

DESCRIPTION

 

Citation preview

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

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

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

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

О чём?• отказываемся от SQL+memcached• отказываемся от Apache• комбинируем prefork и multiplex• проблемы realtime проекта• KISS• о перфекционизме

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

SQLid name hp

666 Завулон 10000

player_id item

666 мел судьбы

666 «старый мельник»

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

Скриптid 666

name Завулон

hp 10000

items 1 мел судьбы

2 «старый мельник»

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

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: архитектурные приемы онлайн игры

SQL «проседает» на чтении

SQL скриптОЙ!

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

Применяем memcached

id 666

name Завулон

hp 10000

items 1 мел судьбы

2 «старый мельник»

u_666 =>

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

SQL + скрипт + memcached

SQL скриптmem

cached

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

SQL «проседает» на записи

SQL скрипт

ОЙ!

memcached

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

memcached играет роль БД!

SQL скриптmem

cachedой?

backup

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

Зачем теперь 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: архитектурные приемы онлайн игры

диск

скрипт кеш

backup

интер фейс

ой?

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

Всё уже украдено до нас

• MemcacheDB by Google

• TugelaCache by MediaWiki

• BerkleyDB by Oracle

• In Soviet Russia, Велосипед by YOU!

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

Apachemaster

worker worker

modperl

FastCGI

worker

... CGI

запрос

запрос

запрос

Apache

запрос

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

Эволюция Apache

1. Передача файлов по HTTP

2. Динамические страницы на CGI

3. Быстрая динамика на mod_* и FastCGI

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

Передача файлов по HTTP

apache

nginx

vs

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

Динамические страницы на CGI

apache CGIОЙ!

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

mod_perlmod_phpFastCGI

master

worker

modphp

FastCGI

worker

modperlПродай слона!

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

Маленький prefork

скрипт скрипт

скриптскрипт скрипт

скрипт

1. Организуем POOL

2. Уходим от CGI к HTTP

3. Не кормим слона

4. …

5. PROFIT!!!!!

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

prefork or not prefork?

скрипт

скриптчат

война

чат

война

скрипт хранилищеОЙ!

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

Комбинируем prefork и multiplex

скрипт

скрипт

чат

война

чат

война

скрипт

демон

демон

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

Как сделать multiplex демон?

pavel-kudinov.livejournal.com/47420.html

см. доклад HighLoad-2007«Сетевая многозадачность:событийные машины»

Как собрать всё воедино?

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

Проблемы realtime проекта

1. ОЙ!

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

Проблемы realtime проекта• Упало

– Frontend (nginx)– Backend (любой prefork pool)– Демоны (multiplex чата, «войны»)– Хранилище (SQL/memcached/велосипед)

• Хотим внести изменения• Статистика и логи

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

KISS: Keep it simple, Stupid!

Перфекционизм – это патология …

(с) WikiPedia

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

Упало: Frontend (nginx)• Дайте два!

– DNS balancer– Linux Virtual Server– carp + nginx– велосипед?

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

Упало: Backend (prefork pool)

ВСЕ СРАЗУ?Упал

backend

да ОЙ!

нет HeartBeat

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

Упало: демоны (чата, «войны»)

Железно?Упал

демон

да

нет WatchDog

Запасной сервер

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

Упало: хранилище

Реплика целая?

Упала база

да

нетБекап

теперь она

мастер

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

Зомби нельзя убить!

• Целостность данных нарушена?

• Аварийное завершение процесса?

• Сервис временно недоступен?

• НИЧЕГО СТРАШНОГО!

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

Хотим внести изменения

• «Мягкий» рестарт?

• 404 Not Found?• “Вам повезло: мы делаем кое-что новое”

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

Статистика и логи

• Асинхронный коллектор

• Выделенный SQL сервер

• «Ваш запрос поставлен в очередь»(приходите через 20 минут)

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

Как-то так…

nginx

nginx

prefork MASTER SLAVE

чат бой SQL

скрипт

логи

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

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

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

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