Was ist ein Microservice?

Softwareentwicklung im Mini-Format

Microservices kurz und knapp

Microservices sind kleine voneinander unabhängige Dienste, die in einem verteilten System miteinander mit Hilfe einer API interagieren. In der Softwareentwicklung spricht man dann auch von einer Microservice-Architektur. In diesem Zusammenhang fällt häufig auch der Begriff Domain Driven Design, wenn jeder Dienst Funktionen eines separaten Fachbereichs abbildet. Das klären wir aber ein anderes Mal genauer. 

Microservices zeichnen sich also durch zwei Eigenschaften aus: 

  • Kleine Größe und reduzierte Komplexität 
  • Autonomie 

Ist ja nicht gerade präzise. Deshalb sollten wir uns das genauer anschauen.

Eigenschaften von Microservices

Klein, Kleiner, Microservices

Um die richtige Größe von Microservices ranken sich viele Mythen. Um eine halbwegs brauchbare Definition zu erhalten, mit der man nicht nur in einem Software-Philosophie-Kurs punkten, sondern auch Entscheidungen treffen kann, schauen wir uns mal ein paar Aussagen an: 

  • Der Softwareentwickler und Lead Architect Jon Eaves von Realestate.com.au (Australien nicht Österreich) sagt sinngemäß:  Ein Microservice ist klein genug, wenn dieser in zwei Wochen neu geschrieben werden kann. Das ist doch mal eine Aussage. 
  • Bei Amazon hingegen gibt’s die Two-Pizza-Regel: Zwecks Effektivitätssteigerung sollte ein Team nur so groß werden, dass man es noch mit zwei Pizzen füttern kann. Im Kontext der Softwareentwicklung steht jedes Team im weitesten Sinne für einen Microservice. Na, dann guten Appetit. 
  • Der Berater für Softwareentwicklung und -architektur Sam Newman sagt: Ein Microservice hat die ideale Größe, wenn er klein genug, aber nicht zu klein ist. 

Haha. Was soll das denn bedeuten? Mit der dritten Aussage wird sinngemäß verlangt, ein System zu zerschlagen, wenn ein Softwareentwicklungs-Team das Gefühl hat, etwas ist zu groß. Anders ausgedrückt: Je kleiner ein Microservice ist, desto größer sind die Vor- aber auch die Nachteile. Wenn Sie aus einer eierlegenden Wollmilchsau eine Kuh, ein Schaf und ein Huhn machen, ist das definitiv sinnvoll – So eine Wollmilchsau ist nämlich nur schwer zu ersetzen und braucht sehr spezielle Pflege. 

Lassen Sie aber für jede Addition einen Web-Dienst mit eigner API entwickeln, der zu allem Überfluss noch auf einer dedizierten Maschine läuft, wird’s insgesamt einfach zu komplex. 

Autonomie – Das ist mein Bier 

Während die richtige Größe eher als Geschmacksfrage daherkommt, scheint es mit der Autonomie schon griffiger zu sein. Ein Microservice ist weitestgehend autonom, wenn folgende Bedingungen erfüllt sind: 

  • Der Dienst wird als eigenständiges Projekt entwickelt – z.B. in einem isolierten Git-Repository. 
  • Ein Dienst kommuniziert nur über eine API, also einer wohldefinierten Schnittstelle mit anderen Diensten. Was diese innerhalb ihrer Implementierung ausbrüten, ist dem Microservice schnuppe. 

Ein Dienst läuft in einem separaten Prozess bzw. in einer eigenständigen Maschine. Damit ist gemeint, dass das Restsystem nicht runtergefahren werden muss und weiterläuft, während der neue Dienst ins Rennen geht.

Microservices – Top oder Flop?

Microservices und ihre Vorteile für die Softwareentwicklung

Microservices sagen den behäbigen Monolithen in Form gigantischer Programm-Klumpen den Kampf an und haben eine Reihe von Vorteilen zu bieten: 

  • Technologieunabhängigkeit: Wenn alle Dienste über APIs kommunizieren und nicht in einer gigantischen Code-Masse zusammenhängen, kann jeder Dienst mit der Programmiersprache umgesetzt werden, die am besten zum jeweiligen Problem passt. 
  • Resilienz: Fällt ein Dienst aus, wird nur eine Teilfunktion des Systems lahmgelegt, das restliche System kann weiterarbeiten. Die Bereitstellung mehrerer redundanter Instanzen ist aufgrund der reduzierten Dienst-Größe und damit des geringeren Ressourcenverbrauchs zudem wesentlich leichter. 
  • Skalierung: Je nach Nutzungsintensität eines Dienstes, können Sie diesem auch entsprechende Ressourcen, z.B. Rechenleistung und Arbeitsspeicher zuweisen. 

Vereinfachte Bereitstellung: Anstatt eine gigantische Software-Lösung unter Akzeptanz entsprechender Stillstandzeiten in einem Rutsch bereitzustellen (deployen), kann jeder Dienst und jedes Feature unabhängig in die Produktion entlassen werden. 

Sie haben Fragen oder Anregungen?

Kontaktieren Sie uns noch heute: