Backend eta Arkitektura

Zeregin asinkronoen orkestrazioa Django-n Celery eta Redis-ekin

admin · · 5 min lectura · Intermediate

Errendimendu handiko web aplikazioen garapenean, zeregin astunak edo aldiro exekutatu beharrekoak atzeko planoan delegatzea funtsezkoa da erabiltzaile-interfaze arina eta sentikorra mantentzeko. Gure plataforman (maps.eus), Celery (zeregin asinkronoen kudeatzailea) eta Redis (mezu-brokerra) erabiltzen ditugu datu-fluxu konplexuak kudeatzeko, erabiltzailearen karga-denborak zigortu gabe.

Celery + Redis Arkitektura

Celeryk zereginen ilarak kontrolatzen dituen lan-banatzaile giga funtzionatzen du. Prozesu batek lan astun bat egiteko eskatzen duenean, mezua Redis-era bidaltzen du. Docker edukiontzietan modu independentean exekutatzen ari diren Celery workerrek mezu hauek kontsumitzen dituzte eta zereginak modu asinkronoan prozesatzen dituzte.

Erabilera Kasua: Kultur Ekitaldien Ingesta Periodikoa

Kultur moduluak Euskal Herriko kultur ekitaldien agenda zentralizatzen du. Ekitaldi hauek egunero eguneratzen dira OpenData APIen bidez. Deskarga eta indexazio prozesua astuna denez, karga hau programatutako zeregin baten esku uzten dugu:

  • Karga eta Ingesta (kultur.load_events): Aldian-aldian exekutatzen da django-celery-beat bidez. Ekitaldien jario ofiziala deskargatzen du, datu-basean normalizatzen ditu eta koordenatu espazialik ez duten aretoak geolokalizatzen ditu.
from celery import shared_task
from django.core.management import call_command

@shared_task(
    name="kultur.load_events",
    bind=True,
    autoretry_for=(Exception,),
    retry_backoff=60,
    retry_backoff_max=3600,
    retry_jitter=True,
    max_retries=3,
)
def load_events(self):
    call_command("load_events")
    call_command("geocode_venues")

Reintentu Adimendunen Kudeaketa Sareko Hutsegiteen Aurrean

Celery erabiltzearen abantaila handi bat akatsen kudeaketa da. OpenData Euskadiren APIa aldi baterako erabilgarri ez badago edo kanpoko mapa-zerbitzuak geokodetzean huts egiten badu, @shared_task dekoratzailea berriro saiatze automatiko progresiboekin konfiguratuta dago.

#Django #Docker #Celery
Inicio Bidaiak Pintxos

Menú de Navegación

Preferencia visual y de idioma