Джанго Перформанс - PullRequest
       11

Джанго Перформанс

1 голос
/ 21 октября 2010

Я использую django с apache mod_wsgi, мой сайт содержит динамические данные на каждой странице, и все носители (css, images, js) хранятся в корзинах amazon S3, понравившихся через "http://bucket.domain.com/images/*.jpg" внутри разметки... мой вопрос, может ли лак все еще помочь мне ускорить мой веб-сервер?

Я пытаюсь сбить все камни преткновения здесь. Есть ли что-то еще, на что я должен смотреть? Я сделал профилировщик запросов для моего кода на каждой странице отображается примерно с 0,120 секунд ЦП , что кажется достаточно быстрым, но когда я использую ab -c 5 -n 100 http://mysite.com/ результаты только запросов в секунду: 12,70 [# / сек] (в среднем) ...

Я понимаю, что в игре много переменных, но я ищунекоторые советы о том, что я могу сделать, и подумал, что Varnish может быть ответом.

ОБНОВЛЕНИЕ вот скриншот моего профайлера alt text

Ответы [ 2 ]

2 голосов
/ 21 октября 2010

Несколько вещей, о которых следует подумать, прежде чем приступить к установке лака:

  • Прежде всего, вы включили промежуточное ПО для кэширования страниц в Django?
  • Правильно ли настроены и работают etags?
  • Работает ли ваш сервер базы данных оптимально?
  • Рассматривали ли вы настройку кэширования с использованием memcached в вашем коде для получения общих результатов?(особенно титульные страницы и статические страницы, отображаемые для пользователей, не вошедших в систему)

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

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

Эрик Флоренцано создал довольно полезный проект под названием django-newcache, который реализует некоторые расширенные функции кэширования,Если вы сталкиваетесь с ограничениями встроенного кэширования, подумайте об этом.http://github.com/ericflo/django-newcache

2 голосов
/ 21 октября 2010

Единственный способ повысить производительность - это если вы измеряете , что замедляет вас.Хотя это не самый лучший в мире профилировщик, Django имеет хорошую интеграцию с профилировщиком «горячей» съемки (описан здесь) , и вы можете выяснить, что занимает эти 0,120 секунды процессора.2 процессора?Если это так, то, возможно, ограничение в БД при использовании ab?Я говорю это только потому, что 0,120 * 12,70 - это 1,5, что означает, что 0,5 секунды что-то ждет.Это также может быть IO или что-то в этом роде.

Добавление другого слоя без причины, такого как лак, обычно не очень хорошая идея.Единственный случай, когда может помочь что-то вроде лака, - это если у вас медленные клиенты с плохими соединениями держатся за потоки, но тест ab не выполняет это условие и, честно говоря, это не достаточно большая проблема, чтобы оправдать дополнительный уровень.

Теперь следующая тема - кеширование, с которым может помочь лак .Ваши страницы настроены для каждого пользователя или могут быть статичными в течение длительного времени?Часто страницы статичны, за исключением простого экрана статуса входа в систему - в этом случае рассмотрите возможность загрузки этого статуса входа в JavaScript с помощью файлов cookie.Если вы можете кэшировать целые страницы, то они будут очень быстро в ab.Однако следующая проблема заключается в том, что ab на самом деле не является хорошим эталоном вашего сайта, поскольку пользователи не собираются просто сидеть на одной странице и многократно нажимать клавишу f5.

...