Knowledge-Hub

Ein wesentlicher Bestandteil unserer Initiative ist es, Wissen zu teilen.

Mit vereinten Kräften schaffen wir es ein Nachschlagewerk zu erstellen von dem die Gemeinschaft profitieren wird.
Schickt uns doch gerne auch eure Erfahrungswerte zu, dann lernen wir gemeinsam von einander.

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!
  • Fehler tolerant:
    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

Social Media

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.