# Har flyttet langsomme opgaver til en River‑jobkø

Har flyttet langsomt arbejde væk fra request‑stien og over på en River‑jobkø — 15 worker‑moduler, 8 planlagte opgaver og 20 pg_cron‑jobs — så en request returnerer, mens arbejdet bag den kører videre.

2025

**Situation.** Noget arbejde har ingen gang på jorden, mens en bruger venter. At sende mail, at genopbygge et søgeindeks, at generere et dokument, at genberegne placeringer — gør man noget af det inde i requesten, kigger brugeren på en spinner for noget, vedkommende aldrig bad om at se. Lægger man det i stedet i en goroutine, forsvinder det i det øjeblik, processen genstarter — og det vil den gøre, midt i en udrulning, uden spor af, at det nogensinde skulle være sket.

**Opgave.** Baggrundsarbejdet havde brug for et holdbart sted at ligge: en kø, der overlever en genstart, prøver igen ved fejl og kan undersøges, når noget ikke er sket.

**Handling.** Valget faldt på River, i høj grad fordi den har sin kø i PostgreSQL — databasen er i forvejen det autoritative register, så et job og de rækker, det rører, committer eller ruller tilbage sammen, og der er ingen ekstra infrastruktur at drive og forholde sig til. Bag den ligger 15 worker‑moduler og 8 planlagte opgaver. Nedenunder står 20 pg_cron‑jobs for den vedligeholdelse, som databasen er bedre egnet til at klare selv: at rydde gamle partitioner op, at rotere salts, at opdatere aggregater. Alt, der var langsomt nok til at blive bemærket, blev flyttet væk fra request‑stien og over på en af de to.

**Resultat.** Requests svarer hurtigt, og det langsomme arbejde bliver stadig gjort færdigt, med nye forsøg og en synlig historik, når det ikke lykkes. At holde køen i Postgres frem for i en dedikeret broker er en bevidst begrænsning: det skalerer ikke i det uendelige, og ved en vis mængde bliver det det forkerte svar. For en platform, hvis flaskehals alligevel er databasen, var én bevægelig del mindre mere værd end ekstra kapacitet, der ikke ville blive brugt.

---

- Rolle: Backend‑udvikler
- Kategorier: [Backend‑udvikling](https://engineer.company/da/categories/backend/), [Databaser](https://engineer.company/da/categories/databases/), [PostgreSQL](https://engineer.company/da/categories/postgresql/), [Automatisering & CI/CD](https://engineer.company/da/categories/automation/), [Driftssikkerhed & backup](https://engineer.company/da/categories/reliability/), [Optimering af ydeevne](https://engineer.company/da/categories/performance/)
- Ydelser: [Backend- & API‑udvikling](https://engineer.company/da/services/backend-development/), [Databasedesign & datamodellering](https://engineer.company/da/services/database-design/), [Site reliability & overvågning](https://engineer.company/da/services/site-reliability/)

<https://engineer.company/da/portfolio/moved-slow-work-onto-a-river-job-queue/>
