Microservices

Microservices

Was sind Microservices?

Hat der Programmierer ein Problem, löst er er normalerweise mit einem Programm. Dieses Programm läuft normalerweise auf einem PC.

Was passiert aber, wenn die kraft eines PC's nicht mehr ausreicht? Ein stärkerer PC ist irgendwann aus.

Man muss das Programm auf mehrere PC's verteilen. Aber so einfach ist da nicht.

Zuerst teilt man (wie man das als Programmierer so macht) das Problem in kleinere Teile. Mann versucht nun einzelne gekapselte Arbeitsprozesse zu finden. Jeder Arbeitsprozess für sich arbeitet ganz Eigenständig. Nun definiert man zu diesem Arbeitsprozess noch die Schnittstellen. - Fast fertig - ein Microservice.

Microservice

Ein teil eines großen ganzen arbeitet es für sich eigenständig. Es hat nur eine Aufgabe, die es schnell und gut erledigt (single responsibility).

Es müssen Aufgaben sein, die sich auch leicht parallelisieren lassen und der Overhead nicht größer als die eigentliche Aufgabe wird. Ein Microservice, dass einfach nur zwei Zahlen addiert wird nicht sehr schnell Sinn machen.

Das gleiche Service auf mehreren Rechnern?

Ja das macht Sinn und ist auch das Ziel der Reise. Jetzt fehlt nur noch eine Instanz die die Verteilung der Aufgaben übernimmt. Eine Queue (RabbitMQ) oder sie machen es sich untereinander aus. Je nach Anforderung gibt es hier unterschiedliche Konzepte.

So kann die Rechenleistung leicht erhöht werden und das System wächst mit. Auch das Konzept der Ausfallsicherheit sollte hier bedacht werden. Es muss auch möglich sein einzelne Rechner (wegen updates oder Ausfall) aus dem Verbund zu nehmen. Dann haben halt die anderen mehr zu tun.

Mehrere Microservices

Will man nun ein ganzes Programm haben müssen nun die Microservices zusammenspielen. Die Last wird schnell auf mehrere Rechner verteilt und die Aufgabe insgesamt schneller gelöst. Auch wenn mehrere Aufgaben zur gleichen Zeit kommen ist es je nach zur Verfügung stehender Kapazität kein Problem.

Wichtig bei dem Design von Microservices

  • Single Responsibility (einfacher zu warten oder für Teams)
  • Eindeutige Schnittstellen (gaaaaaaaanz wichtig)
  • Lastverteilung (Queue oder andere Mechanismen)
  • Tolerant gegen Ausfälle oder geplante Ausfälle (auch wenn ein Rechner stirbt, soll immer noch alles erledigt werden)
  • Parallelisierung
  • Überwachung (man muss auch wissen, wann ein neuer Server dazu muss, oder ob nicht schon zu viele drin sind)
  • Sicherheit (Der Zugriff muss genau geregelt werden. Wer darf was wo ausführen?)

Wie ich es mache

Ich bevorzuge Java Anwendungen mit REST API. Die Services sind normalerweise nicht von außen erreichbar. Je nach System per Firewall oder anderen Regeln. Die Lastverteilung muss für jedes Problem separat gelöst werden. Ein alles Super System gibt es hier nicht. Für die Kommunikation nach Außen sind sogenannte Proxies im einsatz. Sie kontrollieren die Zugriffe und managen die Services im Hintergrund. Sie erledigen die Lastverteilung und sorgen für ausfallsicheren Einsatz.

Posted on

Ing. Roland Schuller

Harland 44, 3372 Blindenmarkt
@: roland@it-open.at
T: +43 676 63 54 793
W: it-open.at
RSS: RSS Feed
Blogheim.at Logo