The KubeOps Team

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:

 

Kubernetes Besonderheiten

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!​​


 


 


KubeOps GmbH
Hinter Stöck 17
72406 Bisingen
Germany 

Telefon:
Mail:
Internet:

+49 7433 2781296
This email address is being protected from spambots. You need JavaScript enabled to view it.
www.kubeops.net

KubeOps is certified as

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.