Cloud-native ohne Cloud: Architektur-Patterns für regulierte Branchen (On-Premise-first, ohne Illusionen)

Das eigentliche Problem ist nicht „Wie bekommen wir Kubernetes in die Fabrikhalle?“. Das Problem ist meist nüchterner: Sie müssen ein verteiltes, langlebiges System bauen, das unter lückenhafter Konnektivität, strengen Datenschutzauflagen und Auditpflichten funktioniert – und das über 10+ Jahre erweiterbar bleibt. Gleichzeitig erwarten Fachbereiche moderne Produktqualitäten: Near-Real-Time-Daten, ML-gestützte Assistenz, sichere Remote-Updates, reproduzierbare Deployments, Observability. Cloud-native verspricht diese Qualitäten – aber viele Branchen (Bahn, Defense, Fertigung, Energie) dürfen oder wollen die US-Public-Cloud nicht nutzen.

In diesem Artikel geht es nicht um Glaubensfragen, sondern um praxistaugliche Architektur-Entscheidungen. Cloud-native ist ein Satz von Prinzipien (Automatisierung, deklarative Zustände, lose Kopplung, resiliente Datenpfade) – kein Ort. Wir übertragen diese Prinzipien auf On-Premise- und Edge-Setups mit folgenden Leitplanken:

  • Datenhoheit und DSGVO sind nicht verhandelbar.
  • Netzwerke sind unzuverlässig, Latenzen schwanken, Air-Gaps existieren.
  • Betriebsteams sind klein; Komplexität muss sich rechnen.
  • Lebensdauer der Lösung überdauert Technologiemoden.

Im Folgenden zeige ich erprobte Patterns, Anti-Patterns und konkrete Technologiebausteine, inklusive Trade-offs. Beispiele stammen aus realen Projekten in Bahn, Defense, Fertigung und Vermessung.

1) Control-Plane vs. Data-Plane konsequent trennen

Ziel: Updates und Governance zentral steuern, aber Daten- und Rechenpfade lokal halten.

  • Control-Plane (zentral, selbstgehostet):
  • GitOps-Operator (z. B. Argo CD oder Flux) als Quell-der-Wahrheit für Deployments quer über Standorte.
  • Eigene Container- und Artefakt-Registry mit Signierung (Cosign, Notation) und Policy-Checks vor Freigabe.
  • Identitätsprovider (z. B. Keycloak) und Policy-Engine (z. B. OPA/Rego) für Rollen, Tenants, Compliance.
  • Observability-Metadaten-Zentrale (Federation statt zentraler Metrik-Sammlung) und Audit-Trail.
  • Data-Plane (Edge/Standorte):
  • Verarbeitung von Telemetrie, ML-Inferenz, Benutzerinteraktion lokal – ohne Cloud-Abhängigkeit.
  • Store-and-Forward für Ereignisse und Logs bei Netzwerkunterbrechungen.
  • Lokal betriebene Storage-Systeme (z. B. S3-kompatibles Object Storage, Timeseries-DB).
  • Feingranulare Policies: Welche Daten dürfen wohin repliziert werden, wann und in welcher Form.

Trade-offs:

  • Vorteil: Minimierter Datenabfluss, planbarer Rollout, robust gegen WAN-Probleme.
  • Nachteil: Mehr Inhouse-Responsibility für CI/CD, PKI und Artefakte. Ohne Disziplin degeneriert GitOps zum „ManuOps“.

2) Event-getriebene Backbones, die Partitionen aushalten

Nahezu jedes Industrie-Setup profitiert von Event-Driven Architecture. Der Knackpunkt in regulierten, verteilten Umgebungen ist nicht „welcher Bus ist schneller“, sondern „wie gut funktioniert das unter Partition und Backpressure“.

  • Typische Optionen:
  • NATS (JetStream) für leichtgewichtige, standortnahe Kommunikation, flexible Subjekträume, gutes Handling von temporären Ausfällen.
  • MQTT 5 für Geräteschichten und stark beschränkte Endpunkte.
  • Kafka für hohe Durchsätze, geordnete Streams, Replays und robuste Pipeline-Entkopplung; bei Bedarf mit externem Object Storage für längere Aufbewahrung.
  • Muster:
  • Store-and-Forward Gateways als Puffer zwischen Edge und Zentrale.
  • Quoten und Backpressure-Signale, damit Sensorik/ML nicht das Netzwerk füllt, wenn WAN weg ist.
  • Ereignisse sind kanonisch versioniert; Schema-Evolution via Schema-Registry (z. B. Avro/Protobuf).

Trade-offs:

  • NATS/MQTT: Einfacher zu betreiben, sehr gut für Edge, aber weniger stark in „dicken“ Analytik-Pipelines.
  • Kafka: Mächtige Semantik und Replays, aber höherer Betriebs- und Persistenzaufwand.

Praxis-Tipp:

  • Für Flotten-Telemetrie (Bahn, Fahrzeuge) mit Bursty-Lasten und vielen Partitionen: NATS/JetStream + Timeseries nahe am Edge, periodische Batches in die Zentrale.
  • Für Video/Inspection-Streams und Feature-Pipelines: Kafka + Object Storage für Warm/Cold-Data.

3) State-Management am Edge: Lokal-first, deterministische Synchronisation

Wer echte Offline-Fähigkeit will, muss State lokal ernst nehmen.

  • Timeseries-Layer (z. B. Timescale/Influx) pro Standort; Replikation als geplante Aufgabe, nicht „permanent live“.
  • Logische Replikation oder exportierbare Change-Feeds; Konfliktregeln deterministisch definieren (Zentrale gewinnt, oder edge-präferiert je Domäne).
  • Für Konfiguration: deklarativ (CRDs, JSON-Schemas), Versionierung im Git, Rollbacks jederzeit.

Trade-offs:

  • Vollständige Multi-Master-Synchronisation ist oft Overkill. Besser: klare Ownership je Datenkategorie (z. B. „Messdaten sind edge-owned bis Export-Task erfolgreich; Stammdaten sind central-owned mit Caches“).

4) Monolith vs. Microservices: Der Monolith gewinnt öfter am Edge

Microservices sind kein Selbstzweck. Gerade On-Prem- und Edge-Deployments mit kleinen Teams profitieren häufig von einem modularem Monolithen:

  • Wann der Monolith gewinnt:
  • Harte Latenzanforderungen zwischen UI, Echtzeitsensorik und Inferenz.
  • Team < 10 Entwickler, ein gemeinsamer Release-Takt, hohe Notwendigkeit deterministischer End-to-End-Tests.
  • Offline-Installationen mit knappen Ressourcen; Prozess-Orchestrierung soll minimal bleiben.

  • Wie man den Monolithen skaliert:
  • Klare Modulgrenzen, interne Contracts, saubere ABI/API-Stabilität; Plugin-Architektur (z. B. C++/Qt-Plugins, Python-Plugins mit strikter Schnittstelle).
  • Nebenläufigkeit über Worker-Pools und Message-Queues im Prozess; Shared-Nothing-Module, die per Ereignis kommunizieren.
  • Prozess-Supervision (systemd) und Watchdogs, Crash-only-Design, Recoverability.
  • Wann Microservices sinnvoll sind:
  • Heterogene Workloads, die unterschiedlich skalieren (z. B. ML-Inferenz getrennt vom Backend und UI).
  • Unterschiedliche Technologiestacks berechtigt (z. B. C++ für Vision, Python für Training, Go für Datenverteilung).
  • Zentrale Analytik, die von Replays und Stateful-Streams profitiert.

Betriebsaspekt:

  • Wenn Microservices on-prem, dann klein anfangen: K3s/MicroK8s oder Nomad, kein Service Mesh, solange nicht zwingend (jedes Mesh bringt Debug- und Zertifikatskomplexität). Erst wenn Traffic-Management, mTLS‑Rotation und Telemetrie skalieren müssen, lohnt ein Mesh.

5) Identität und Zugriff ohne Cloud-IdP

Ohne externen Identity-Provider braucht es eine robuste, selbstgehostete I&A-Story:

  • IdP selbst hosten (z. B. Keycloak) mit:
  • Kurzen Token-Laufzeiten, Refresh nur lokal.
  • Mandantenfähige Realms und Rollen für Standorte/Kunden.
  • Geräte- und Dienstidentitäten via mTLS; für saubere Automatisierung: SPIFFE/SPIRE oder alternativ statische mTLS mit Kurzlebigkeit.
  • PKI-On-Prem: Root in HSM offline; Zwischenzertifikate mit definierten Roll-over-Fenstern; CRLs/OCSP stapelbar für Air-Gaps.