Best Practices für die Entwicklung von Microservices

Aus der Erfahrung aus vielen Projekten haben wir einen Leitfaden für die Entwicklung von Microservices erstellt:

 

Besonderheiten Kubernetes

Schreiben auf die Festplatte

Schreiben auf Root immer auf Layered Filesystem

In Kubernetes gibt es einen speziellen Storage für flüchtiges Schreiben.

Root Filesystem sollte immer Read Only gemountet werden.


Loadbalancing

Skalierung in Kubernetes nur Horizontal

Services werden immer hinter Loadbalancern betrieben.

Standardantwort für HA und Selfhealing


Liveliness probes/Watchdog

Grundsätzlich sollten Fehlerzustände möglichst im Service identifiziert werden.

Healthchecks sollten aber nicht funktionieren eindeutig identifizieren

Aus Kubernetes Sicht Standardantwort für Selbstheilung


 

Scale Out Anforderungen

Zustandslos

Dienst sollte möglichst zustandslos sein.

Ist ein Zustand nicht zu vermeiden, muss dieser allen Instanzen bekannt gemacht werden.

Kubernetes Service LBs unterstützen keine Sticky Sessions. Nur durch Tricks möglich!


Fehlertolerant

Fehler sind normal und passieren (Liveliness Probes!)

Beispiel: At least once vs. at most once messaging (Acknowledged messaging vs Fire and forget).


Autonomie

In sich geschlossenes System, Verantwortungsübergänge

Dienste entscheiden über alle Zustände vollständig und selbstständig.

Beispiel: Löschen, Config, Transaktionen


Konsistenz

Jeder Dienst ist für seine eigene Konsistenz selbst verantwortlich

ACHTUNG! Abhängigkeiten zu anderen Diensten beachten.


Queueing

Queueing hilft Lastspitzen zu glätten, da die Verarbeitung zeitlich verzögert stattfinden kann.

Sehr gut geeignet für zeit- oder rechenintensive Aufgaben

ACHTUNG! Asynchronität wird hier sehr verstärkt. (Mehrere Requests gegen gleiche Information können sich überholen. Race Conditions!)


  

Sonstige Planungsunterstützungen

Shared Resourcen vermeiden

Microservices basieren auf maximaler Parallelisierung

Sie wirken immer serialisieren


Konfiguration

Statische Konfiguration durch Umgebungsvariable

Bei großen Konfigurationsmengen auch über Config-Dateien

Dynamische Konfiguration in Applikationsdatenbank​


Caching

Starkes Mittel für Performance und zur Reduzierung von Rechenleistung

Möglichst nur für lesende Zugriffe verwenden

Cache unvalidieren nach Schreibvorgängen

Bei großen Mengen und seltenen Writes sollte Cache im Hintergrund erstellt werden


 

Herausforderungen bei Microservices

Microservices sind verteilte Systeme

Verteilte Systeme unterliegen immer Kompromissen

CAP Theorem

Eventual Consistency​

WICHTIG! Ist diese Entscheidung bewusst zu treffen


Problemstellungen

Besondere Beachtung bei Löschen, Backup, usw.

Transaktionen nur durch übergreifende ID Möglich

Worst Case Freeze => Widerspricht Autonomie und skaliert somit nicht!​​


 


 


Kubernative GmbH
Ziegelei 9
72336 Balingen

Telefon:
Mail:
Internet:

+49 7433 2781296
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
www.kubernative.net

Ein Tochterunternehmen der
ARWINET GmbH besuchen

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.