Productie-operaties
Deploymentopties
Op dit moment documenteert d8a twee praktische deployment-vormen:
- Single-node Docker Compose: de eenvoudigste manier om d8a met ClickHouse op één machine te draaien. Zie de Aan de slag-gids.
- Gesplitste processen op je eigen infrastructuur: draai
d8a receiverend8a workerafzonderlijk, wat de aanbevolen basis is voor meer productiegerichte opstellingen.
Als je andere deploymentopties bouwt en onderhoudt, zoals Helm charts, Kubernetes-manifests of Terraform-gebaseerde voorbeelden, dan zijn bijdragen zeer welkom.
HA
D8A ondersteunt het afzonderlijk draaien van de HTTP-receiver en de background worker, wat HA-opstellingen mogelijk maakt.
Beperkingen:
- Meerdere receivers worden ondersteund.
- Slechts één enkele worker wordt ondersteund (de session-status leeft in de lokale BoltDB van de worker). Horizontaal schalen van workers is niet mogelijk, dus je bent aangewezen op verticaal schalen, maar dat zou geen groot probleem moeten zijn—een machine met 16 cores en 30 GB RAM zou verkeer van rond de 7K reqps aankunnen, wat neerkomt op ongeveer 7B events/maand. Voor ~100M verkeer zou je met 2 CPU's en 4 GB RAM goed moeten zitten.
Modi
d8a server: receiver + worker in één proces (standaard).d8a receiver: alleen receiver (HTTP-server; publiceert naar de queue).d8a worker: alleen worker (consumeert uit de queue; geen HTTP-server).
Queue-backends
Er bestaan twee queue-backends voor de grens tussen receiver/worker:
filesystem(standaard): een lokale directory-queue.objectstorage: een gedeelde, object-storage-backed queue (Go CDKblob.Bucket).
Gebruik objectstorage wanneer je meerdere receivers op verschillende nodes draait.
Voorbeeld: MinIO (S3-compatibel)
YAML (config.yaml):
queue:
backend: object_storage
object_storage:
prefix: d8a/dev/queue
type: s3
s3:
host: 127.0.0.1
port: 9000
protocol: http
bucket: d8a-queue
access_key: minioadmin
secret_key: minioadmin
region: us-east-1
create_bucket: true
Draai de receiver(s):
go run . receiver --config config.yaml --server-port 8080
Draai de worker (één instantie):
go run . worker --config config.yaml --storage-bolt-directory ./state
Opmerkingen:
- Gebruik
queue.object_storage.prefixom omgevingen te namespacen (voorkomt overspraak binnen een gedeelde bucket). - Het systeem werkt at-least-once: taken kunnen opnieuw worden afgespeeld als de worker crasht na verwerking maar vóór verwijdering.