Zvýšenie výkonu Django: Použitie samostatného Memcached pre relácie

Naučte sa, ako výrazne zlepšiť výkon Django implementáciou samostatnej inštancie Memcached pre správu relácií, čím zabránite odhláseniu používateľov počas obnovenia vyrovnávacej pamäte.

Ako vývojári Django sa často stretávame s problémami s výkonom, najmä pri správe relácií. Relácie založené na databáze môžu výrazne spomaliť vašu aplikáciu. Hoci Memcached ponúka riešenie, prináša vlastnú výzvu: stratu údajov relácie počas reštartovania servera alebo obnovenia vyrovnávacej pamäte. V tomto príspevku vám ukážem, ako prekonať tento problém použitím dvoch samostatných inštancií Memcached - jednej pre bežné Python objekty a druhej určenej pre údaje relácií.

Problém s jednou inštanciou Memcached

Pri používaní jednej inštancie Memcached pre všeobecné kešovanie aj relácie vedie reštartovanie servera alebo vymazanie vyrovnávacej pamäte k odhláseniu všetkých používateľov. To vytvára zlú používateľskú skúsenosť a môže byť obzvlášť problematické pre stránky s vysokou návštevnosťou.

Riešenie: Nastavenie dvoch Memcached

Implementáciou samostatnej inštancie Memcached pre relácie môžeme udržiavať používateľské relácie aj pri vymazaní hlavnej vyrovnávacej pamäte. Tu je návod, ako to nastaviť:

  1. Vytvorte dva nové súbory v adresári vášho projektu:

Súbor 1: session_backend.py

Tento súbor je upravená verzia 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):
    # ... [zvyšok kódu zostáva rovnaký ako v pôvodnom príspevku]

Súbor 2: session_cache.py

Tento súbor inicializuje samostatnú vyrovnávaciu pamäť pre relácie:

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. Spustite novú inštanciu Memcached na porte 11200.

Výhody tohto prístupu

  1. Zlepšený výkon: Relácie sú teraz spravované v pamäti, čo je výrazne rýchlejšie ako databázové dotazy.
  2. Perzistencia používateľských relácií: Používatelia zostávajú prihlásení aj pri vymazaní hlavnej vyrovnávacej pamäte aplikácie.
  3. Škálovateľnosť: Oddelenie úložiska relácií umožňuje jednoduchšie škálovanie vašej kešovacej infraštruktúry.

Tipy pre implementáciu

  • Uistite sa, že vaše inštancie Memcached sú správne zabezpečené, najmä ak bežia na samostatnom serveri.
  • Monitorujte využitie pamäte vašej inštancie Memcached pre relácie, aby ste predišli pretečeniu.
  • Zvážte implementáciu politík expirácie relácií na správu dlho neaktívnych relácií.

Implementáciou tohto nastavenia s dvoma Memcached zaznamenáte výrazné zlepšenie výkonu vašej Django aplikácie a používateľskej skúsenosti. Oddelenie záujmov umožňuje flexibilnejšiu správu vyrovnávacej pamäte bez narušenia používateľských relácií.

Implementovali ste toto riešenie alebo máte otázky? Neváhajte ma kontaktovať na [email protected]. Vždy sa teším na diskusiu o optimalizáciách Django a rád pomôžem kolegom vývojárom vylepšiť ich aplikácie.

Šťastné kódovanie a nech sú vaše Django aplikácie vždy rýchle a stabilné!

Writing about the internet