Zum Inhalt springen
Deutsch

Operations — Überblick

Das Framework führt in Dev und Prod denselben Code aus, aber Produktions-Deployment bringt seine eigenen Themen mit, die auf dem Laptop keine Rolle spielen:

ThemaWorum es geht
DeploymentWie startet ein Node, registriert sich am Cluster, nimmt Traffic an und fährt sauber herunter?
TuningGossip-Kadenz, Mailbox-Größen, Failure-Detector-Schwellen — Defaults sind vernünftig, aber Workloads unterscheiden sich.
SicherheitTLS auf dem Cluster-Transport, Secret-Management, Schlüsselrotation.
UpgradesSchema-Migrationen, rolling Deployments ohne Downtime.
TroubleshootingWas Logs, Metriken und Traces über ein sich falsch verhaltendes System verraten.

Dieser Abschnitt verlinkt jedes Thema auf eine vertiefende Seite.

Für ein nicht-triviales Actor-System, das in Produktion geht:

□ Persistence-Backend gewählt + produktionstauglich
(z. B. SQLite für Single-Node, Cassandra für Multi-Node)
□ Cluster verdrahtet (falls Multi-Node) mit konkreter Seed-Strategie
□ Downing-Strategie konfiguriert (Split-Brain-Schutz)
□ Coordinated Shutdown mit SIGTERM-Hooks konfiguriert
□ Health-Checks via HttpManagement exponiert
□ Metriken via Prometheus oder OTel exponiert
□ Log-Aggregation angeschlossen (strukturiertes Logging via withFields/MDC)
□ TLS auf dem Cluster-Transport aktiviert
□ Secrets via Env-Vars, NICHT in application.conf
□ Kubernetes-Manifeste mit PreStop-Hook + Grace Period
□ Tracing optional, aber konfiguriert, falls Multi-Actor-Flows existieren
□ Runbook für "Actor X crasht ständig" / "Cluster bildet sich nicht"

Nichts davon sind framework-spezifische Tricks — es ist allgemeine Produktions-Hygiene, angewendet auf ein Actor-System. Jeder Punkt hat seine eigene Seite.

WieWann
KubernetesCloud + Container-Orchestrierung. StatefulSets, Headless Services, RBAC für den K8s-API-Seed-Provider.
Docker ComposeLokale Multi-Node-Cluster zum Testen und für kleine Deployments.
Process Managersystemd / PM2 — für Bare-Metal- oder VM-Deployments.

K8s ist der häufigste Produktionsweg; die Seite behandelt Deployment vs StatefulSet, PreStop-Hooks und die Seed-Provider-Konfiguration.

Defaults funktionieren für die meisten Workloads — greif zu diesen Seiten, wenn du spezifische Symptome siehst:

KnopfWann tunen
Gossip-KadenzGroße Cluster (>20 Nodes), wo der Default von 1 Sekunde Gossip verschwenderisch ist, oder kleine Cluster, in denen du schnellere Konvergenz willst.
Failure DetectorEnge Netzwerke (LAN), in denen 2-Sekunden-Unreachable-Detection zu langsam ist, oder verrauschte Netzwerke, in denen sie False Alarms auslöst.
Mailbox-SizingWenn du Speicherwachstum durch unbounded Mailboxes siehst oder wenn bounded Mailboxes mehr droppen als erwartet.
Dispatcher-TuningWenn du HTTP-Latenz-Degradation unter Actor-Last beobachtest oder niedrige CPU-Auslastung bei hohem Actor-Durchsatz.

Wenn du das Symptom nicht benennen kannst, tune nicht. Defaults sind nicht optimal, aber selten schlecht.

Drei Ebenen:

AnliegenSeite
Cluster-Transport TLS + AuthCluster-Sicherheit
Verschlüsselung at-rest für persistierte DatenMaster-Key-Rotation
TLS everywhere (HTTP, Broker, Journals)TLS everywhere

Der Cluster-Transport ist standardmäßig unauthentifiziertes TCP — ok in einem privaten Netzwerk, gefährlich im öffentlichen Internet. Aktiviere immer TLS + Shared-Secret-Auth für jeden Cluster, der unsichere Grenzen überschreitet.

Das Framework unterstützt rolling Deployments ohne Downtime, wenn entsprechend konfiguriert. Zwei getrennte Anliegen:

  • Code-Rollouts — Ersetzen der Node-Binaries, während der Cluster läuft. Übernimmt K8s Rolling Update + Coordinated Shutdown. Siehe Rolling Migration.
  • Schema-Migrationen — Event/State-Shapes über die Zeit weiterentwickeln. Erledigen Event-Adapter + Envelope-Versionierung. Siehe Upgrade-Strategien und Persistence-Migration-Überblick.

Die Rolling-Migration-Seite ist die praktischste — ein Schritt-für-Schritt-Rezept für “ich muss ein Feld zu meinem Event hinzufügen, ohne den Cluster runterzunehmen.”

SymptomWahrscheinliche Ursache
Actor empfängt keine NachrichtenGestoppte Ref, Dead-Letter, Mailbox voll
Cluster bildet sich nichtSeed-Nodes unerreichbar, Port-Konflikt
Sharded Entities spawnen nichtCoordinator nicht auf einem Leader, Role-Mismatch
PersistentActor braucht 30 s zum StartenKein Snapshot, tiefes Journal — setze snapshotPolicy
Tests hängen am Endeawait system.terminate() vergessen
Speicher wächst unbegrenztUnbounded Mailboxes; setze ein Mailbox-Cap

Siehe Troubleshooting für den Diagnose-nach-Symptom-Katalog.