Zvýšení výkonu Django: Použití samostatného Memcached pro relace

Naučte se výrazně zlepšit výkon Django implementací samostatné instance Memcached pro správu relací, čímž zabráníte odhlášení uživatelů během obnovení mezipaměti.

Jako vývojáři Django se často setkáváme s výkonovými úzkými místy, zejména při práci se správou relací. Relace založené na databázi mohou výrazně zpomalit vaši aplikaci. Zatímco Memcached nabízí řešení, přináší vlastní výzvu: ztrátu dat relací během restartů serveru nebo obnovení mezipaměti. V tomto příspěvku vám ukážu, jak tento problém překonat použitím dvou samostatných instancí Memcached - jedné pro běžné Python objekty a druhé vyhrazené pro data relací.

Problém s jedinou instancí Memcached

Při použití jediné instance Memcached pro obecné kešování i relace vede restart serveru nebo vymazání mezipaměti k odhlášení všech uživatelů. To vytváří špatnou uživatelskou zkušenost a může být obzvláště problematické pro vysoce navštěvované weby.

Řešení: Nastavení dvou Memcached

Implementací samostatné instance Memcached pro relace můžeme udržet uživatelské relace i při vymazání hlavní mezipaměti. Zde je návod, jak to nastavit:

  1. Vytvořte dva nové soubory ve vašem projektovém adresáři:

Soubor 1: session_backend.py

Tento soubor je upravenou verzí Django 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):
    # ... [zbytek kódu zůstává stejný jako v původním příspěvku]

Soubor 2: session_cache.py

Tento soubor inicializuje samostatnou mezipaměť pro relace:

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. Aktualizujte váš settings.py:
1
2
SESSION_ENGINE = "yourproject.session_backend"
SESSION_CACHE = 'memcached://127.0.0.1:11200/'
  1. Spusťte novou instanci Memcached na portu 11200.

Výhody tohoto přístupu

  1. Zlepšený výkon: Relace jsou nyní spravovány v paměti, což je výrazně rychlejší než databázové dotazy.
  2. Perzistence uživatelských relací: Uživatelé zůstávají přihlášeni i při vymazání hlavní mezipaměti aplikace.
  3. Škálovatelnost: Oddělení úložiště relací umožňuje snadnější škálování vaší kešovací infrastruktury.

Tipy pro implementaci

  • Ujistěte se, že vaše instance Memcached jsou řádně zabezpečeny, zejména pokud běží na samostatném serveru.
  • Sledujte využití paměti vaší instance Memcached pro relace, abyste zabránili přetečení.
  • Zvažte implementaci zásad vypršení platnosti relací pro správu dlouho neaktivních relací.

Implementací tohoto nastavení dvou Memcached zaznamenáte podstatné zlepšení výkonu a uživatelské zkušenosti vaší Django aplikace. Oddělení zájmů umožňuje flexibilnější správu mezipaměti bez narušení uživatelských relací.

Implementovali jste toto řešení nebo máte otázky? Neváhejte mě kontaktovat na [email protected]. Vždy rád diskutuji o optimalizacích Django a pomáhám kolegům vývojářům vylepšit jejich aplikace.

Šťastné kódování a ať jsou vaše Django aplikace vždy rychlé a stabilní!

Writing about the internet