Microservices

Hier einige Zeilen zum Thema Microservices.

Vorteile

Independent-Systems-Architecture (ISA) als Grundlage der Betrachtung [3].

  • Generell können Entscheidungen einzeln pro Service getroffen werden. Zum Beispiel über die passende Programmiersprache [1].
  • Unabhängige CI und CD Pipelines, sorgen für schnellere Releases [1].

Merkmale

  • Gesamtkomplexität
  • Anzahl Stakeholder
  • Änderungsursachen und -häufigkeit
  • Skalierbarkeit
  • technische Gemeinsamkeiten

Ausprägungen

Es gibt unterschiedliche Ausprägungen von Microservices. Die Ursache dafür ist der Spagat zwischen Vor- und Nachteilen. Dabei ist meistens die Größe des Microservices das Hauptunterscheidungsmerkmal. Zum Beispiel ist bei zu kleinen Services ist der Verwaltungsaufwand höher als der Nutzen. Ist der Services zu groß, ist man nicht mehr unabhängig genug. Hier nun einige Ausprägungen [1].

Function as a Service (FaaS)

Ob AWS Lambda, Google Cloud Function oder Azure Functions, meistens sind es weniger Zeilen Code die einen Services bilden. Dabei sind die Aufrufe meistens asynchron. Wenn REST-Services möglich sind, dann synchron [1].

Micro-SOA

Dieser Ansatz ist wohl am häufigsten anzutreffen. Er wird auch in den meisten Fällen mit Microservices assoziiert. Die Services arbeiten häufig synchron, kommunizieren über HTTP-Anfragen, verwenden JSON und rufen weitere Services auf, um ihre Aufgabe zu erledigen. Zu einem Performance Problem bei den Aufrufkaskaden kann das Netzwerk werden [1].

Distributed Domain-Driven Design (DDD)

Der distributed-DDD Ansatz versucht die Aufrufkaskaden von Micro-SOA zu vermeiden. Die einzelnen Services sind in der Regel größer, im Sinne der Funktionalität. Dadurch können sie meistens eine Anfrage selbständig verarbeiten ohne einen weiteren Service aufzurufen. Das gelingt durch redundante Datenhaltung. Einfache Key-Value-Lookups müssen nicht per Serviceaufruf laufen. Ein Ansatz, um eine Entscheidung zu einer redundanten Datenhaltung ist zutreffen, ist das Pattern des Bounded Contexts. Dabei werden die Daten nicht nach Domänen (Kunde, Auftrag) aufgeteilt, sondern nach Funktionen (Verkauf, Vertrieb). Der Vertrieb und der Verkauf benötigen beide Kundendaten; jedoch unterschiedliche Teile davon und also nicht alles [2]. Häufig wird ein zusätzlicher Services benötigt, um die redundanten Daten zu synchronisieren [1].

Self-contained Systems (SCS)

Bei SCS wird das Gesamtsystem fachlich in Teilsysteme zerlegt [1].

Anforderungen

  • Kommunikation
    • Service Discovery
    • Load Balancing
    • Routing
    • Resilience
  • Betrieb
    • Tracing
    • Monitoring
    • Logging

Tools

Spring Boot, Go kit, Netflix Stack, Apache Kafka, Elastic Stack, Jaeger, Prometheus, Grafana, Istio, Linkerd, Kubernetes [1]

[1] https://www.heise.de/select/ix/2019/04
[2] https://martinfowler.com/bliki/BoundedContext.html
[3] https://isa-principles.org/


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.