Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

На чём развернуть высоко нагруженный сайт (python, MySQL)?

#python #nginx #linux #mysql #сервер


Есть работающий сайт, написанный на Python (Django), и БД - MySQL.
Так как разработчики не сильно потрудились над написанием оптимизированного кода,
сайт получился очень тяжелым. И при посещаемости в десяток тысяч в день, в пиковое
время сервер не справляется с нагрузкой и выкидывает тех кого не успел обслужить.
Вот система физического сервера:
 1. 2 ядра по 1,8GHz
 2. ОЗУ 2Гб

Вот на чем сейчас сервер развернут:
mysql + nginx + fastcgi

Так вот вопрос: хотелось бы услышать мнение бывалых, опытных, или просто знающих,
на чем можно еще развернуть данный сайт, дабы было максимально быстро, ресурсо ёмко?
Или же данная связка является самой быстрой? Может кто делал сравнение быстродействия.
А также возможно кто-то в курсе как оптимизировать работу сервера так чтобы гиганское
количество запросов в БД не ложило сервер, может какая-то настройка?
Спасибо.    


Ответы

Ответ 1



В принципе, связка достаточно быстрая. Но у вас, скорее всего просто сильно не оптимизированный код и/или SQL-запросы, не используется кэширование и т.д. Я разворачивал примерно на вашей конфигурации на связке Apache + mod_wsgi + Nginx(для статики), и таких мощностей на такую нагрузку хватало. Посмотрите в сторону настроек кэширования запросов MySQL. Конфигурационные параметры типа (цитата): > query_cache_size — размер кеша запросов. > query_cache_limit — размер максимальной выборки, хранимой в кеше; > query_cache_min_res_unit — минимальный размер блока, хранимого в кеше; > query_cache_wlock_invalidate - определяет будут ли данные браться из кеша, если таблица, к которым они относятся заблокирована на чтение.

Ответ 2



Замена fastcgi на uwsgi может придать небольшое ускорение. Это, конечно, не спасет от сотни запросов которые создает ORM джанги.

Ответ 3



Допилите по быстрому сайт. Добавьте кеширование отдаваемого контента на запросы пользователей в базу redis. Скорее всего одинаковых страниц оч. и оч. много. Возможно это в корень решит вашу проблему.

Ответ 4



От MySql рекомендую отказаться в пользу PostgreSql. Легче переживёте проблему 100k и отмасштабируетесь когда нужно. Вот текущий идеал в плане быстродействия: Python - PostgreSql - Django - uwsgi - nginx И помните что железо стоит дешевле кода. :-)

Ответ 5



Вам не на связках сейчас стоит заморачиваться, а сделать упор на оптимизации СУБД и БД. Найдите того, кто действительно в этом разбирается.

Ответ 6



Для одного из своих нагруженных проектов использую tornado + nginx само решение находится здесь Выдерживает более 20К за сутки на таком же железе что и в описанной конфигурации,

Комментариев нет:

Отправить комментарий