Масштабирование Django

Опубликовал: Wednesday, February 8, 2024 в категории Django | Пока нет комментариев

Разобравшись с запуском Django на одном сервере, посмотрим, как можно масштабировать Django по горизонтали. Мы обсудим переход от одного сервера к крупномасштабному кластеру, способному обслуживать миллионы посещений в час.

Однако важно понимать, что у каждого крупного сайта есть свои особенности, поэтому не существует единой методики масштабирования на все случаи жизни. Мы старались познакомить вас с общими принципами, но всюду, где возможно, указываем, какие возможны варианты.

Сразу скажем, что речь пойдет исключительно о масштабировании на платформе Apache + mod python. Хотя нам известно о ряде успешных опытов развертывания сайтов среднего и крупного масштаба с применением технологии FastCGI, сами мы все же лучше знакомы с Apache.

Рис. 12.5. Пример крупномасштабной системы на основе Django

Оптимизация производительности

Если вы не ограничены в деньгах, то можете решать проблемы масштабирования, покупая все новое и новое оборудование. Ну а для большинства из нас необходимостью становится оптимизация производительности.

Примечание ————————————————————-

Кстати, если вы такой богатей, может, пожертвуете кругленькую сумму в фонд Django? Необработанные алмазы и золотые слитки мы тоже принимаем.

К сожалению, оптимизация производительности - скорее, искусство, нежели наука, и писать об этом еще труднее, чем о масштабировании. Если вы серьезно вознамерились развернуть крупномасштабное приложение Django, то должны будете потратить немало времени на изучение настройки каждого компонента стека.

В следующих разделах мы просто расскажем о некоторых специфических для Django приемах, которые выработали с годами.

Памяти много не бывает

Даже самая дорогая оперативная память в наши дни вполне доступна. Купите столько памяти, сколько можете себе позволить, а потом еще немножко.

Более быстрый процессор не даст такого прироста производительности; до 90% времени веб-сервер тратит на ожидание завершения операций дискового ввода/вывода. Как только начинается свопинг, с надеждами на высокую производительность можно распрощаться. Скоростные диски немного улучшают ситуацию, но они гораздо дороже памяти, так что игра не стоит свеч.

При наличии нескольких серверов нарастите объем памяти прежде всего на сервере базы данных. Если можете себе позволить, купите столько памяти, чтобы в нее помещалась вся база данных целиком. Это не такая уж несбыточная мечта; мы как-то разработали сайт, на котором хранилось более полумиллиона газетных статей, и на все потребовалось менее 2 Гбайт памяти.

Затем добавьте памяти веб-серверу. В идеале свопинг не должен возникать ни на одном сервере - никогда. Если вы сумеете это обеспечить, то почти наверняка сможете справиться с любым возможным трафиком.

Отключите режим Keep-Alive

Режим Keep-Alive - это встроенная в протокол HTTP возможность обслуживать несколько запросов по одному TCP-соединению, избегая накладных расходов на установление и разрыв соединения.

На первый взгляд, выглядит неплохо, но может свести на нет все попытки повысить производительность Django-сайта. Если вы правильно настроите обслуживание мультимедийного содержимого с отдельного сервера, то любой пользователь, посетивший ваш сайт, будет запрашивать страницу с сервера Django примерно раз в десять секунд. В результате HTTP-серверы будут простаивать, ожидая следующего запроса на открытом соединении и при этом потребляя память, которая очень пригодилась бы активному серверу.

Используйте Memcached

Хотя Django поддерживает разные механизмы кэширования, тем не менее ни один из них даже близко не сравнится по скорости с Memcached. Если сайт испытывает высокую нагрузку, то даже не пробуйте другие механизмы - сразу обращайтесь к Memcached.

Используйте Memcached как можно чаще

Разумеется, выбор Memcached ничего не даст, если им не пользоваться. Тут вам на помощь придет глава 15; выясните, как работает подсистема кэширования в Django, и применяйте ее всюду, где возможно. Всепроникающее кэширование с вытеснением - обычно единственное, что помогает справиться с высокой нагрузкой.

Присоединяйтесь к диалогу

За каждым компонентом стека Django, будь то Linux, Apache, Postgre- SQL или MySQL, стоит впечатляющее сообщество. Если вы по-насто- ящему хотите выжать из своего сервера всю производительность до последней капли, присоединяйтесь к сообществу и обращайтесь за помощью. Большинство участников сообществ пользователей программ с открытым исходным кодом будут только рады помочь.

И обязательно вступите в сообщество пользователей Django. Авторы этой книги - всего лишь два члена невероятно активной и растущей группы разработчиков Django. Наше сообщество может поделиться огромным накопленным коллективным опытом.

Источник: Головатый А., Каплан-Мосс Дж. Django. Подробное руководство, 2-е издание. - Пер. с англ. - СПб.: Символ- Плюс, 2010. - 560 е., ил.

Похожие посты:

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

Your email address will not be published. Required fields are marked *