Passa al contenuto principale

Postgres e Redis

Fai girare un server e diversi worker su uno store Postgres e un broker Redis condivisi.

Prerequisiti​

  • i plugin afe-postgres e afe-redis installati.
  • Docker, per far girare Postgres e Redis in locale con docker/compose.yml.

Passi​

  1. Nomina uno store e un broker in un manifest Runtime.

    Un processo afe serve e diversi processi afe worker condividono allora gli stessi ticket in sicurezza. Il lock per ticket e lo store write-ahead impediscono a due worker di ripetere il lavoro.

  2. Avvia Postgres e Redis per le esecuzioni locali con docker/compose.yml.

    Fa girare Postgres 17 su 127.0.0.1:5434 e Redis 8 su 127.0.0.1:6381. Gli stessi servizi servono le esecuzioni locali, make integration e make e2e. Fermali con make down, che ferma anche Langfuse, il collector OpenTelemetry e il cluster kind quando sono accesi.

  3. Avvia un afe serve e diversi processi afe worker su quello store e quel broker.

Migrazioni​

Il plugin Postgres porta con sé migrazioni SQL numerate.

All'avvio prende un lock consultivo di Postgres, crea una tabella schema_version e applica ogni migrazione sopra la versione registrata, una transazione ciascuna. Due processi che partono insieme applicano ogni migrazione una volta sola. Un database già all'ultima versione non viene toccato.

Risoluzione dei problemi​

Sintomo: afe serve o afe worker non riesce a connettersi, con un errore connection refused. Causa: Postgres o Redis non sono attivi, oppure AFE_POSTGRES_DSN e AFE_REDIS_URL puntano all'host o alla porta sbagliati. Rimedio: avvia i servizi con docker compose -f docker/compose.yml up -d --wait, poi controlla entrambe le variabili contro le porte indicate sopra.

Sintomo: due processi partono insieme e uno registra un errore di migrazione. Causa: non dovrebbe succedere. Il lock consultivo serializza le migrazioni tra i processi. Rimedio: segnalalo, con l'errore completo, come difetto: indica una migrazione rotta o un lock che non ha tenuto.

Vedi anche​