Какова наилучшая конфигурация развертывания для Django? - PullRequest
0 голосов
/ 12 декабря 2011

Я буду развертывать свой проект django на сервере. Для этого я планирую провести следующую оптимизацию.

  • Что я хотел бы знать, так это то, что я что-то упустил?
  • Как мне сделать это лучше?

Внешний интерфейс:

  1. Django-static (для сжатия статических сред)
  2. Запуск jquery из CDN
  3. Контроль кэша для заголовков
  4. Индексирование базы данных Django (для определенных моделей)

Серверная сторона:

  1. uswgi и nginx .
  2. Memcached (Для определенных запросов)
  3. Размещение носителя и базы данных на отдельных серверах

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Вот некоторые оптимизации, которые я использую на регулярной основе:

frontend:

  1. Используйте библиотеку загрузки js, такую ​​как labjs , requirejs или yepnope .Вы все равно должны сжимать / объединять свои js-файлы, но в большинстве случаев представляется целесообразным сделать несколько запросов к нескольким js-файлам и запустить их параллельно, чтобы на каждой странице имелся по 1 огромному js-файлу.Я всегда разделяю их на группы, которые имеют смысл сбалансировать запросы и загрузку parellel.Некоторые также допускают условную загрузку и восстановление после отказа (т. Е. Если по какой-то причине ваш cdn'd jquery больше не существует)

  2. Используйте спрайты, где это возможно.

Бэкэнд:

  1. настройка django-компрессора (django-static в порядке)
  2. Включение сжатия gzip в nginx.
  3. Если вы используете postgresql (который является рекомендуемой базой данных sql), используйте что-то вроде pgbouncer или pgpool2.
  4. Использование и настройка кэша (я использую redis)
  5. (уже упоминалось - используйте сельдерей для всего, что может занять больше времени)
  6. Небольшая работа с базой данных: используйте индексы там, где это необходимо,обращайте внимание на то, чтобы делать слишком много запросов (обычно, когда вы не используете select_related там, где вы должны) или медленных запросов (включите медленные запросы журнала в вашей базе данных).Всегда используйте select_related с аргументами.
  7. При реализации поиска я всегда использую автономную поисковую систему.(asticsearch / solr)
  8. Теперь идет профилирование приложения и поиск улучшений, специфичных для кода.Некоторые вещи, на которые следует обратить внимание .
1 голос
/ 12 декабря 2011

Можно установить Celery, если вам нужно поддерживать асинхронные и периодические задачи.Если вы это сделаете, рассмотрите возможность установки Redis вместо Memcached.Используя Redis, вы можете управлять сессиями и выполнять операции Celery, а также выполнять кэширование.

Взгляните здесь: http://unfoldthat.com/2011/09/14/try-redis-instead.html

...