Django-suorituskyvyn parannus: Erillisen Memcached-instanssin käyttö istunnoille

Opi parantamaan Djangon suorituskykyä merkittävästi toteuttamalla erillinen Memcached-instanssi istunnonhallintaa varten, estäen käyttäjien uloskirjautumisen välimuistin päivitysten aikana.

Django-kehittäjinä kohtaamme usein suorituskykyongelmia, erityisesti istunnonhallinnan kanssa. Tietokantapohjaiset istunnot voivat hidastaa sovellustasi huomattavasti. Vaikka Memcached tarjoaa ratkaisun, sillä on oma haasteensa: istuntotietojen menettäminen palvelimen uudelleenkäynnistysten tai välimuistin päivitysten aikana. Tässä artikkelissa näytän, miten voit ratkaista tämän ongelman käyttämällä kahta erillistä Memcached-instanssia - yhtä tavallisille Python-objekteille ja toista istuntotiedoille.

Ongelma yksittäisen Memcached-instanssin kanssa

Kun käytetään yhtä Memcached-instanssia sekä yleiseen välimuistiin että istuntoihin, palvelimen uudelleenkäynnistys tai välimuistin tyhjentäminen johtaa kaikkien käyttäjien uloskirjautumiseen. Tämä luo huonon käyttäjäkokemuksen ja voi olla erityisen ongelmallista korkean liikenteen sivustoille.

Ratkaisu: Kahden Memcached-instanssin asennus

Toteuttamalla erillisen Memcached-instanssin istunnoille voimme ylläpitää käyttäjäistuntoja jopa päävälimuistia tyhjennettäessä. Näin se asetetaan:

  1. Luo kaksi uutta tiedostoa projektihakemistoosi:

Tiedosto 1: session_backend.py

Tämä tiedosto on muokattu versio Djangon contrib/sessions/backends/cache.py:stä:

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

class SessionStore(SessionBase):
    # ... [loput koodista pysyy samana kuin alkuperäisessä julkaisussa]

Tiedosto 2: session_cache.py

Tämä tiedosto alustaa erillisen välimuistin istunnoille:

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. Päivitä settings.py:
1
2
SESSION_ENGINE = "yourproject.session_backend"
SESSION_CACHE = 'memcached://127.0.0.1:11200/'
  1. Käynnistä uusi Memcached-instanssi portissa 11200.

Tämän lähestymistavan edut

  1. Parantunut suorituskyky: Istuntoja hallitaan nyt muistissa, mikä on huomattavasti nopeampaa kuin tietokantakyselyt.
  2. Käyttäjäistuntojen pysyvyys: Käyttäjät pysyvät kirjautuneina sisään jopa pääsovelluksen välimuistia tyhjennettäessä.
  3. Skaalautuvuus: Istuntojen tallennuksen erottaminen mahdollistaa välimuisti-infrastruktuurin helpomman skaalaamisen.

Toteutusvinkkejä

  • Varmista, että Memcached-instanssisi on asianmukaisesti suojattu, erityisesti jos se toimii erillisellä palvelimella.
  • Seuraa istuntojen Memcached-instanssin muistinkäyttöä ylivuodon estämiseksi.
  • Harkitse istuntojen vanhenemiskäytäntöjen toteuttamista pitkään inaktiivisten istuntojen hallitsemiseksi.

Toteuttamalla tämän kahden Memcached-instanssin asennuksen huomaat huomattavan parannuksen Django-sovelluksesi suorituskyvyssä ja käyttäjäkokemuksessa. Vastuiden erottaminen mahdollistaa joustavamman välimuistin hallinnan häiritsemättä käyttäjäistuntoja.

Oletko toteuttanut tämän ratkaisun tai onko sinulla kysyttävää? Ota yhteyttä minuun osoitteessa [email protected]. Olen aina innoissani keskustelemassa Django-optimoinneista ja auttamassa muita kehittäjiä parantamaan sovelluksiaan.

Hauskaa koodausta, ja olkoot Django-sovelluksesi aina nopeita ja vakaita!

Writing about the internet