Підвищення продуктивності 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