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

6,087 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,087
On SlideShare
0
From Embeds
0
Number of Embeds
1,630
Actions
Shares
0
Downloads
52
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. Архитектурные приемы : онлайн-игры Павел Кудинов
  2. 2. О чём? <ul><li>отказываемся от SQL+memcached </li></ul><ul><li>отказываемся от Apache </li></ul><ul><li>комбинируем prefork и multiplex </li></ul><ul><li>проблемы realtime проекта </li></ul><ul><li>KISS </li></ul><ul><li>о перфекционизме </li></ul>
  3. 3. SQL 10000 hp Завулон name 666 id «старый мельник» 666 мел судьбы item 666 player_id
  4. 4. Скрипт «старый мельник» мел судьбы 2 1 items 10000 hp Завулон 666 name id
  5. 6. SQL «проседает» на чтении
  6. 7. Применяем memcached u_666 => «старый мельник» мел судьбы 2 1 items 10000 hp Завулон 666 name id
  7. 8. SQL + скрипт + memcached
  8. 9. SQL «проседает» на записи
  9. 10. memcached играет роль БД !
  10. 11. Зачем теперь SQL ? <ul><li>две различных схемы </li></ul><ul><li>доступ только по ключу </li></ul>
  11. 13. Всё уже украдено до нас <ul><li>MemcacheDB by Google </li></ul><ul><li>TugelaCache by MediaWiki </li></ul><ul><li>BerkleyDB by Oracle </li></ul><ul><li>In Soviet Russia , Велосипед by YOU ! </li></ul>
  12. 14. Apache
  13. 15. Эволюция Apache <ul><li>Передача файлов по HTTP </li></ul><ul><li>Динамические страницы на CGI </li></ul><ul><li>Быстрая динамика на mod_* и FastCGI </li></ul>
  14. 16. Передача файлов по HTTP
  15. 17. Динамические страницы на CGI
  16. 18. mod_perl mod_php FastCGI Продай слона!
  17. 19. Маленький prefork <ul><li>Организуем POOL </li></ul><ul><li>Уходим от CGI к HTTP </li></ul><ul><li>Не кормим слона </li></ul><ul><li>… </li></ul><ul><li>PROFIT!!!!! </li></ul>
  18. 20. prefork or not prefork?
  19. 21. Комбинируем prefork и multiplex
  20. 22. Как сделать multiplex демон ? pavel-kudinov.livejournal.com/47420.html см. доклад HighLoad-2007 « Сетевая многозадачность: событийные машины » Как собрать всё воедино?
  21. 23. Проблемы realtime проекта <ul><li>ОЙ! </li></ul>
  22. 24. Проблемы realtime проекта <ul><li>Упало </li></ul><ul><ul><li>Frontend (nginx) </li></ul></ul><ul><ul><li>Backend ( любой prefork pool) </li></ul></ul><ul><ul><li>Демоны ( multiplex чата, «войны») </li></ul></ul><ul><ul><li>Хранилище ( SQL/memcached/ велосипед ) </li></ul></ul><ul><li>Хотим внести изменения </li></ul><ul><li>Статистика и логи </li></ul>
  23. 25. KISS: Keep it simple, Stupid! Перфекционизм – это патология … (с) WikiPedia
  24. 26. Упало : Frontend (nginx) <ul><li>Дайте два! </li></ul><ul><ul><li>DNS balancer </li></ul></ul><ul><ul><li>Linux Virtual Server </li></ul></ul><ul><ul><li>carp + nginx </li></ul></ul><ul><ul><li>велосипед? </li></ul></ul>
  25. 27. Упало : Backend (prefork pool)
  26. 28. Упало : демоны (чата, «войны»)
  27. 29. Упало : хранилище
  28. 30. Зомби нельзя убить! <ul><li>Целостность данных нарушена? </li></ul><ul><li>Аварийное завершение процесса? </li></ul><ul><li>Сервис временно недоступен? </li></ul><ul><li>НИЧЕГО СТРАШНОГО! </li></ul>
  29. 31. Хотим внести изменения <ul><li>«Мягкий» рестарт? </li></ul><ul><li>404 Not Found? </li></ul><ul><li>“ Вам повезло : мы делаем кое-что новое ” </li></ul>
  30. 32. Статистика и логи <ul><li>Асинхронный коллектор </li></ul><ul><li>Выделенный SQL сервер </li></ul><ul><li>«Ваш запрос поставлен в очередь» (приходите через 20 минут) </li></ul>
  31. 33. Как-то так…
  32. 34. Спасибо за внимание! <ul><li>Архитектурные приемы : </li></ul><ul><li>онлайн-игры </li></ul>Павел Кудинов [email_address] pavel-kudinov pavel-kudinov

×