Marketing lanceert een e-mailcampagne naar 50.000 contacten. De interface antwoordt “gepland verzenden”. Drie uur later: 200 e-mails verzonden. Flower is niet toegankelijk, de Redis e-mailwachtrij toont 48.000 openstaande berichten en PDF-exportwerkers monopoliseren de pool sinds de ochtendcron. Niemand waarschuwde voor de diepte van de lijn – Celery “liep”, de banen wachtten in het donker.
Selderij ontkoppelt asynchroon – het beweegt de zichtbaarheid. Zonder brokermonitoring, beleid voor opnieuw proberen en bestandsscheiding hebt u een langzaam HTTP-verzoek vervangen door een onzichtbare achterstand die de kantooruren later verpest.
Waarneembare architectuur
| Onderdeel | Rol in waarneembaarheid |
|---|---|
| Makelaar | Wachtrijdiepte, publicatiesnelheid |
| Werknemers | Competitie, prefetch |
| Bloem | Interface voor actieve en mislukte taken |
| Backend-resultaten | django-selderij-resultaten in basis |
| Statistieken | selderij_export naar Prometheus |
Minimale waarschuwingen:
wachtrijlengte > 1000gedurende tien minuten- Piekfoutpercentage bij taken
- Afwezigheid van hartslagwerker
Een taak zonder maximale vertraging neemt een werknemer in beslag totdat hij opnieuw wordt opgestart.
Gezonde taken configureren
@app.task(bind=Waar, max_retries=3, standaard_retry_delay=60,
soft_time_limit=300, time_limit=360)
def send_campaign(self, batch_id):
...
acks_late=True: bevestiging na succes — vraag of de werker crasht tijdens de taak.reject_on_worker_lostafhankelijk van de makelaar.- Routing: grote opdrachten naar de
zwarewachtrij, e-mails naarsnel.
Prefetch: worker_prefetch_multiplier=1 voor lange taken — voorkomt dat een werknemer de wachtrij monopoliseert.
Dode wachtrij en storingsinspectie
Na maximale pogingen:
- Bewaar uitzonderingen en argumenten in de basis (
django-celery-results). - Breng het operationele team op de hoogte via een speciaal kanaal met de nodige context om correct te herstarten.
- Zorg voor een beheerdersinterface om na correctie handmatig opnieuw op te starten.
Doe niet 'voor altijd opnieuw proberen': een vergiftigd bericht blokkeert een slot voor onbepaalde tijd.
Makelaar en hosting
Redis broker: eenvoudig, vaak op een dedicated Redis VPS; AOF-persistentie als de berichten niet verdwijnen bij het opnieuw opstarten.
RabbitMQ: geavanceerde routing, meer operationele overhead.
Selderijwerkers werken in afzonderlijke processen van Gunicorn – vaak op dezelfde VPS voor een klein project, op een tweede machine als de belasting toeneemt. Er zijn maar weinig managed hosts die native Celery aanbieden: je beheert werknemers op VPS of cloud.
Voor geplande taken die Celery voeden, verwijzen we naar cron betrouwbaar en Gunicorn nginx.
De top: Celery zonder dashboard, het is een leugenachtige cron
Dit is wat “de taak via Celery is gegaan” in de vergadering verbergt.
Criteria voor het einde van het werk voor een Celery-taak: metriek van de wachtrijdiepte, waarschuwing en gedocumenteerde procedure voor opnieuw in de wachtrij plaatsen — niet alleen de @shared_task-decorateur.
Beslis en ga vooruit zonder blinde vlek
In een dag tijd kun je Celery waarneembaar maken zonder de hele architectuur te herzien:
- Implementeer Flower of een Prometheus-exporteur voor productie, niet alleen voor de ontwikkelomgeving waar niemand 's nachts naar de bestanden kijkt.
- Verdeel de wachtrijen op basis van kritiekheid en duur (transactionele e-mails, zware exports, nachtelijk onderhoud) zodat een lange taak een dringende verzending niet blokkeert.
- Pas doorlooptijden en maximale pogingen toe op alle bestaande taken, inclusief de taken die twee jaar geleden zijn geschreven.
- Configureer een waarschuwing wanneer de wachtrijdiepte gedurende tien tot vijftien opeenvolgende minuten een drempel overschrijdt.
- Test waarbij een medewerker abrupt wordt gestopt midden in een taak en controleer of het bericht terugkeert naar de wachtrij.
- Document wie een geblokkeerde wachtrij opnieuw start, binnen welk tijdsbestek en met welke controleprocedure na het opnieuw opstarten.
Vergelijk VPS geschikt voor werknemers via de overzicht en de vergelijker.
Veelgestelde vragen
Hoe weet ik of Celery-taken zich opstapelen?
Controleer de wachtrijlengte van makelaars met de juiste opdrachten (bijvoorbeeld LLEN op Redis of de RabbitMQ-beheerinterface), Flower-dashboard en gereserveerde of actieve taakstatistieken. Stel een waarschuwing in als de diepte langer dan vijftien minuten hoog blijft. De site kan 200 OK reageren terwijl duizenden vacatures wachten zonder dat het zakelijke team het ziet.
Wat te doen met herhaaldelijk mislukte taken?
Stel een dode wachtrij in, schakel task_acks_late in met een maximaal aantal pogingen en een progressieve back-off, en sla vervolgens fouten op in een inspecteerbare database zoals django-celery-results. Begin nooit voor onbepaalde tijd opnieuw: een vergiftigde boodschap monopoliseert een werknemer. Corrigeer de hoofdoorzaak voordat u massaal opnieuw opstart vanuit de beheerinterface.
Redis of RabbitMQ als makelaar?
Redis is dankzij het installatiegemak geschikt voor het MKB en kleine projecten. RabbitMQ neemt het over wanneer routering complex is, berichtpersistentie van cruciaal belang is of meerdere consumenten bestanden delen met fijnmazige regels. In beide gevallen moet u het geheugen van de brokerserver en de berichtpersistentie bij herstarts controleren.
Hoeveel Celery-werknemers?
Grootte van toegewezen pools per bestandstype, bijvoorbeeld -Q e-mails,exports, in plaats van één enkele pool. Zware exporten mogen niet dezelfde pool delen als transactionele e-mails, anders zou een dringende verzending twee uur kunnen wachten na een pdf-proces van tien minuten.
Celery transparant toont de wachtrij - De zwarte doos van Celery vult deze terwijl de site 200 OK reageert.
