Was sind Microservices?

Was sind Vorteile von Microservice Architekturen?

Microservices helfen eine strukturierte Software zu erstellen. Microservices erledigen jeweils eng definierte Aufgaben und bieten die Abarbeitung als “Service” über eine Schnittstelle an. Größere Prozeduren können so in Teilaufgaben zerlegt und auf die jeweiligen Microservices zurückgreifen. Weiterer Vorteil: Weniger redundanter Code!

Was sind Microservices?

Microservices sind Dienste, die nur einen kleinen Teil einer Gesamtaufgabe erfüllen. Über eine Benutzerschnittstelle können ihre jeweiligen Funktionen in Anspruch genommen werden. Unter anderem wird eine solche Microservice-Architektur von einigen der weltweit größten IT-Unternehmen zur Realisierung von verschiedenen Funktionen auf ihren Webseiten genutzt.

Vorteile von Microservice-Architekturen

Ein großer Vorteil der Microservice-Architektur ist die Robustheit: Der Ausfall einzelner Microservices kann vergleichsweise schnell ausgeglichen werden. Durch den im Vergleich zu einer einheitlichen Gesamtlösung geringeren Komplexität und die strenge Kapselung der einzelnen Services kann der Code von Microservices außerdem in der Regel leichter gewartet werden. Insbesondere kann das System unabhängig etwa von einer bestimmten Programmiersprache oder Prozessorarchitektur aufgebaut werden, solange die Kommunikation zwischen den einzelnen Microservices (etwa durch ein Netzwerk) gewährleistet ist. Hingegen wird der Kommunikationsaufwand zwischen den verschiedenen Entwicklern oder Entwicklerteams durch die Implementierung eines Projekts als Geflecht von Microservices in der Regel reduziert, da jedes Team sich auf seine individuelle Teilaufgabe konzentrieren kann.

Bessere Wartbarkeit und Fehlerlokalisierung

Tritt nun in einem Microservice ein Fehler auf, so kann sich dieser nicht auf die grundsätzliche Funktionsfähigkeit der anderen Komponenten des Systems auswirken. Dies macht es leichter, Fehler in der Programmierung dort aufzuspüren, wo sie verursacht werden. Je nach umgesetztem Projekt kann bzw. sollte man sich auch Gedanken um die Kopplung zwischen den einzelnen Services machen. In der Regel wird eine eher lose Kopplung bevorzugt, wenn sie denn mit der jeweilig zu lösenden Gesamtaufgabe kompatibel ist. Ist es z.B. notwendig, dass der einzelne Dienst auf eine Anfrage antwortet, oder führt dies eher zu unerwünschten Komplikationen?

Microservices an einem Beispiel

Ein Beispiel für die Anwendung von Microservices ist etwa eine Website, auf der der Besucher u.a. Videos schauen, Videos suchen und Videos bewerten kann. Diese einzelnen Funktionen lassen sich durch je einen zugehörigen Typ von Microservice realisieren. Die Hauptwebseite greift dann dynamisch je nach Bedarf auf diese einzelnen Funktionen zu. Je nach Anzahl von Besuchern auf der Seite können mehr oder weniger Instanzen der einzelnen Services bereitgestellt werden, die die Anfragen der verschiedenen Nutzer im Idealfall parallel abarbeiten. Theoretisch können die einzelnen Services sogar melden, wenn sie überlastet sind und mehr Ressourcen z.B. für die Suche zur Verfügung gestellt werden sollen – also z.B. einfach weitere Instanzen der überlasteten Microservices gestartet werden. Auf diese Weise passen sich die zur Verfügung stehenden Ressourcen der Last bis zum Hardwarelimit dynamisch an. Weiter muss die Aufgabenverteilung in der einen oder anderen Weise organisiert werden.

Loadbalancing für und mit Microservices

Deshalb geht es beim Load Balancing um die Frage, wie die Anfragen der Nutzer auf die bereits laufenden Instanzen jedes Microservice verteilt werden. Denn schließlich soll natürlich nicht eine Microservice-Instanz alle Requests abbekommen, während die anderen vor sich hin “idlen”.
Dies ist ein recht umfangreiches Thema, das den Rahmen dieses Artikels sprengen würde. Eine einfache Möglichkeit des Loadbalancing könnte z.B. sein, dass unausgelastete Instanzen der Videosuche selbstständig bei einem anderen Microservice anfragen, ob es Arbeit gibt.

Fazit

Fazit: Die Realisierung eines größeren Projekts durch Microservices bietet Softwareentwicklern interessante Möglichkeiten bezüglich der Wartbarkeit und Skalierung. Nicht umsonst setzen einige der größten IT-Unternehmen u.a. auf dieses Konzept. Andererseits bringt eine solche Umsetzung jedoch auch weitere architektureigene Komplikationen mit sich, die bei der Projektplanung berücksichtigt werden sollten.

Rückmeldungen