Подобряване на производителността на Django: Използване на отделен Memcached за сесии

Научете как значително да подобрите производителността на Django чрез внедряване на отделна Memcached инстанция за управление на сесии, предотвратявайки излизането на потребителите по време на обновяване на кеша.

Като разработчици на Django често се сблъскваме с проблеми с производителността, особено когато става въпрос за управление на сесии. Сесиите, базирани на база данни, могат значително да забавят вашето приложение. Въпреки че Memcached предлага решение, то идва със собствено предизвикателство: загуба на данни за сесиите по време на рестартиране на сървъра или обновяване на кеша. В тази публикация ще ви покажа как да преодолеете този проблем, като използвате две отделни Memcached инстанции - една за обикновени Python обекти и друга, посветена на данните за сесиите.

Проблемът с единична Memcached инстанция

Когато използвате една Memcached инстанция както за общо кеширане, така и за сесии, рестартирането на сървъра или изчистването на кеша води до излизане на всички потребители. Това създава лошо потребителско изживяване и може да бъде особено проблематично за сайтове с голям трафик.

Решението: Настройка с двоен Memcached

Чрез внедряване на отделна Memcached инстанция за сесии можем да поддържаме потребителските сесии дори при изчистване на основния кеш. Ето как да го настроите:

  1. Създайте два нови файла в директорията на вашия проект:

Файл 1: session_backend.py

Този файл е модифицирана версия на Django’s contrib/sessions/backends/cache.py:

1
2
3
4
5
from django.contrib.sessions.backends.base import SessionBase, CreateError
from yourproject.session_cache import cache

class SessionStore(SessionBase):
    # ... [останалата част от кода остава същата като в оригиналната публикация]

Файл 2: session_cache.py

Този файл инициализира отделния кеш за сесии:

1
2
3
4
5
6
from django.core.cache.backends.memcached import CacheClass
from django.conf import settings

scheme, rest = settings.SESSION_CACHE.split(':', 1)
host = rest[2:-1]
cache = CacheClass(host, {})
  1. Актуализирайте вашия settings.py:
1
2
SESSION_ENGINE = "yourproject.session_backend"
SESSION_CACHE = 'memcached://127.0.0.1:11200/'
  1. Стартирайте нова Memcached инстанция на порт 11200.

Ползи от този подход

  1. Подобрена производителност: Сесиите сега се управляват в паметта, значително по-бързо от заявки към базата данни.
  2. Устойчивост на потребителските сесии: Потребителите остават влезли дори при изчистване на основния кеш на приложението.
  3. Мащабируемост: Отделянето на съхранението на сесии позволява по-лесно мащабиране на вашата кеш инфраструктура.

Съвети за внедряване

  • Уверете се, че вашите Memcached инстанции са правилно защитени, особено ако работят на отделен сървър.
  • Следете използването на паметта на вашата Memcached инстанция за сесии, за да предотвратите препълване.
  • Помислете за внедряване на политики за изтичане на сесиите, за да управлявате дълго неактивни сесии.

Чрез внедряване на тази настройка с двоен Memcached ще забележите значително подобрение в производителността и потребителското изживяване на вашето Django приложение. Разделянето на отговорностите позволява по-гъвкаво управление на кеша без да нарушава потребителските сесии.

Внедрили ли сте това решение или имате въпроси? Не се колебайте да се свържете с мен на [email protected]. Винаги се вълнувам да обсъждам оптимизации на Django и да помагам на колеги разработчици да подобрят своите приложения.

Приятно кодиране и нека вашите Django приложения бъдат винаги бързи и стабилни!

Writing about the internet