Международная конференция разработчиков
и пользователей свободного программного обеспечения

NoSQL и Async web фреймворки не нужны

Maksim Melnikau, Linux Mobile hobbyist, World of Tanks developer

LVEE Winter 2012

Its a complicated task to write a web-based highload project, and finding best instruments for it is even harder. NoSQL and different async web frameworks becomes widely used. There is a problem with them, as they are promoted as the solution with cost of higher entrance level, offering ability to do everything in one way, in one place. But, in fact, classic, old-fashion way still rocks. While using layering and with the best instruments for each level you can easily get maximum performance and scale-ability.

Высокоронагруженный web проект должен не только хорошо держать нагрузку, но и эффективно потреблять ресурсы. Разрабатывая такой проект, необходимо понимать какого рода проблемы и задачи на каком уровне должны решаться. Вот неполный список задач, которые необходимо решить:

1. поддержка огромного количества http подключений одновременно
2. кэширование данных и генерации сложного контента
3. система должна простаивать когда нет нагрузки
4. при росте количества запросов, должно рости потребление ресурсов. а не время ответа
5. потребление ресурсов должно достигнуть 100% при достижении некоторой максимальной нагрузки
6. время обработки запросов пользователей должно быть минимальным
7. время передачи ответа пользователю должно быть минимальным
8. система должна работать стабильно в случае отказа сторонних сервисов, временный отказ должен проходить незаметно для пользователя.

Различные Async(NodeJS, Tornado, Twisted) и NoSQL-решения (Redis, MongoDB, Cassandra) кажутся найлучшим выбором, пока вы делается ваше web как одно большое целое. Если же немного подумать, большинство проектов разбиваются на кучу маленьких, каждый из которых легко и непренуждённо может быть реализован классическим подходом, оставаясь при этом маштабируеймым и высокопроизводительным. А HTTP-протокол, благодоря отсуствию состояний – становится лучшим помошником. Что касается баз данных, ввод грамотно реализованных уровней кэширования невелирует проблему высокий нагрузок на базы данных до момента достижения каких-то фантастических нагрузок, с которыми почти никто на деле и не сталкивается.

Для разработки worldoftanks.ru используется расширенный LAMP (Linux Apache MySQL PHP) подход – LNAMMRP (Linux nginx Apache memcached MySQL RabbitMQ Python).

nginx: handling http сессий от пользователя
apache: управление подконтрольными рабочими процессами
memcached: кэширование без проблем
RabbitMQ: сервер очередей для асинхронной обработки медленных задач
Python: реализация бизнесс требований (Django)

Это позволяет не тока держать высокие нагрузки, но и использовать накопленный всем миром опыт не оставаясь с проблемой один на один.

Лицензия Creative Commons
Текст тезисов доступен под лицензией Creative Commons Attribution-ShareAlike 3.0.

Presentation