Django teljesítménynövelés: Külön Memcached használata a munkamenetek számára

Ismerje meg, hogyan javíthatja jelentősen a Django teljesítményét egy külön Memcached példány implementálásával a munkamenet-kezeléshez, megakadályozva a felhasználók kijelentkezését a gyorsítótár frissítése során.

Django fejlesztőként gyakran találkozunk teljesítmény szűk keresztmetszetekkel, különösen a munkamenet-kezelés során. Az adatbázis-alapú munkamenetek jelentősen lelassíthatják az alkalmazást. Bár a Memcached megoldást kínál, saját kihívással jár: a munkamenet-adatok elvesztése a szerver újraindításakor vagy a gyorsítótár frissítésekor. Ebben a bejegyzésben megmutatom, hogyan lehet leküzdeni ezt a problémát két külön Memcached példány használatával - az egyik a normál Python objektumokhoz, a másik pedig kifejezetten a munkamenet-adatokhoz.

Az egyetlen Memcached példány problémája

Amikor egyetlen Memcached példányt használunk mind az általános gyorsítótárazáshoz, mind a munkamenetekhez, a szerver újraindítása vagy a gyorsítótár törlése azt eredményezi, hogy minden felhasználó kijelentkezik. Ez rossz felhasználói élményt teremt, és különösen problémás lehet nagy forgalmú webhelyek esetén.

A megoldás: Kettős Memcached beállítás

Egy külön Memcached példány implementálásával a munkamenetek számára fenntarthatjuk a felhasználói munkameneteket még a fő gyorsítótár törlése esetén is. Íme, hogyan állíthatja be:

  1. Hozzon létre két új fájlt a projekt könyvtárában:

1. fájl: session_backend.py

Ez a fájl a Django contrib/sessions/backends/cache.py módosított verziója:

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

class SessionStore(SessionBase):
    # ... [a kód többi része ugyanaz marad, mint az eredeti bejegyzésben]

2. fájl: session_cache.py

Ez a fájl inicializálja a külön gyorsítótárat a munkamenetek számára:

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. Frissítse a settings.py fájlt:
1
2
SESSION_ENGINE = "yourproject.session_backend"
SESSION_CACHE = 'memcached://127.0.0.1:11200/'
  1. Indítson el egy új Memcached példányt a 11200-as porton.

Ennek a megközelítésnek az előnyei

  1. Javított teljesítmény: A munkamenetek most memóriában kezelődnek, ami jelentősen gyorsabb, mint az adatbázis-lekérdezések.
  2. Felhasználói munkamenet perzisztencia: A felhasználók bejelentkezve maradnak még a fő alkalmazás gyorsítótárának törlése esetén is.
  3. Skálázhatóság: A munkamenet-tárolás elkülönítése lehetővé teszi a gyorsítótárazási infrastruktúra könnyebb skálázását.

Implementációs tippek

  • Győződjön meg róla, hogy a Memcached példányai megfelelően biztonságosak, különösen ha külön szerveren futnak.
  • Figyelje a munkamenet Memcached példány memóriahasználatát a túlcsordulás megelőzése érdekében.
  • Fontolja meg a munkamenet lejárati szabályzatok implementálását a hosszú ideig inaktív munkamenetek kezelésére.

Ennek a kettős Memcached beállításnak az implementálásával jelentős javulást fog tapasztalni a Django alkalmazás teljesítményében és felhasználói élményében. A felelősségek szétválasztása rugalmasabb gyorsítótár-kezelést tesz lehetővé a felhasználói munkamenetek megszakítása nélkül.

Implementálta már ezt a megoldást, vagy vannak kérdései? Nyugodtan keressen meg a [email protected] címen. Mindig izgatott vagyok, ha Django optimalizációkról beszélhetek és segíthetek a fejlesztőtársaknak az alkalmazásaik fejlesztésében.

Boldog kódolást, és legyenek a Django alkalmazásai mindig gyorsak és stabilak!

Writing about the internet