Transcript: Microservices
Full episode transcript. Timestamps refer to the audio playback.
Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python Podcast, Episode Nummer 41.
Heute unterhalten wir uns über Microservices. Schön, dass ihr wieder eingeschaltet habt.
Hi Jochen.
Hallo Dominik.
Und wir haben einen Gäst dabei.
Guten Abend.
Hi Janis.
Ja, das bin ich.
Hallo Janis.
Ich bin der Dominik.
Ich bin der Janis.
Ja, dann Janis, willst du dich mal kurz vorstellen vielleicht direkt?
Ja, das geht schnell. Ich bin der Janis, noch 29 Jahre alt, jung, aus Wuppertal.
Ich entwickle mit Python viel und oft und gerne.
Bereich Data Engineering, Data Science, irgendwo da bewege ich mich rum.
Und du hast gesagt, du hast jetzt was zu Microsoft zu sagen und deswegen unterhalten wir uns heute darüber.
Ich würde sagen, wir fangen mit News aus der Szene an.
Ja, genau, machen wir das wie immer.
Was hast du denn?
Ja, ich weiß nicht, so ein bisschen wild gemischt ist auch nicht nur Python,
aber ich dachte irgendwie, gut, das hat schon eine gewisse Relevanz,
weil, ich weiß ja nicht, aber vielleicht gibt es ja auch sogar Leute hier in der Zuhörer oder dabei sind gerade, die irgendwie davon betroffen sind.
Es gab da so eine Sicherheitsschwankung bei Okta.
Ja, ich weiß nicht, wen du meinst, der betroffen ist.
Keine Ahnung.
Ja.
Ja, also das, ja, fand ich war mal wieder so.
Also Okta ist so ein Multi-Login-Service, Single Sign-On.
Ja, genau.
und viele Kunden,
viele Konzerne sind da Kunden und so
und eigentlich war
sozusagen die Marketing
Story dabei halt irgendwie,
ja, du musst irgendwie keinem
vertrauen und das funktioniert einfach so und das
löst das Problem für dich und jetzt mussten die Leute, die das
irgendwie, die diese
Dienstleistung in Anspruch genommen haben, feststellen, dass sie doch jemandem
vertrauen mussten
und dass sie dem eigentlich nicht wirklich vertrauen können,
weil die Kommunikation war halt so, dass sie irgendwie nur
so scheibchenweise zugegeben haben, was da eigentlich passiert ist.
Tja. Und das ist natürlich
schlecht.
Ja, das ist also, ich würde auch sagen,
ziemlich beschädigt jetzt.
Ja, aber ich habe mich da
immer, ich frage mich, warum das
gerade große Unternehmen so leichtfertig machen, weil das ist
ehrlich gesagt irgendwie, sieht irgendwie
schon von Weitem wie eine nicht so richtig gute Idee aus,
sowas zu machen, so gerade Authentifizierung irgendwie
auszuschanzen.
Ja, weil die alle nicht wissen, wie das geht und weil die das Problem haben,
dass die ganz viele kleine Anwendungen
haben, die Leute benutzen und die alle
irgendwo ihre Passwörter verwalten sollen
und die dann immer unsicherere Passwörter
nehmen, wenn die ganz viele verschiedene Services
auf ihrem Rechner benutzen sollen oder so.
Und dieses Single-Sign-On, da kann man dann glaube ich
die Policies vielleicht ein bisschen besser einhalten und die Leute
dazu zwingen, dass sie so ein bisschen mehr darüber nachdenken, was sie tun.
Ja, gut, Single-Sign-On verstehe ich
auch irgendwie, aber ich verstehe nicht so richtig, warum man dann...
Ja, wenn man da keine Kapazität hat.
Wenn man das selber machen muss, dann ist es auch wieder schwierig.
Ja, also
das war auf jeden Fall, denke ich, ein
großes Ding, was irgendwie in der letzten Zeit passiert ist.
Ich habe auch für Okta tatsächlich so ein Dankmodul geschrieben,
mit dem das dann doch irgendwie geht, aber
das ist halt auch nutzerlich, wenn Okta kaputt ist.
Ja, doof
Menus
Dann, aha, oh, gibt's
einen, wir hatten ja schon mal
diesen Tiobe
Programmiersprachen
Ach, der spannende große Index
der immer so zitiert wird, wo man dann
irgendwie, wenn man genauer drauf schaut, sehen muss, oh, die
gucken nur, wie die Menge der Suchergebnisse
bei so ein paar Suchanfragen aussieht und das ist ja
alles irgendwie, wie viel das so sagt
Keine Ahnung, es gibt einen anderen, der
macht sowas ähnliches, der heißt
Pipel,
ich weiß gar nicht, wie der heißt.
Jedenfalls da ist Python auch momentan die
beliebteste Programmiersprache.
Insofern kann man sagen, es ist halt jetzt
nicht nur ein Service, der das halt sagt, sondern
es gibt mehrere,
die das halt unabhängig voneinander rausfinden.
Insofern gibt das ein bisschen
mehr Glaubwürdigkeit, dass da
was dran sein könnte.
Es ist auf jeden Fall Python sehr populär zur Zeit.
Sogar Meta
hat einen großen Beitrag
an die Python Software Foundation gespendet, habe ich mitbekommen
in letzter Zeit. Ja, das ist
tatsächlich sehr gute Neuigkeiten.
Das ist ja eigentlich noch nicht so lange her, dass tatsächlich
die Python Software Foundation
irgendwie hatte bisher immer
alles Mögliche um die Marke
drumrum
gemacht und so
und Rechtsbeistand
und solche Sachen für Leute, die das
verletzen und so.
Aber sie haben halt eigentlich keine Entwicklung bezahlt
oder niemanden gehabt, der halt, es gab
niemanden, der sich Vollzeit bezahlt,
um Python
zu kümmern.
Es gab Leute, die bei Firm gearbeitet haben,
die dann zumindest einen Teil der Zeit dafür zur Verfügung
hatten, sich damit zu beschäftigen.
Aber jetzt gibt es seit
zwei Jahren, glaube ich,
Developer in Residence.
Zuerst hat Google
den bezahlt.
Lukas Schlanger macht das sehr gut.
Er schreibt auch immer wieder Blogposts,
was er so tut.
Und jetzt quasi damit
bezahlt das jetzt erstmals auf Facebook,
was natürlich super ist.
Vielleicht werden das ja nochmal irgendwann mehr Leute, also auf jeden Fall
wird es irgendwie mehr Geld. Das ist ja schon mal toll.
Voll gut.
Also ich meine, eigentlich denke ich,
dass große Konzerne das ja eigentlich fast wie eine Art
Versicherung sehen können.
Sollte man meinen. Sollte man denken, dass sie das so betrachten,
weil wenn das
irgendwie nicht mehr funktioniert, dann haben die ein großes Problem,
was sie sehr teuer zuschlingen können.
Es ist halt schwierig, so was zu vermitteln, dass du halt
Dinge bezahlen musst, die in der Zukunft
eventuell einen Return on Invest geben und
oder halt auch nur ein Risiko abwenden.
Ja, aber das ist gerade bei Open Source,
die kriegt man ja immer so umsonst. Das reduziert ja
meistens immer nur irgendwie die Kosten auf einer Kostenstelle.
Ja.
Ja.
Ja, ja, das, genau.
Aber irgendwie geht es da voran, das ist voll gut.
Ja, was haben wir noch?
Oh, genau.
Bugspython.org, das weiß ich auch
schon seit Jahren. Versuchen wir da irgendwie zu
migrieren auf GitHub.
Ist aber noch nicht.
Nein, wir haben es verschoben.
Achso, auch hier darf ich ja durch
8. April, also quasi
bald, nicht übermorgen, aber
in ein paar Tagen und zwar
auf Wunsch von GitHub, weil die gesagt haben, oh wir haben
Schwierigkeiten, wissen nicht ob das
funktioniert, wird für wir die als alle diese
Issues erzeugen und so, wartet
lieber nochmal ein bisschen
Okay, ja gut, das ist jetzt nicht mehr so lange
Also ist jetzt quasi, wenn ihr es hört
vielleicht schon migriert
oder kurz davor
Und gestern am 4.4. ist tatsächlich
20 Jahre.
Das ist auch ein richtiger
Meilenstein. Hätte ich jetzt auch nicht gedacht,
aber das ist natürlich alles
irgendwie
Zeitgefühl, komische Sache.
Schon ein bisschen abgehangen, wie man alt wird.
Ja, aber Python ist total wichtig, super. Also immer wenn man sich fragt,
okay,
Python selber langsam, aber
macht trotzdem Dinge schnell und so.
Wie geht denn das eigentlich? Ja, da ist meistens
Python daran beteiligt und
ja, tolles Projekt.
irgendwie, man schreibt so eine Python-ähnliche
Syntax und das wird dann
halt in C
Cross-Conviled sozusagen und dann... Man kann auch die Funktion
direkt laden, glaube ich, wenn man das möchte. Ja, genau.
Und dann kann man es wieder einbinden als
Python-Modul und dann gibt es sogar
sowas wie ein Cell Magic
in Jupyter Notebooks oder Jupyter Lab
und da kann man einfach sagen, Prozent, Prozent
Zeiten und dann wird
das halt mit der Funktion
einfach so wieder reimportiert und dann
wird die halt tausendmal schneller oder so.
Das ist halt sehr schick.
Ja
Ja, okay
Kennst du V, die Language
V-Lang
Bin ich irgendwie letztens drüber gestolpert, weil ein Kollege mich draufbrachte
und hab ich mal geguckt
kannte ich noch nicht, ist nur noch in so einer Beta-Version
Sieht irgendwie witzig aus
so eine Kombination von Rust und Go
irgendwie
Momentan ist auch wieder so die Zeit für neue
Programmiersprachen, ne, letztens hab ich gehört
von SICK
SICK? Das ist auch so ein
ein toller, lustiger Name, dass das wieder so
drüber fällt, aber den Namen direkt so
Ja, das sieht auch so ein bisschen aus wie eine Kreuzung
aus Go und JavaScript
und irgendwie Rust
und weiß nicht ganz vielen Dingen.
Also ich habe es noch nicht reingeguckt, also falls
ihr darüber was wisst, das könnte auch interessant sein.
Also wie lang IO?
Okay, ich muss es mir auch mal angucken.
Komplett Auto C,
deswegen kam ich gerade drauf.
Ach so, ah, okay, das ist auch interessant.
Ja.
Witzig.
Ja.
Ja.
Okay, dann sind wir eigentlich schon fast...
Das war diesmal schnell.
Ja, wir haben gar nicht viel in den Lügen bleiben.
Dann sind wir damit eigentlich durch.
Achso, haben wir eigentlich
Veranstaltungshinweise oder sowas?
Ja, das wollten wir...
Achso, du wolltest zur PyCon, bist du da?
Momentan sieht es nicht danach aus.
Ich hätte jetzt zufällig...
Zuerst hatte ich gedacht,
das schaffe ich irgendwie nicht,
und Jochen unterhalten sich über die Programmiersprache Python
Tickets. Und dann dachte ich, ich hätte keine Zeit.
Und dann habe ich dann gemerkt, oh, ich habe vielleicht
doch Zeit und dann waren aber keine Tickets mehr da.
Insofern, ja.
Aber vielleicht machen wir auch nochmal
eine Sendung oder so dazu, wie das da gewesen
ist und finden noch Leute, die da waren
und dann davon erzählen können.
Ja, das werden die mal fragen.
Genau, den habe ich schon gefragt.
Hat sich auch schon gemeldet und weiter eigentlich auch.
Okay, cool. Also gibt es doch irgendwann eine PyCon-Folge.
Ja. Im Sommer, die
EuroPython-Tickets sind auch gerade draußen. Da gibt es sogar noch welche von, glaube ich.
Es war noch nicht so super angelaufen, der
vorverkauft, obwohl die so schnell immer weg waren.
Genau, da.
In Dublin, also wenn ihr mit mir abends in Dublin
ein Bierchen trinken wollt. Da könnte es auch gut sein,
dass ich damit komme.
Würde ich gerne machen.
Ich bin gespannt. Und dann gibt es noch die,
also gut, dass jetzt nicht mehr so
Konferenzcenter in Dublin ist, relativ nah an der
Brewdog-Außenstelle.
Brewdog-Brewing.
Ja, genau.
Das Angenehme mit dem Nützlichen.
Ja, super Feminu.
Genau, und im Herbst, irgendwann im September, gibt es die DjangoCon EU, diesmal auch tatsächlich vor Ort und in Porto. Die sollte ja eigentlich letzten beiden Jahren in Porto stattfinden, aber hat sie ja nicht. Und genau da denke ich ja wahrscheinlich leider nicht, weil irgendwie so viele Konferenzen...
Ist Johannes da?
Habe ich noch nicht gefragt, aber wer auf jeden Fall da ist, ist Ronny.
Ronny, das stimmt, das ganze Team.
Ja, das finde ich ein bisschen schade, das wäre natürlich nett.
Das wäre schön, ja.
Ja, jetzt haben wir doch noch ein bisschen
News gemacht.
Okay, gut.
Dann kommt jetzt wieder der obligatorische Werbeblock, habt ihr schon gehört?
Und diesmal ist Janis da.
Janis darf Werbung machen.
Ich darf Werbung machen als Neuling.
Ja, wofür mache ich Werbung?
Ich mache Werbung für meinen Arbeitgeber.
Ich arbeite bei Elio, wir machen Consulting
mit Fokus auf
künstliche Intelligenz und
den Weg dahin, alles was dazu gehört.
Und ihr sucht neue Leute?
Wir suchen neue Leute, genau.
Wie hieß die Domain nochmal? Ich versuche die gerade.
Elio? Elio.de
A-I-L-I-O.de
Quasi AI
im Namen. Ist Programm,
wenn man so möchte. Genau, und
wir suchen neue Leute, immer. Also
es ist wahrscheinlich sogar ziemlich egal,
wann du die Folge hörst.
Wir suchen dich. Was müssen die Leute
können, die zu euch kommen? Wir
haben einen Fokus auf künstliche
Intelligenz, also Data Science,
Machine Learning, Deep Learning,
NLP, das ist natürlich super
interessant, wenn man
sich damit schon mal auseinandergesetzt hat.
Aber auch ganz, ganz normale
Backend-Tools, sage ich jetzt mal,
sind sehr herzlich willkommen und sehr gerne
gesehen. Generell haben
wir den Ansatz, dass
man wunderbar in Rollen hineinwachsen
kann und wir
jeden dabei unterstützen wollen. Das heißt, wenn Pandas
ein Lieblings-Tool ist, ist das vielleicht auch interessant?
Welches Tool? Pandas. Pandas, ja klar.
Sicher, ist ja Data Science.
Ja, der Python passt natürlich eigentlich
schon ziemlich gut zusammen und
und kann man da dann
wahrscheinlich auch remote arbeiten oder so?
Eigentlich sitzt die von meinem Bielefeld, sehe ich gerade.
Genau, wir sitzen in Bielefeld.
Remote Arbeit. Ich arbeite
sehr viel remote. Wir haben immer so
einen Stammtisch irgendwie, damit man sich doch auch mal in Person
sieht, aber rein
optional, sage ich jetzt mal.
Insofern
sind wir gespannt. Klingt gut. Also falls ihr
doch sucht, dann schaut doch mal da vorbei.
Ich würde mich freuen. Klingt, als wären es nette Jungs
und Kollegen. Mindestens einer.
Mindestens.
Ja, vielleicht auch mehr, ich habe davon gehört
Du musst jetzt noch persönliche Coachings
und Benefits anbieten von dir aus, damit das dann
Ja, würde ich natürlich machen
Also wenn du Hörer der Folge bist
und so begeistert von mir bist
Genau, Aktionskurs
Ja
Schrei mich an, genau, eine E-Mail-Adresse
und eine Internetseite gibt es auch
business.lu.de
da könnt ihr euch gerne hinbewerben, ansonsten
gibt es bestimmt auch irgendwo so einen Text, wo man
sowas verlinken kann bei euch im Podcast
Ja, und vielleicht genau, wenn man sich meldet,
kann man auf jeden Fall den Link dazu sagen, dass das über
Python-Podcasts, dass man sich da das gehört hat,
weil dann kann man das vielleicht so ein bisschen
irgendwie verfolgen.
Da haben wir in der Fähigkeit bessere Chancen,
da wissen wir auch, dass ihr schon das hatte.
Genau, dass ihr interessiert seid.
Keine Ahnung, ob das irgendjemand hört,
der auf der Suche ist.
Ich glaube tatsächlich, das hat einen Wert. Also ich wurde mal
gefragt in einem Interview,
welche Bücher und Podcasts ich so empfehlen kann.
Das war ganz lustig.
Python-Podcast ist mir
vielleicht in den Sinn gekommen, vielleicht auch nicht.
Ich wurde tatsächlich auch
im Arbeitskontest von jemandem angesprochen,
also der Projektmanager war, der für
ein größeres Projekt irgendwie
gehört hatte, was da so gibt und der einen Django-Podcast
von uns gehört hat und da dachte ich so, oh cool, da warst du nicht der Typ
mit dem Podcast. Ja, interessant.
Ja, das hilft mir schon. Also das ist schon cool.
Genau. Ja, schick.
Super. Hört mal rein.
Wenn ihr was sucht, wisst ihr jetzt wo.
Oder nicht sucht und
doch zu uns wollen.
und Jochen unterhalten sich über die Programmiersprache Python
und Jochen unterhalten sich über die Programmiersprache Python
Services.
Das ist die Meinung von Jan.
Ja, okay.
Da haben wir schon die Seiten
geklärt.
Ja, das ist ein bisschen plakativ.
Wir werden mal noch sehen, ob das wirklich so ist
am Ende.
Ja, aber das ist doch genau spannend jetzt. Also du sagst,
Microsoft Services sind quasi
eine isolierte
Funktionalität.
Genau.
Wenn ich jetzt eine Anwendung habe.
Wir tun jetzt mal so, als wäre es eine Web-Anwendung.
Vielleicht ist das am einfachsten zu verstehen.
Das heißt, es gibt ein Frontend und die bezieht dann ihre Quellen aus unterschiedlichen, ja, also ihre Bestandteile, ihre Logik aus unterschiedlichen Quellen. Aus dem jeweils einzelnen Microservice. Würdest du sagen, das ist eine gute Idee?
Es gibt verschiedene Ansätze. Das ist das Thema Best Practice, sage ich jetzt mal.
Und auch immer so ein bisschen ein Thema der Architektur.
Also ich glaube, das werden wir im Laufe der Folge, wenn ich in die Zukunft gucke, immer mal häufiger hören.
Man kann sich natürlich verschiedene API-Endpunkte suchen und alle einzelnen anfragen.
Das ist, würde ich sagen, aber keine gute Idee.
Da gibt es dann meistens API-Gateways, beziehungsweise eine Schnittstelle, die man anfragt, die verschiedene Endpunkte sammeln.
Darüber hatte ich eben auch schon mal, glaube ich, ganz kurz mit Jochen
gesprochen, weil es ja genau darum geht, also wer ist
da nicht im Netz, wovon bekommt man das, wenn man jetzt ein Frontend
hat, sollte das Frontend die einsammeln, einzeln
oder holt man das von so einem Gateway ab oder
wie macht man das am liebsten?
Ja, keine Ahnung, also ich glaube
wenn man das wirklich konsequent machen wollen würde
dann müsste man ja auch ein Frontend, das sozusagen
Mikrofrontends
müsste man machen
Da muss ich halt ehrlich sagen, ich mag kein Frontend
Wer liefert denn das Mikrofrontend?
aus. Also wenn man zum Beispiel in HTMLX das ausliefert,
dann wäre ein Django ein sogenannte Spinne
oder so ein Aggregator, ein Gabi-Gateway,
obwohl ich jetzt das Wording da immer nicht ganz
treffen finde, ehrlich gesagt.
Das spielt dann letztlich ja
keine große Rolle mehr,
weil du musst ja dann, das wäre nur noch eine statische
Seite. Also was ich mir jetzt halt da kompliziert drin
vorstelle, ist, wenn ich so ganz viele verschiedene Zeug habe,
aber ich habe ja eigentlich nur eine Anwendung, warum mache ich das nicht
in der einen Anwendung direkt und habe dann diesen ganzen
Gefummel mit dem ganzen
drumherum nicht. Darüber wollen wir ja
reden. Ja. Also, das ist ja das Ziel der Folge. War eine kurze Folge, wenn man das jetzt so einfach
und so schnell... Ein Satz fertig, ja, danke schön. Heute haben wir euch nicht so lange...
Nee, ganz so ist es natürlich nicht. Man muss halt auch mal sehen, welche verschiedenen Funktionalitäten
man haben möchte. Wir sind jetzt im Bereich Web unterwegs, von deinem Beispiel.
Das klingt erstmal sehr, sehr einfach. Web-Anwendung, ich meine, so eine Standard-Firmen-Webseite
meinetwegen mit einem Kontaktformular, da braucht man keine Microservices für, das stimmt schon.
Aber wenn wir jetzt zum Beispiel mal eine Kurs-Webseite meinetwegen sehen, wo wir
und Jochen unterhalten sich über die Programmiersprache Python
Hake ich an der Stelle mal ein und sage mal so,
was ich denken würde, was Microservice ist
und ich würde denken, der entscheidende
Punkt dabei ist eben die Einheit,
wie deployed man das. Also alles, was man
wenn man es insgesamt,
wenn man es halt getrennt deployt, dann ist es halt ein Microservice,
würde ich jetzt mal so sagen.
Oder getrennt
deployen kann und also wenn es
halt irgendwie, wenn die gesamte
Applikation etwas ist, was man insgesamt deployt,
dann ist es halt irgendwie eher ein Monolith.
Und eben, Microservice hat halt den Vorteil,
und Jochen unterhalten sich über die Programmiersprache Python
von Texas.
Hilfe!
Das ist quasi so, ja, also Dinge, die
halt irgendwie so zusammengehören und nur
gemeinsam verändert werden sollen.
Ich glaube, das Standardbeispiel auch eben aus dem
Designbuch ist halt sowas wie
eine Bestellung
und die Punkte, die einzelnen Positionen
auf einer Bestellung oder so, will man vielleicht
das Ding will man immer zusammen
verändern. Das heißt, man holt das insgesamt aus der Datenbank,
macht irgendwelche Änderungen und streibt es halt
in einer Transaktion wieder irgendwie in die Datenbank rein oder so.
Und das ist halt sozusagen ein,
im Baune-Kontext eben.
Ja, das ist aber eine spannende Frage.
Was gehört halt dazu oder nicht? Also bei einer Bestellung
und deren Position geht es vielleicht noch,
aber wenn du jetzt an den zuständigen Sachbearbeiter
beispielsweise denkst, der irgendwie im Innen- oder
Außendienst hängt, ist die Frage, gehört das dann
zum Baune-Kontext da dazu oder holt man das
aus einem CRM?
Ich glaube auch, der Grund, vielleicht der Name,
das kommt daher, dass es halt unterschiedliche
Dinge in unterschiedlichen Kontexten bedeuten kann.
Also zum Beispiel User ist halt was anderes, wenn du dich
auf einer Webseite einloggen möchtest
oder kann halt was anderes sein, als
User oder Personen,
an die irgendwas geschickt wird im Kontext
einer
Bestellung oder so.
Und in dem einen Fall hat man halt da komplizierte
Adressgeschichten und weißer Teufel irgendwie Zeugs
und im anderen Fall braucht man das gar nicht, weil da muss man nur überprüfen,
stimmt der Passwort-Hash oder so.
Und ja,
je nachdem, welchen Kontext man unterwegs
ist, ist das halt
unterschiedlich und man erlaubt dann halt auch
unterschiedlichen Kontexten die Daten unterschiedlich
zu halten und unterschiedliche Sachen zu speichern und so.
Okay, interessant. Also Bounded Context
abstrahiert das so ein bisschen. Was aber jetzt dafür sprechen würde, in dem Beispiel, was du gesagt hast,
braucht man ja irgendwie eine Wahrheit der Daten.
Ja, das ist dann glaube ich, dann wird es ein bisschen schwieriger.
Single point of truth. Das ist eine Herausforderung.
Also ich sage jetzt mal, das ist eine ganz gängige Frage.
Wer lässt man den in Microservices? Und eine Frage,
die damit einhergeht, ist immer das Datenmanagement.
Vielleicht noch mal kurz, Entschuldigung, dass ich euch gerade direkt eingreife, aber was heißt Datenmanagement?
Ein Microservice, beziehungsweise Microservices allgemein zeichnen sich ja dadurch aus, dass das isolierte Systeme sind.
Also im Idealfall hält jeder Microservice genau die Daten, die er braucht oder eben nicht.
Und wenn er die Daten nicht hält, muss er natürlich überlegen, woher kriege ich meine Daten eigentlich und wie kriege ich sie.
Und dann gibt es eben verschiedene Möglichkeiten, damit umzugehen.
Ich könnte zum Beispiel mal irgendwie hier
AP-Request gegen irgendeinen anderen Microservice
machen, meinetwegen, und hole von da meine Daten.
Habe dann aber den Nachteil, okay, das ist langsam
und irgendwie kopple ich meine Microservices
dann wieder zusammen.
Wenn es hinterher dieselbe Datenbank liegt, dann ist da die Frage,
warum macht man da eine unterrichtliche Akzeptur?
Aber vielleicht kann auch das man machen, wenn
ich halt irgendwie hingehe und möchte aus derselben Datenbank
Dinge erzeugen mit unterschiedlichen Sprachen
und die dann...
Und dieselbe Datenbank wird schwierig,
weil dann kannst du es halt nicht mehr getrennt voneinander deployen.
Also wenn jetzt zum Beispiel auf der, wenn es
und gemeinsamen Datenbank hast und du änderst die jetzt?
Na gut, er kann ja einfach den Datenbank-Ding deployen.
Also die Datenbank kann ja noch ein dritter Punkt sein,
der ganz unabhängig von den Services läuft.
Ja, aber da kannst du es nicht mehr unabhängig deployen,
weil wenn du jetzt die Datenbank änderst,
dann hat das ja Auswirkungen auf den anderen.
Hat das ja auch Auswirkungen auf die anderen Services.
Ja, und es ist ein Single-Pointer-Failure.
Also da rede ich aus ganz, ganz schmerzhafter Erfahrung.
Wenn verschiedene Services an einer Datenbank hängen,
verschiedene Microservices, und die Datenbank kippt um,
dann kippen dir die Microservices auch um.
weil irgendjemand Stuss gemacht hat.
Das will man eigentlich auch vermeiden.
Also das ist so ein Shared-Datenbank-Anti-Pattern
heißt das.
Das macht man manchmal,
weil es einfach schnell ist, weil es einfach
einfach ist. Aber wenn man wirklich
Microservice macht und sie wirklich braucht, dann ist das
eigentlich mal eine relativ schlechte Idee, wenn man sich
da doch, wie gesagt, den
Single-Point-of-Fail reinholt.
Aber ja, eigentlich hat jeder Service
seine eigene Daten, seine eigene Datenbank
und du musst halt überlegen, okay,
Will ich jetzt mehrfach die gleichen Daten in verschiedenen Microservices verteilen?
Oder will ich dafür sorgen, dass sich die einzelnen Microservices die Daten von anderen Microservices holen
und erzeuge damit eine Kopplung und mache die Sache vielleicht ein bisschen unübersichtlicher,
vielleicht ein bisschen langsamer?
Und das beschreibt eben das Datenbankmanagement.
Das heißt, wir haben viele Datenreplikationen an unterschiedlichen Stellen
und das macht natürlich den Punkt der Wahrheit, wie es so schön sagt, extrem schwierig.
Ja, da musst du vielleicht über diesen Flora am Anfang halt Gedanken machen.
also wo kommen die Daten überhaupt her
und wo sollen die hin
und dann, ja, also ist ja die Frage, ist das eine
Architekturentscheidung, wenn du jetzt sagst,
Design, Domain dürfen Design
was würde denn da?
Damit sind noch keine Architekturentscheidungen
gefallen quasi
damit ist es halt einfach nur so ein
Konzept, wie man Dinge angehen könnte
aber...
Stell das ja so ein bisschen in den Raum dann vielleicht, also die Wahl
Ja, also
ich weiß es nicht, ich meine, es ist halt die Frage
und
ob man
tja, also
in der Vorbereitung habe ich jetzt mal
so einen Podcast auch gehört,
wo da gibt es
irgendwie ein Buch, das immer empfohlen wird
zu Microsoft Services von Sam Newman
und der ist auch in diversen Podcasts schon zu Gast
gewesen und der sagte
dann dazu quasi so
naja,
also
das mit den Datenbanken ist ja so eine Sache, also wenn
das funktioniert, wenn man halt eine Datenbank haben kann
und so und dann sollte man das schon machen, weil
es gibt ja Grundformen, die so verbreitet sind
und sich so lange gehalten haben und alle die benutzen.
Und wenn man
das halt
nicht kann, gut, weil man halt
Microsoft das machen muss, dann okay.
Da muss man sich halt was überlegen, dann wird es halt schwierig.
Und dann
derjenige, der in den Interview mit hatte, fragte
dann halt auch so, ja kann man denn dann irgendwie was tun,
um Datenbanken schon
drauf auszulegen, dass man die dann vielleicht trennen kann oder
kann man das irgendwie Architektur, und dann meinte er so, ja das kann man,
warum sollte man das tun?
ist. Man muss der Datenbank schreckliche
Dinge antun, damit das geht.
Das muss einem halt klar sein.
Also, ja, es geht schon,
aber die Frage wäre, würde
man so anfangen wollen? Und da denke ich, ja,
warum nicht einfach mit einem ganz normalen
Datenbankschema anfangen? Genau, ja, aber
das würde ja nicht für Microsoft versprechen,
sondern für einen Monolithen oder einen Service, der
es würde nicht dafür sprechen, damit anzufangen.
Würde ich auch sagen, normalerweise sollte man einen Grund haben,
warum man das macht. Also, ich würde jetzt auch so intuitiv
sagen, du baust halt jetzt einmal dein Deployment
für ein Tool, für eine Webman-Winne,
und hast halt dann eine Datenbank dahinter und
arbeitest dann damit
und erweiterst sie halt. Und die Frage ist halt,
wann komme ich denn überhaupt in diese
Sphäre, dass ich sage,
Microsoft ist jetzt eine gute Idee oder das
hilft mir irgendwo bei?
Das ist
unterschiedlich. Vielleicht erstmal eingehakt
noch bei diesem Datenbank-Auseinanderschneiden,
das stelle ich mir sehr, sehr kompliziert vor.
Das, was wesentlich einfacher ist, sich vorzustellen,
ist, dass jeder Service tatsächlich seine eigene, echte
Datenbank hat und man verteilt die Datenbank quasi
auf verschiedene Microservices.
in ganz normalen Datenbanken.
Was du gesagt hast, das kam relativ
kompliziert.
Du hast ja das Problem, du hast ja eine verteilte
Datenhaltung,
wo du nicht einfach einen Join machen kannst, sondern du musst dann halt...
Ja, klar. Also das Datenmanagement
selbst ist wesentlich komplizierter geworden,
aber die Datenhaltung pro Service,
die ist immer noch relativ einfach.
Das muss man halt ganz klar sagen.
Die einzelnen Microservices in sich,
die sind unglaublich einfach.
Wenn du zum Beispiel Monolithen hast, und da kommen wir direkt zu
und Jochen unterhalten sich über die Programmiersprache Python
und das würden jetzt, also Dinge, die halt
eine Seite kaputt machen, andere Apps kaputt machen
und wenn man jetzt beispielsweise in Django-Apps
jetzt denkt, wenn man das parallel
entwickelt, dann könnte man die ja voneinander
trennen.
Im besten Fall tut man das, ja.
Also wenn die sich gegenseitig differenzieren, kommt man natürlich
in so ein Dependency-Problem vielleicht.
Ja, ja, ich glaube,
also ich meine, das ist
auch immer was, wo
es geht eigentlich im Grunde,
das zentrale Problem bei der Softwareentwicklung ist eben
dieses Modularisierungsproblem. Das ist halt
irgendwie so das Ding, was jeder hat und was
irgendwie ganz einfach aussieht, wo alle sagen, ah, dann muss man
halt ein bisschen modularisieren, kein Problem.
Das ist aber tatsächlich sehr schwierig.
Ja, User musst du sehr oft importieren.
Das heißt, dass zum Beispiel, wenn da irgendwas kaputt geht,
das ist schon doof dann wahrscheinlich.
Ja, aber du kannst ja trotzdem
sozusagen die Dinge irgendwie
auseinanderhalten, die nichts miteinander
zu tun haben. Wenn es nicht geht, dann geht es halt
nicht. Aber dann kannst du immer noch die Abhängigkeiten
explizit machen. Also man kann da schon
was tun und man kann das richtig und falsch machen.
und meistens machen sie es total falsch.
Und
die allerschlimmsten Geschichten sind dann halt,
wenn man es halt verteilt falsch macht.
Das ist halt,
ja, insofern, ich bin auch so ein bisschen
immer, also
vorsichtig, weil häufig,
was ich halt schon
häufiger gesehen habe, ist, dass Leute dann sagen,
also sie haben halt dieses Problem, das Standardproblem
irgendwie, das alle haben in der Softwareentwicklung,
irgendwie, sie kriegen ihren Kram halt nicht organisiert,
so richtig
strukturiert und nicht modularisiert.
und dann
nehmen sie halt irgendwie Teile, die kompliziert sind
und machen daraus Mikroservices, weil sie
sagen, ja, dann haben wir das irgendwie modularisiert.
Das ist ja nicht so. Dann hat man es einfach nur verteilt.
Das heißt, man hat ein Ding, was man nicht modularisiert hat,
verteilt und dann hat man halt einen verteilten Monolithen
und das ist halt...
Das passiert leider sehr oft.
Ja, insofern,
genau. Aber ich glaube, dem kann man
so ein bisschen entgehen, wenn man sich überlegt, am Anfang
so, wofür will ich das eigentlich bauen?
Warum mache ich das? Und dann geht das
wahrscheinlich schon besser.
Die Frage ist auch immer, ob man es besser oder schlimmer
macht oder ob man überhaupt was am Zustand ändert.
Ich meine, wenn man innerhalb seiner Architektur
beziehungsweise innerhalb seines Codes Referenzen
hat, dann hat man die ja automatisch nicht mehr nur,
wenn man auf einmal Microsoft verwendet.
Man verlagert das Problem.
Aber ich sage jetzt mal, man macht die Sache halt,
die Codebasis selbst wesentlich einfacher
und manchmal l man auch einfach in eine Situation wo man feststellt okay die Funktion die ich jetzt hier machen m die ist in dem Umfeld in dem ich mich gerade bewege einfach super schwierig zu implementieren Das hei ich finde gar keinen geeigneten technischen Ansatz da mal ein Ding was einzubauen
vielleicht ein ganz einfaches Beispiel.
Wir haben jetzt eine Django-Anwendung und wir haben jetzt
irgendwo, weiß ich nicht,
RabbitMQ, Kafka, irgendwas rumliegen,
irgendeine Queue, irgendein Topic und das
will ich konsumieren. Und dann muss ich mal
überlegen, gut, wie baue ich das möglichst elegant
in eine Django-Anwendung ein?
Dann habe ich da irgendwie permanent etwas
parallel Laufenes, kann man machen.
Die Frage ist, ob es sich natürlich anfühlt,
ob es cool ist, ob man es wirklich so machen will.
Also du willst eine Topic-Anwendung
aufmachen zu einem Kafka oder
einer anderen Queue?
und ich würde es gar nicht mal so ausdrücken.
Ich würde einfach mal den Sachverhalt an sich in den Raum stellen,
dass ich einen Umstand habe, der sich einfach nicht natürlich fühlt,
in die aktuelle Anwendung einzubinden und die man dann reinhackt unter Umständen
oder wo man meinetwegen sagt, okay, ich finde jetzt in meiner jetzigen Architektur
einfach allgemein keinen schönen Ansatz für das, was ich vorhabe.
Weiß ich nicht. Es kann auch andere Gründe haben.
Du hast einen riesen Monolithen, Django, und du hast meinetwegen einen Java-Entwickler,
der eine andere Funktion in Java super cool machen kann, findet sich aber nicht im Django zurecht
und überlegst, okay, macht es Sinn, für den jetzt einen eigenen Service aufzumachen oder nicht?
Vielleicht geht das mehr so in die Richtung politische Entscheidung oder auch nicht,
aber manchmal ist auch so das Skillset der Mitarbeiter, die du gerade hast,
verleiten dich einfach dazu,
zu sagen, okay, ich kann nicht alles in dieser
einen Codebase lösen, ich kann nicht alles mit
diesem einen Deployment lösen, vielleicht
lagern wir das aus und vielleicht ziehen wir dadurch wirklich unsere
Vorteile.
Was ich halt da wieder
an Problemen sehe, ist halt, wenn ich das jetzt
tue, dann habe ich ja irgendwo
den Hut nicht auf. Oder ich muss den
Hut an einer Stelle aufsetzen und muss das dann dann wieder aggregieren,
wo du jetzt vom API-Gateway sprachst.
Also wenn ich diese Spinne im Netz sein will,
die halt die Informationshoheit hat,
die die Single Source of Truth irgendwie
bereitstellen möchte.
Das ist ja kein API-Gateway.
Nein, gut, aber du hast halt andere Services,
andere Teile der Applikation arbeiten
irgendwo auf einer ganz anderen Maschine
mit einem ganz anderen Deployment und die
liefern mir irgendwas.
Ich kann die auch schwer testen oder sowas.
Wenn ich das aus meiner Seite, das muss halt eigentlich auf deren Seite
getestet sein. Das heißt, ich gebe quasi
die ganze Verantwortung
weg.
Du hast wahrscheinlich wesentlich mehr Integration-Tests
erstmal, als du Monolithen hättest.
Auf der anderen Seite sagt man ja,
die einzelnen Services, die sind
entkoppelt voneinander. Das heißt, wenn deiner läuft,
hast du deinen Job gemacht und das ist erstmal alles gut.
Und der andere muss dafür sorgen, dass sein Microservice
läuft. Das heißt, man verlässt sich irgendwie aufeinander.
Und ich habe so ein bisschen das Gefühl,
dass das Problem, worauf du dich so ein bisschen einschießt,
ist das größte Problem
in Microservices allgemein. Das ist immer so
eine Sache, die kann man unglaublich gut machen oder unglaublich schlecht
machen. Oder man macht es einfach, wie man
es macht. Also man bewegt sich irgendwo in der Mitte
und mal funktioniert es richtig gut und mal nicht.
Also das ist eine riesen Herausforderung, worüber du sprichst
beim Single Point of Truth
beziehungsweise auch das ganze
Monitoring. Das ist ja wesentlich komplizierter
in der Microservice-Welt.
Weiß ich nicht, wenn du...
Ja, wenn das meine eigene
Organisation ist, die die Microservices macht,
dann muss ich ja irgendwo dann trotzdem irgendeine Form
von Infrastruktur einziehen jeweils,
die dann irgendwie aggregiert bei mir halt,
wie du sagst, Monitoring macht und da halt irgendwie die Logfiles raus
passt oder irgendwie... Ja, du musst überhaupt mit sowas
erst mal anfangen und wir haben das möglicherweise eben noch nicht.
Das ist auch das erste Projekt,
was er vorschlägt, wenn man sich dann tatsächlich
doch mal dazu durchgekommen hat, das dann zu machen.
Ein gutes Startprojekt ist halt
zu sagen, okay, dann machen wir doch mal irgendwie
als ersten Microservice
irgendwie zentrales
Log
so Elk-Stack oder sowas,
Log-Management, weil
das ist halt relativ einfach,
das ist eigentlich nicht so schwierig, aber man
muss halt trotzdem irgendwie
Sachen irgendwo hindeployen können
und hat unterschiedliche Sprachen.
Man muss es irgendwie konfigurieren
und diese ganzen unterschiedlichen
Aspekte irgendwie müssen
alle zusammen funktionieren, sonst geht es halt nicht.
Und wenn man da schon feststellt, okay, das ist mit der
Organisation, weil das oft hat man ja so
Organisationsproblem, schwierig
zu machen, dann weiß man halt, okay, alles andere danach wird
noch viel schwieriger, daher sollte man vielleicht nochmal überlegen,
wie man das organisatorisch löst.
Aber
ja, genau, genau, das ist eigentlich,
du brauchst dann halt irgendwas, wo du dann halt zentral
deinen Logfile sehen kannst und gucken kannst,
was passiert ist, über deine unterschiedlichen
Services hinweg.
Das meinte ich mit dem
Hut auf Farben. Ich muss halt immer irgendwie so ein
Admin haben oder so.
Du hast dann ein Ding für
Log-Geschichten, du hast aber dann vielleicht auch ein anderes Ding für
Monitoring, du hast wieder ein anderes Ding für
dein
Live-Dashboard oder so.
Das müsste ja nicht alles das gleiche sein.
Aber das Problem,
was ich jetzt habe, ist dann wahrscheinlich niemand den Hut über
alle diese Dinge auf hat und es dann schwerfällt,
die halt in der Bar
Das muss, ne?
Ja, wir haben das auch gemacht.
Ich meine, am Ende, ich meine, das, worauf der Jochen hingewiesen hat,
wir haben ja unsere Tools, ne?
Also der Elkstack für Logging, meinetwegen Sentry, für Fehlermeldungen,
dann hast du vielleicht noch Grafana, Prometheus für Metric Monitoring.
Das sind ja alles standardisierte Ansätze,
die du relativ einfach in deine Services einbauen kannst, ne?
Also Filebeat-Logging geht zum Elkstack.
Und das ist halt etwas, wo man sich auch in einem Monolithen
durchaus Gedanken drüber machen muss,
um da einen einfachen Zugang zu seinen Logs zu kriegen, zum Beispiel.
Gerade dann, wenn du in einem Team bist,
dann finde ich schon, dass man sich relativ früh
die Gedanken über genau diese
Fragestellungen machen sollte, damit einfach jedes Teammitglied
ohne Serverzugriff oder irgendwas
anderes komisches eben an seine Logs
kommt und diese möglichst schön filtern kann.
Elk-Stack, ist doch wunderbar.
Das heißt, diesen Stack, den hast du
unter Umständen auch in einer guten monolithischen
Struktur schon. Vielleicht könnt ihr ja mal noch kurz den Elk-Stack
beschreiben, weil den hatten wir glaube ich noch nicht.
Das ist einfach nur, ich weiß
jetzt gar nicht, ob ich das richtig, ich habe mit dem
gar nicht so viel, das ist irgendwie Elasticsearch,
um die Logfiles durchsuford zu machen.
und Jochen unterhalten sich über die Programmiersprache Python
um sie ein bisschen schöner, JSON-tauglicher
zu machen und durchsuchbarer zu machen
einzelne Felder zu indizieren
und dann wird das eben auf Elasticsearch
gespeichert und mit Kibana durchsuchst du es einfach
dann kriegst du so ein Dashboard, dann kannst du
relativ nutzerfreundlich mit
schön viel Clicky Bunti
deine Logs durchsuchen und dann hast du
deine Graphen, kannst dir auch Dashboards bauen
Freitextsuche
das ist sehr schön
macht Spaß
Okay
Ja, ich sehe es auch tatsächlich, also wenn du sagst, in der Organisation irgendwie muss auch jemand, die, ich denke, das ist halt eines der Ziele bei dieser ganzen Geschichte, gerade wenn man es bei größeren Organisationen, das sich anschaut, die haben oft das Problem, also wenn man sich jetzt anguckt, was machen denn Firmen vorher oder was machen die normalerweise anders, wenn sie nicht Microsoft machen, dann machen sie meistens so eine, also ich würde sagen, Microsoft ist halt so, versucht das ganze Problem, die Problemdomäne irgendwie zu lösen,
vertikal aufzutrennen.
Und was man klassischerweise vielleicht eher
macht, sind Sachen horizontal aufzuteilen.
Das heißt, du teilst normalerweise, sag ich mal,
eben dann vielleicht eher auf in
Frontend irgendwie so Service Layer
und Backend und Datenhaltung.
Und sozusagen
bei Microservices halt eher vertikal. Das heißt,
pro Projekt irgendwie oder pro
irgendeine Organisationsstruktur halt.
Und das
Problem bei dem horizontalen Ding, was halt man da
vielleicht weg möchte von, ist
halt, dass
du halt, wenn du jetzt viele Leute hast, die daran arbeiten, an deinem Produkt,
dann stehen sie halt gegenseitig auf den Füßen unter Umständen. Also du hast dann
vielleicht halt eben schon ein Datenbank-
Team oder so, wo sich die Leute sehr, sehr gut mit Datenbanken auskennen.
Und du brauchst sie halt auch deswegen, weil du halt eventuell fiese Datenbank-Probleme hast,
wo Leute irgendwie Queries optimieren müssen oder sich überlegen müssen, wie sie da halt irgendwie
und die möglich schnell neue
irgendwie Replikas von irgendwelchen Datenmarken
hochziehen können und die Daten da und so weiter.
Dieses ganze Zeugs, was man halt so machen muss.
Und
das sind dann halt so die Sachen, für die du tatsächlich
Spezialisten brauchst, aber du hast
halt oft auch das Problem, du hast jetzt
irgendwie ein Projekt und da muss halt irgendwie jetzt
eine Spalte zusätzlich irgendwo in der Tabelle.
Und das ist jetzt eigentlich nichts, was so
sonderlich schwierig ist vielleicht. Sollte man sich überlegen,
ob man das machen will oder nicht oder keine Ahnung, aber
letztlich das zu tun ist gar nicht so schwer
und dein Datenbankteam ist
zum Beispiel gerade mit irgendeinem anderen Projekt beschäftigt
oder so. Und dann kommst du nicht weiter
mit deinem eigentlich Projekt,
das nur eine blöde Spalte zusätzlich haben
muss. Es gibt halt eine Menge Anforderungen, die sehr
einfach sind. Also entweder du
beschäftigst dann halt deine teuren Spezialexperten
mit sehr simplen Geschichten
oder
du kannst die nicht auslasten,
weil
die halt
oder du kannst halt
mit deinen Projekten nicht weiter, weil die halt mit
und irgendwelchen anderen Kram ausgelastet sind.
Und das blockiert sich halt gegenseitig.
Du hast halt sehr viel Hand-off-Zwischendurch, viel Kommunikation,
weil viele Leute miteinander
reden müssen, damit irgendwas am Schluss
deployed werden kann. Und wenn du es jetzt anders machst
und machst es halt vertikal und sagst, ein Team ist
im Grunde dafür zuständig, das komplett zu deployen
in ein Produkt, Projekt,
Microservice,
und die anderen sind halt bloß,
die beraten dich
dann halt, wenn es irgendwie
kompliziert wird oder so und
und enablen dich halt irgendwie da eine Lösung zu finden,
dann kannst du halt sehr viel schneller halt Sachen tatsächlich raus aus der Tür kriegen.
Und du machst bestimmte Teile deiner Organisation halt auch handlungsfähig,
ohne dass sie halt sich mit allen anderen abstimmen müssen.
Und dann, also das sind vor allen Dingen zwei Teile, die da halt ein Problem sind.
Das ist halt einmal die Infrastruktur ganz unten, das sind halt Datenbank und so und IT-Geschichten.
Und dann oben halt aber UI und UX ist auch immer problematisch.
und der
von Rügen.
Ja, aber du bist halt unter Umständen schneller.
Und ich finde,
in einer Firma gibt es das auch sehr schön,
sowohl, dass das einen Vorteil bringen kann,
sieht man da, und auch was an Nachteilen, nämlich bei Amazon.
Die haben ja eigentlich früher schon angefangen mit
Service-Oriented Architecture,
was vielleicht auch so ein bisschen Vorderteil ist von
Microservices. Und auf der Amazon-Shopping-Seite,
da funktioniert das, finde ich, ganz gut.
Also ich meine, die sieht auch immer so ein bisschen inkonsistent aus
und komisch und altbacken und so.
Aber das geht irgendwie.
Also man kann einkaufen und meistens funktioniert es sogar besser,
als anderswo vom Prozess her.
Aber, also das
geht. Das ist zwar nicht so komplett konsistent, aber
das funktioniert insgesamt. Und wo
ich finde, wo es eine ziemliche Katastrophe ist,
ist halt sowas wie AWS oder so. Wo man auch sieht,
dass jedes einzelne Team, also einmal es gibt
hunderte und dann jedes Team
macht das halt irgendwie anders, so wie sie es halt denken.
Und das macht es für mich als Benutzer halt total
schwierig, irgendwie das
zu bedienen, weil ich nie
Sachen finde und immer
suchen muss nach Sachen und so.
Naja, also auch die Konfiguration, wenn man das irgendwie
automatisiert, ist ja jedes Mal total anders und das ist ein bisschen nervig.
Ja, also ich meine, es geht schon, aber es ist halt schon,
das macht es echt da, an der Stelle macht die
fehlende Konsistenz einem das Leben halt echt schwer.
Und ja, aber
ich glaube, das sind halt so Trade-offs, da muss man sich
entscheiden, ist einem die Konsistenz wichtiger oder die Geschwindigkeit?
Ja.
Ja.
Ja.
Naja, naja.
Wenig Begeisterung für Microservices
habe ich das Gefühl. Ja, ich weiß nicht, also
ich habe noch nicht so herausgefunden, wofür ich
dann jetzt ein Microservice gut einsetzen können.
Also wenn ich mir jetzt vorstelle, ich möchte jetzt
irgendwie so ein Projekt implementieren,
irgendwie so eine gewisse Größe und dann
muss ich ja,
wie Jochen so schön sagte,
enablen die Leute, dass sie
selber klarkommen mit den ganzen
Regeln, die ich irgendwie haben will.
Ich glaube, das ist noch viel zu kompliziert.
Ich glaube, erstmal muss man
überlegen, brauche ich das überhaupt? Also macht das für mich
überhaupt Sinn? Habe ich die Größe, wie viele Mitarbeiter
habe ich? Bin ich jetzt zu fünf, dann mache ich keinen
Microservices auf. Aber habe ich meinetwegen
20, 30, 40 Mitarbeiter,
das macht schon super viel Sinn, da über
Microservices nachzudenken, weil ich kann
jetzt eigentlich Teams machen, diese Teams haben
verschiedene Verantwortlichkeiten
und natürlich habe ich hinterher den Trade-off
mit Konsistenz
meinetwegen im Frontend.
Frontend ist halt immer so, ich bin nicht
im Frontend drin, ich persönlich. Also ich
halte mich davon so weit fern wie nur möglich
und so Backend-Prozesse,
da sind so Guidelines
total egal.
Ich versuche jetzt wirklich nochmal von diesem Management-Layer von oben das mir anzugucken, weil du hast natürlich recht, wenn ich jetzt ein Konzern habe mit 100.000 Mitarbeitern, dann macht das vielleicht Sinn, die Teams zu verteilen auf ihre einzelnen Kompetenzen, die sie haben, die in unterschiedlichen Ländern sogar sitzen, das heißt, die haben ganz andere Abstimmungsprobleme.
Mein Problem ist es aber als Konzern von oben, das so zu managen, diese unterschiedlichen Services, dass sie konsistent sind. Ja, dann habe ich wieder das Problem des Brandings oder wie auch immer. Oder halt, ich möchte eine Nutzbarmachung der einzelnen Services für alle sicherstellen.
und wenn die Standards jetzt so sind,
dass sie jetzt irgendwo im Pazifikraum
funktionieren, aber für uns
nicht lesbar,
dann habe ich ein Problem, weil dann kann
ich keine Synergieeffekte daraus
ziehen.
Ja, die Frage ist dann auch immer, welche Prozesse
werden durchlaufen, um etwas zu
veröffentlichen.
Ja, genau, aber das ist die Frage,
erschlage ich das dann mit irgendwelchen Prozessen? Weiß ich nicht, das macht es
ja nicht besser. Dann habe ich den Vorteil
von Microsoft, das habe ich dann nicht mehr, weil dann muss
ich durch so ein Prozessgateway
durchkommen und habt dann einen
Doorkeeper nach dem anderen.
Ja gut,
aber auch um auf deine Frage zu kommen,
die Frage ist dann am Ende auch, wie schlimm ist das?
Also wenn ich jetzt zum Beispiel in Tokio
das eine Team habe und in Berlin das andere,
die backen beide
ihren eigenen Kuchen, dann
das ist ja gerade der Sinn von Microservices auch,
dass jedes Team eigentlich nach Lust und Laune so arbeiten kann,
wie es will, solange es zum richtigen Produkt führt.
Weil das Team in Berlin wird relativ
wenig Berührungspunkte mit dem Code zum Beispiel
vom Team in Tokio haben. Und umgekehrt
natürlich auch, weil Microservice-Teams,
die stehen ja für sich alleine. Das heißt,
wir haben ein Team, das arbeitet an einer Sache,
das deployed ein Service für sich alleine
und der muss natürlich integrativ mit den
anderen irgendwie funktionieren.
Ich würde auch denken, dass das Problem
eher tatsächlich andersrum ist,
also was dann tatsächlich auftritt.
Ja, es kann auch sein, dass es schwierig ist,
das zu koordinieren, keine Ahnung.
Kann man sich ja vielleicht
irgendwas überlegen. Aber das habe ich jetzt noch gar nicht zugehört,
also das ist ein Riesenproblem.
Aber schon ein Riesenproblem ist halt,
Also wenn du jetzt so etwas hast, wie ich weiß jetzt nicht, was das Beispiel war, das kam auch in der Prozessreise. Du hast halt irgendwie einen Konzern, der hat halt hunderte Marken und jede Marke hat irgendwie eigene Dienste, die sie irgendwie anbieten und die sind alle in unterschiedlichen Teams und so und auch weltweit verteilt und so. Wie stellst du denn sicher, dass du irgendwas über einen bestimmten Kunden weißt zentral? Das kriegst du halt dann nicht mehr hin.
oder halt über die Produktion, wenn du halt da, wenn du derjenige bist, der das produziert und das dann verteilt an Unterrichtsgemeinschaften,
das ist genau das, was ich meine.
Ja, das ist der Nachteil, das geht halt nicht mehr.
Aber das, was ich zentral, das sind wir vielleicht wieder, was man bei Single Porn oder Fools irgendwie überschreiten kann.
Das ist eine Herausforderung.
Ich muss halt irgendwie sicherstellen, dass die Wahrheit, ich will die Wahrheit haben, damit ich das menschen kann,
damit ich die Entscheidung richtig treffen kann, damit ich die Steuerung...
Ist halt die Frage, also es geht halt manchmal, ich meine, ich kenne es halt zum Beispiel,
ein Beispiel als zweitgrößte E-Commerce-Konzern der Welt.
Wisst ihr, wer das ist?
Nach Amazon?
Otto?
Ja, das ist Otto, aber tatsächlich, ich weiß nicht,
ob das noch stimmt. Es kann sein, dass
AliExpress
oder so größer ist.
Oder Alibaba.
Da macht man kein Wettbewerb draus.
Otto auf jeden Fall sehr, sehr groß.
Damals, das ist jetzt aber auch schon wieder
lange her, haben sie
das auf die Fahnen geschrieben,
der Zeitgröße nach Amazon zu sein.
Und die haben halt zum Beispiel genau dieses Problem,
weil es gibt ja nicht die eine Seite,
auf der dann alle irgendwie Zeugs einkaufen,
sondern die haben halt hunderte Shops.
Also jeder dritte Shop, auf dem du irgendwie landest,
gehört zum Autokonzern.
Du weißt das aber gar nicht, weil das steht da ja auch nicht dran.
Die haben jetzt genau dieses Problem.
Jeder einzelne Shop hält halt User-Daten.
Wie machst du das denn jetzt eigentlich,
wenn du quasi Dinge wissen willst über deine User?
Also andersrum, also wie kriegen die ganzen Microservices
wieder alle zusammen?
Ja, und die Antwort ist eigentlich gar nicht.
Ich glaube, da kommen so Leute auf die Idee, wie
Data Lake wird dann eher Data Swamp oder so.
Irgendwas zu Säkertreuen.
Das schlimmste Problem
ist gar nicht unbedingt die technische Lösung,
sondern das schlimmste Problem sind halt die
politischen Geschichten, die du halt auch kriegst automatisch.
Dass halt Leute sagen so,
wir haben hier gerade
einen Vorteil, sie sind ja untereinander im Wettbewerb,
wir haben hier gerade einen Vorteil, weil
wir irgendwas wissen, was die anderen nicht wissen.
Und jetzt sollen wir die Daten, das, was
uns dazu verhilft, dass wir irgendwie besser
sein können als unsere interne Konkurrenz,
das sollen wir denen jetzt irgendwie freiwillig zur Verfügung
stellen. Dann haben wir halt irgendwie
einen leicht kaputten Export, wo die Daten
so ein bisschen... Ja, aber mit der Konzernbrille,
die du dann aufhast, dann musst du da hingehen, musst den gotischen
Knoten dann kaputt hauen. Dann musst du sagen, gib uns die Daten,
wir sind der Chef. Ja, schwierig.
Sehr schwierig. Also,
ja. Aber auch
da, ich meine, das ist jetzt ein sehr, sehr schönes Beispiel,
und Jochen unterhalten sich über die Programmiersprache Python
oder wie auch immer. Oder will ich
jetzt einfach alles wissen und will ich die totale Kontrolle
haben? Ja, das ist halt genau das klassische Problem
eigentlich. Machst du halt irgendwie Diversifizierung
oder machst du Fusionierung
irgendwie. Das ist
in der Softwareseite und die Frage,
die irgendwie die Consultants immer geben, ist immer genau das Gegenteil
von dem, was gerade da ist.
Dann kannst du halt so ein Projekt consulten, kannst du
und dann geht es halt immer raus und zusammen.
Ich meine, das macht natürlich auch Sinn. Also wenn du irgendwas
hast, was total verfüllt ist, dann musst du das
erstmal auseinanderspalten, dann hast du kleine
einzelne Services, die untereinander so ein bisschen Wettbewerb haben, die guten Sachen,
muss dann irgendwie wieder konsolidieren und zentralisieren, um dann wieder den guten Benefit rauszubekommen.
Du merkst, dass du wieder doof bist, dann fängst du wieder an, das auseinanderzudröseln.
Das ist ja genau wie bei den Ländern. Mal sind Länder zusammengefasst, dann sind sie auseinander.
Aber das ist ja vielleicht auch dieser natürliche Lebenszyklus von so einem Ding.
Wenn ich jetzt zum Beispiel das Otto-Beispiel nehme und ich möchte diese User-Daten haben,
Ich würde jetzt als Otto hingehen und sagen, ich will wissen, wer sind meine Kunden, wie viele Kunden sind überhaupt irgendwo.
Dann muss ich hingehen und sagen, gebt mir alle eure Daten.
Dann baue ich einen zentralen Service dann zusätzlich, der halt von allen die Daten abholt.
Dann kann es sein, dass ich jeden einzelnen dieser Shops einzeln integrieren muss.
Kann irgendwie sein, dass das relativ viel Aufwand macht.
Aber dann hole ich mir die alle irgendwann ab und dann weiß ich, okay, zumindest in der Historie gesehen,
ist das vielleicht ein Tag alt oder so oder eine Woche, ist ja egal.
Aber da sind die Daten einigermaßen echt.
Und da habe ich einen vollen Überblick, was da meine Leute sind.
Und da kann ich dann bestimmte Analysen fahren, die ich vielleicht fahren möchte.
Aber das ist ja das, was man vielleicht dann braucht.
Und dann kann man damit vielleicht dann wieder sagen, ah, aber dafür
machen wir jetzt wieder so kleine Services, weil dann...
Vielleicht, ne? Aber du kannst auch überlegen,
ob du, finde ich, im Vorfeld einen gewissen
Standard etablierst, wo du sagst,
da sind wir wieder beim Standard natürlich, ne?
Und bei den Gateways, ja.
Nicht nur bei den Gateways. Ich bin ein Backend,
ich interessiere mich nicht so für die... Ja, doch, auch.
Ja, das ist mein Problem mit der Gatekeeper.
Ich musste gerade, weil du gesagt hast Standards, musste ich an
Infrastrukturstandards denken und
auch dann, du sagst das ja, unheimlich schwierig,
wenn du die gleichen Standards
einführst für Teams, die
auf der Welt irgendwo sitzen.
Damit verlierst du die Vorteile von Microsoft.
Die Frage ist halt, was der Standard ist.
Möchte ich jetzt einfach so ein Plug-in
auf jedem Shop haben, welches meinetwegen
in verschiedenen Programmiersprachen
vorhanden ist, damit die Shops autonom sind?
Ist es für mich ein vertretbarer Aufwand,
das zu gewährleisten, meinetwegen?
Es fängt ja schon bei kleineren Sachen an,
wie jeder Dev kriegt einen Windows-Klip-Top
mit AD zugeführt.
Aber das hat er nicht.
Das ist der Punkt. Wenn du Microsoft was machst,
musst du erkennen, dass das unabhängig sein muss
von dem Rest und du kannst das
da nicht zentralisieren. Und wenn du das machst,
ist es halt kontraproduktiv, weil dann hast du den
Monolithen irgendwo dazwischen sitzen,
der wie eine Krake versucht, seine einzelnen Sachen
noch festzuhalten und dann ist das völlig
absurd. Wie gesagt, also für
mich muss man da so ein bisschen
von loslassen, dass man die
Kontrolle, die totale Kontrolle haben will.
Und wenn man das kann und wenn man dann die Vorteile
für die Flexibilität
sieht, die man dabei gewinnt,
und dann sind Microservices schon sehr vorteilhaft.
Ja, genau, aber das ist genau der Punkt,
weil wenn ich jetzt sage, ich möchte den Hut aufhaben,
wird das so nicht funktionieren.
Sonst wird nur dann funktionieren, wenn ich Verantwortung abgeben kann.
Ja, dann nimmst du Microservices.
Ja, genau.
Aber da hast du ja schon eine Antwort.
Also willst du den Hut aufhaben, wie du es so schon sagst,
dann mach keinen Microservice
oder überleg dir halt sehr, sehr gut, wie du das gewährleisten kannst,
wie viel willst du wachsen.
Vielleicht geht das ja so, wenn Microservices verweist.
Oder willst du die Verantwortung abgeben,
dann kannst du Microservices nehmen.
Die Frage am Ende ist, wenn du einen riesen Konzern hast,
hat da überhaupt noch jemand den Hut auf?
Egal welchen Ansatz du nimmst.
Die Frage am Ende ist dann ganz einfach,
auf welcher Kostenstelle wird denn das gebucht und wer hält dann wo die Hand auf?
Ja, aber ich glaube,
wenn man nochmal einen Schritt
mehr Richtung Organisation
oder allgemein oder abstraktes Problem geht,
ich denke, ich würde irgendwie diesen Trend
zu Microsoft halt so verorten
in einer Reihe von Trends,
die halt alle in eine ähnliche Richtung laufen.
Ich glaube, DevOps ist auch so ein Ding,
was in eine ähnliche Richtung läuft,
weil bei all diesen Dingen geht es im Grunde darum,
dass man halt in so einer klassischen Organisation,
dass da die Incentives irgendwie pervers sind, so ein bisschen.
Und das sind alles Versuche, das zu lösen, dieses Problem,
dass die Incentives eigentlich nicht korrekt sind.
Also was ich damit meine, ist einfach nur,
ist eigentlich ein total simples Problem.
Nehmen wir an, du hast halt irgendwie,
früher hast du halt Entwicklungen und Betrieb
oder IT und Operations
und auf der anderen Seite Entwicklung.
Das ist vielleicht auf unterschiedlichen
Seiten deiner Bilanz auch. Das eine sind
Kosten und das andere sind
Investitionen.
Dann siehst du
wenn da Features entwickelt werden,
siehst du das als Investition und
denkst halt, je mehr Features entwickelt werden, voll gut,
gibt mir in der Zukunft mehr Einnahmen, total super.
Das heißt, deine Entwicklung
misst du daran, wie viele Features kriegen die eigentlich
Pro Quartal irgendwie raus oder keine Ahnung, irgendwie sowas.
Und dann geht das Ganze
in den Betrieb.
Woran misst du deinen Betrieb? Den misst du an den Kosten
und daran, dass es halt funktioniert.
Aber
sozusagen die Leute, die da
arbeiten, die haben nichts davon,
dass da mehr Features rausgehen.
Die kriegen
nicht mehr Geld dafür, dass sie halt
dafür sorgen, dass sie in den Verkleinern
mehr Features veröffentlichen. Was ist deren
sozusagen rational
der beste Strategie in diesem
Setting ist halt tatsächlich zu sagen
Never change a running system
Ja, irgendwie
ich werde nicht belohnt dafür
ich bin ein Kostenfaktor, ich werde nur bestraft
wenn irgendwas nicht geht, solange das Wasser läuft
und der Strom an ist, alles gut
sobald der Strom ausfällt, kriege ich
ein paar Probleme
das heißt, mein Ding ist
ich meine klar, eine Änderung kann sein
dass die gut ist für andere, aber ich habe ja nichts davon
oder sie ist schlecht
dann trifft mich das.
Das heißt, ich versuche möglichst Änderungen
zu verhindern. Dann, das ist
sozusagen für mich am besten, weil dann kann ich
sicherstellen, dass möglichst wenig kaputt geht.
Und na gut, für die anderen ist das halt nicht so toll,
dass sie halt nicht so viele Features rauskriegen, aber ist ja ehrlich gesagt
nicht mein Problem.
Das ist halt etwas, in das
Unternehmen dann halt früher oder später irgendwann reinlaufen
und überlegen sie sich, wie sie damit irgendwie umgehen, dass das
jetzt irgendwie problematisch ist und das halt irgendwie
ein Maß dafür. Man sich fragt so,
also dann macht man dann eine Kostenschwellung, keine Ahnung
und dann sagt man intern so, man kostet das unfassbare Beträge, irgendwas sehr simples zu tun.
Dann fragt man sich, ja, wie kommt denn das zustande, dass das plötzlich so wahnsinnig viel kostet?
Ein Server 50.000 Euro.
Ja, irgendwie sowas.
Und die Antwort ist einfach so, ja, das ist halt deswegen, damit du das nicht machst,
damit du nichts änderst, ja, das ist der Grund.
Das ist halt der Preis für die Änderung, dass jemand sagt so,
irgendwie ich gehe ja für dich das Risiko, dass sich irgendwie das Sachen kaputt gehen.
Ich will möglichst, dass du nichts änderst, ja.
Und deswegen ist das so teuer.
und ja, DevOps ist halt dann so ein, also die Lösung dafür ist halt dann sozusagen die Verantwortung für das,
für diese Dinge halt auch mit in den Bereich zu packen, der halt davon profitiert, wenn was deployed wird.
Ja, mit in den agilen Sprinter zu packen.
Genau, Agile, auch so ein Ding, wo man sagt, okay, genau, wir packen das alles zusammen.
Ja, oder halt eben DevOps, wo man sagt, okay, die Leute, die das deployed haben wollen,
deployen es dann halt auch selber und betreiben es auch selber.
DevSecOps jetzt, ne?
Full-Stack-Microservice
DevOps
im agilen Prozess
ja, das ist unglaublich
aber ja
genau, es geht halt darum
irgendwie, dass
einzelne Teams halt möglichst
autark Dinge machen können
dass man halt sozusagen da, wo man investiert
halt auch tatsächlich, dass die auch dann
die Möglichkeit haben
das umzusetzen, aber
und Jochen unterhalten sich über die Programmiersprache Python
dazu, dass diese Idee, Microsoft ist
ganz groß geschrieben, du willst ganz viel
Microsoft machen, aber hast
eigentlich da die ganze Zeit diese Krake, die das
festhält. Und das funktioniert, glaube
ich, überhaupt nicht.
Weiß ich gar nicht.
Also ich meine, das Problem,
also vielleicht kann man
das ja an einzelnen Projekten irgendwie,
also ich würde ja auch denken, dass eine schlaue
Art irgendwie, wenn man jetzt migrieren
wollte von Modulit auf Microsoft, wäre halt,
man fängt halt klein mit kleineren Teilen
an und macht das da. Und man macht nicht alles auf einmal.
weil das wird wahrscheinlich nicht gut funktionieren.
Warum denn überhaupt?
Also ich verstehe es immer noch nicht.
Also irgendwie denke ich immer noch so,
warum hält man das dann nicht an einer Stelle fest
und sorgt dann dafür, dass die
alle dann an eine Stelle
kommen, dass sie sich alle gut verstehen,
dass sie alle dieselbe Text-Stack benutzen,
dass sie die Infrastruktur standardisiert benutzen,
dass sie nur die standardisierte Infrastruktur benutzen, keine andere
und dass halt dieses ganze Distributed
Quatsch, Entschuldigung,
dass alles weg ist.
Ich habe die Things of Tuesday,
Ich kann ja von mir verschiedene Rechenzentren
parallel an verschiedenen Orten halten. Das ist ja okay, das kann ja
ein Server-Team mitmachen. Aber warum muss ich, also
die Abhängigkeiten werden dann von mir
aus schwieriger, ja,
so ein bisschen zu managen, weil ich habe halt dann das Problem,
wie Jochen gerade sagte, dass
hochspezialisierte, hochgutbezahlte
Spezialkräfte sich teilweise um trivialen
Scheiß kümmern müssen, bis die Sachen halt mal
integriert sind.
Aber dafür konnte man ja einen Service schreiben, also keinen
Microservice, sondern einen, der halt
in den Monolithen drin hängt, ja.
Ja,
Also ich, ganz grundsätzlich, ich habe so ein bisschen das Gefühl, du bist so ein bisschen biased.
Weitere, das ist mir eine meine Meinung.
Nee, es ist ja alles gut.
Also grundsätzlich muss man halt die Ausgangslage erstmal in Frage stellen.
Habe ich denn überhaupt die gleichen Kompetenzen?
Ich meine, darüber hatten wir ja schon geredet.
Es ist auch nicht immer ganz leicht, die gleichen Kompetenzen überall zu finden für alles.
Wenn du eine große Firma bist, dann hast du vielleicht irgendwie einen Java-Entwickler,
der ist Querensteiger in Python oder C-Sharp in C++, was weiß ich.
So was gibt es.
und dann verlangst du halt von dem einen Entwickler, dass er seinen Stack zum Beispiel umstellt, das willst du ja auch nicht unbedingt.
Also du hast halt grundsätzlich erstmal verschiedene Kompetenzen, dann ist die Frage, brauche ich diesen einen globalen Tagstack überhaupt, will ich den überhaupt haben, bringt er mir überhaupt was.
Es gibt halt so wenig gute Leute, dass man wahrscheinlich schon Tagstack multiplexen muss, damit man überhaupt genug Leute findet.
Ah siehst du also Microsoft nein Aber grunds musst du dir ja auch die Frage stellen erstmal vielleicht um von dieser Ebene mal ein bisschen zur zum Code zu kommen Ein Monolith der hat nat
eine riesen Codebasis, die unter Umständen
relativ komplex ist. Das heißt, du musst viel Aufwand
in den Deployment-Prozess an sich stecken.
Also bist du
ein einzelnes Feature, ein neues Feature deployst
oder ein Bug fixst, musst du dich mit relativ vielen Leuten
wie der Jochen schon gesagt hat, abgesprochen haben.
Du bist insgesamt ein bisschen langsamer und
vor allem auch fehleranfälliger insgesamt.
Wenn irgendein Integration-Test irgendwie fehl geht und der irgendwie der Imposition durchrutscht, dann ist im Zweifel rausch ein ganzes System ab und hat eine Daumenteile.
Genau, der Monolith ist so ein klassisches Beispiel für Single-Point-of-Failure.
Auch das kannst du irgendwie umgehen, indem du hast ein Backup-System, du hast das parallelisiert, was weiß ich.
Also du kannst die Chance minimalisieren, dass du genau an solche Punkte läufst, mit Rollback, mit AB-Tests und so weiter.
Also du hast eine Möglichkeit, aber auch das musst du dir halt erstmal aufbauen.
Das heißt, du musst dir mit der Zeit erstmal
aufbauen, mit dieser Komplexität umzugehen und
am Ende stellt sich die Frage, wie gut
gehst du eigentlich gerade mit der Komplexität um und
kann das mein Team zum Beispiel sehr, sehr gut
und bin ich mit der Geschwindigkeit so zufrieden,
weil ich habe die Erfahrung gemacht,
dass sich bei einem Monolithen
irgendwann viele Entwickler darüber
beschweren, dass das Deployment
zu langsam ist insgesamt, dass die Features teilweise
zu lang rumliegen, weil zu viele Leute
dann denken, wenn ich so zwei, drei
im Tag rausschrauben will, ist das schon ein bisschen doof.
Ja, nicht nur, wir reden ja nicht über Stunden, wir reden teilweise
über Tagen, Wochen. Also das ist schon nicht so
einfach. Und dann kippt auf einmal was um.
Du musst das
irgendwie organisieren, dass du einzelne Sachen
deployst. Und dann ist es natürlich schon cooler, wenn du
einen einzelnen Microservice hast. Und wenn der mal umkippt,
dann ist das nicht so schlimm für die Gesamtanwendung.
Du gefährdest dadurch relativ wenig andere
Sachen durch das Deployment. Also erstmal wirst du
durch einen Microservice, wie wir schon gesagt haben,
unter Umständen auch nicht zwingend. Du musst es natürlich
auch erstmal gut machen.
Aber du kannst gewisse bürokratische
Randeffekte dadurch durchaus
vermeiden erstmal. Also dass wir zum Beispiel
ein Grund zu sagen, ich will das jetzt aufsplitten.
Ein anderer Grund ist,
dass wir reden über
große Codebasen. Also das muss man halt
immer erwähnen. Wir reden über große Teams.
Und niemand kennt
den ganzen Code. Also was bringt
dir ein einheitlicher Text
weg, wenn du dich eh nicht mit
Sachen in den
Core-Geschichten auseinandergesetzt hast, weil du
meinetwegen, weiß ich nicht,
im krassesten Beispiel, du bist Frontend-Entwickler in einer
Django-Anwendung und du nutzt noch
kein Vue.js oder sowas,
sondern du schreibst irgendwie dein Frontend-Code
in die Django-Anwendung rein
als JavaScript-Entwickler
hast du auch nichts mit Python
am Hut. Da macht es schon
Sinn, dass du sagst, okay gut, ich baue jetzt mein eigenes Frontend
irgendwo anders. Ist jetzt nicht wirklich ein
Microservice, aber das verhandelt einfach
das Problem so ein bisschen, dass dieser Entwickler
nicht den ganzen Stack kennt und auch überhaupt nicht
kennen muss.
Gut.
Ich frage mich halt,
ob das
einen Unterschied macht.
Also es ist ja egal, ob jetzt jemand an seinem Feature-Branch
irgendwie eine App baut.
Süßer, wenn es keinen Unterschied macht,
ist es doch doppelt egal.
Nein, aber das ist ja dann trotzdem im Monolithen.
Ja gut, aber also mindestens
habe ich Komplexität draus.
Sowohl im Code, Microservices ist ein kleinerer Code,
der ist ein bisschen leichter zu lesen, du kannst dich ein bisschen
schneller einarbeiten, weil du nicht vor einer Wand aus Code stehst.
Du stehst vor einer Wand aus Guidelines
und Jira-Pages
und was weiß ich.
und die Programmiersprache Python.
Da musst du die Reihenfolge festlegen.
Auch das hast du in Microservices, wenn sie unabhängig
voneinander sind, teilweise nicht.
Aber klar, Breaking Changes ist immer ein Thema.
Das hast du jetzt auch sehr schön geredet.
In meinem Kopf ploppt gerade wieder aus,
wenn ich das dann warten möchte und wenn ich das
ausbauen möchte, wenn das Team weg ist,
was die Microsoft entwickelt hat, dann muss ich ja wieder
Experten suchen, sich dann mit dem anderen TechSec auskennen,
den ich jetzt gar nicht kenne.
Der Microservice an sich, der soll relativ schnell
entwickelt sein. Ich meine, das ist jetzt auch wieder
Theorie, aber rein theoretisch soll auch
ein Microservice austauschbar sein.
Ja, okay, das heißt
das ist ein Wegwerfding, das heißt, wenn es nicht mehr läuft
dann würde ich halt jemand aus einem anderen TechSec den
gleichen Microservice neu baut irgendwie und das dann
günstiger, als den anderen
neu zu warten, ja, okay
Ja, ja, könntest du natürlich
machen, aber ja, ich meine, ja, ehrlich gesagt
ich würde, also ich meine, ich würde
schon sagen, natürlich, das ist klar, dass
Situationen in den Microservices halt voll gut sind
würde ich
jetzt gar nicht bestreiten wollen, aber
auch, also, würde man damit anfangen
wollen. Wenn man jetzt noch nichts
gebaut hat, da wäre ich auch eher skeptisch, glaube ich.
Aber genau,
das ist halt die Frage,
gibt es irgendwie einen Grund, warum man das machen sollte?
Was ich dann,
was der Autor
von dem Buch da meinte, ist so, naja,
eigentlich eher so, Microsoft, das macht man halt dann,
wenn sonst nichts mehr funktioniert.
Also wenn halt sozusagen,
wenn alle anderen Ansätze halt nicht funktionieren,
dann muss man halt irgendwie, ne, aber
ja,
also, und
und der sagt halt, der Hauptgrund, der wichtigste Grund, der tatsächlich irgendwie valide ist, ist halt, dass man Teile der Organisation halt unabhängig machen will vom Rest, eben dadurch, dass sie halt selber deployen können und genau, wenn das halt anders nicht geht, dann muss man das halt so machen.
Aber, und ja, das kann natürlich sein, wenn du halt einen großen Monolithen hast, den du schlecht deployen kannst und dann halt einzelne Teams halt sagen, so, wir würden gerne, aber wir kommen, das wird nicht live, das, was wir machen, dann geht es halt vielleicht nicht anders.
aus der Ausbildung machen.
Wir können vielleicht auch sogar in Richtung
Use Cases gehen. Ich meine, wir hatten ja schon
Beispiel der Bestellservice meinetwegen oder IoT,
wäre auch noch so ein Bereich, wo es
prinzipiell durchaus auch natürlich wirken kann,
Microservices zu etablieren. Ich meine,
nehmen wir jetzt mal an, wir haben einen sehr, sehr
großen Datendurchsatz. Also wir haben irgendwo eine Nutzerplattform,
da machen Nutzer irgendwelche Sachen und
parallel davon kommen meinetwegen aus dem IoT-Bereich
irgendwelche Temperaturdaten
von Heizung rein oder
Geodaten vom Auto, was weiß ich.
Also du schreibst ja viele Daten.
Dann willst du natürlich dafür sorgen, dass dieser Schreibprozess, der die ganze Zeit irgendwo hinschreibt, von deinem User-Dashboard irgendwie entkoppelt ist. Du hast ja keinen Bock, dass die Datenbank dadurch langsamer wird. Unter Umständen ist die Datenbank da auch gar nicht die richtige für, um diese Art von Daten da reinzuschreiben.
Das heißt, wir haben auf einmal mit diesem Beispiel einen Kontext geschaffen, wo wir sagen müssen, okay, wir haben zwei komplett unterschiedliche Anforderungen geschaffen. Wir haben einmal irgendein Dashboard, das ist so klassisch HTML, kannst in der SKL-Datenbank hinterhängen, ist alles toll. Und wir haben auf einmal irgendwie meinetwegen IoT-Daten, Geodaten, irgendwas, die in hoher Frequenz beschrieben werden. Da müssen wir uns überlegen, gut, wie verwalten wir den ganzen Spaß eigentlich? Eignet sich dafür meine...
der SQL-Datenbank. Da kommen die Sachen von
der IoT-Sache einfach rein und der User
liest halt auch sehr. Ja, ich
fülle das erstmal weiter aus noch. Also ich kann
überlegen, schreibe ich das jetzt gleichzeitig damit rein.
Aber irgendwann stelle ich halt fest, okay,
zu Lastzeiten wird
auf einmal meine Internetseite langsamer,
weil ich auf einmal zu viele Daten schreibe von
diesem IoT-Prozess. Und die User,
die kriegen eine schlechte
Nutzererfahrung dadurch. Also
die Schreiblast, die steigt,
dadurch wird die Internetseite unter Umständen langsamer,
weil ich alles ineinander verwurschtelt habe
und dann muss ich überlegen, gut, wie gehe ich
jetzt damit um?
Normalerweise sollte
das gar nicht
so viel langsamer werden, oder?
Wenn du schreibst, klar
aber gut
Also zum Beispiel Postgres lockt jetzt
nur die Zeile, wenn du schreibst und wenn du jetzt
ein neues IoT hast, dann hat der neue Zeile drauf
das heißt der Nutzer kann ja alle anderen Zeilen zum Beispiel
lesen
Ja, also ich meine
Aber es kann natürlich schon passieren,
dass Schreiblast irgendwann
dein System langsam macht.
Aber auch meine Frage wäre halt,
wie häufig kommt das denn vor,
dass man so skalierbar, oder ich würde sagen,
ja, es gibt einen validen Grund, Microservices
aus Skalierbarkeitsgründen einzusein, aber wie häufig kommt denn das vor?
Nein, aber nochmal kurz zu
fragen, was wäre denn jetzt die Lösung
davon? Dann habe ich Sachen, die IoT
schreibt in eine Datenbank rein und
dann habe ich ja, der in Flaschen heißt
bei dem Prozess, der von der einen Datenbank
in die andere Datenbank das übertragen muss, dann
Ist ja der Stand alt, beispielsweise, weil die Verbindung...
Ja, die Frage ist, ob wir das überhaupt übertragen müssen.
Also Microservices.
Als erstes stelle ich fest, okay, das passt jetzt nicht irgendwie in die SQL-Datenbank.
Die wächst mir zu schnell.
Das sind Zeitreihen zum Beispiel.
Dann schreibe ich das in eine Datenbank, die extra dafür vorgesehen ist.
Prometheus ist auch eine, aber die ist eher so für Metrikdaten.
Dann schreibe ich das da rein.
Dann überlege ich, gut, wie ziehe ich mir die jetzt in dieses monolithische Ding?
aber es macht für mich erstmal überhaupt keinen Sinn, diese Art
von Daten in die SQL-Datenbank vielleicht zu schreiben.
Das heißt, ich habe diesen Prozess mal getrennt
und auf einmal habe ich
Möglichkeiten.
Auf einmal habe ich es geschafft,
diesen Prozess zu trennen und jetzt kann ich überlegen, gut,
zu Lastzeiten zum Beispiel
haben wir immer höhere Peaks.
Wie kann ich die Architektur jetzt vielleicht
sogar günstig halten?
Dann kann ich auf einmal überlegen, weil ich jetzt meine Datenbanken
getrennt habe, ich habe jetzt eingesehen, okay, ich habe
einen getrennten Schreibprozess von diesem Dashboard-Prozess.
und Jochen unterhalten sich über die Programmiersprache Python
abarbeiten. Also von diesem Ticketsystem kann ich mir dann meinetwegen
10 Minuten verzögert Nachrichten rausziehen und die dann erst in die Datenbank
reinschreiben und dann habe ich nicht das Problem, dass ich meinen Server unter Umständen dynamisch skalieren muss.
Oder generell hochskalieren muss.
Ja, aber gut, da wäre halt die Frage, was ist...
Ja, also ja, ist alles valide, aber
was ist teurer? Die Architektur aufzuteilen oder
einen dickeren Server zu kaufen.
Ja, aber auch da
gibt es so sehr, sehr schöne Graphen.
Das ist natürlich
ein Monolith. Das ist sehr, sehr lange günstiger
als Microsoft. Das stimmt. Aber irgendwann,
irgendwann kann man zu diesem Punkt
kommen, wo es überproportional
teurer wird, sich größere
Hardware zu kaufen. Also erstmal steigt das
irgendwie sehr, sehr gradlinig.
Ich gestikuliere hier immer so rum,
aber es ist ja Podcast.
Also,
anschauen.
Erstmal steigt das relativ
geradlinig, also irgendwie f von x
gleich x, kann man sich sehr schön vorstellen.
Und hinten raus wird es dann auf einmal exponentiell.
Dann
explodieren die Kosten, weil
die Maschinen dann einfach wirklich
sehr, sehr teuer sind.
Also ich finde, das Problem,
was du gerade gesprochen hast, müsste man eigentlich nochmal mit
Leuten, die noch ein bisschen mehr Spezialwissen
in Datenbank haben, sprechen, weil
für mich hört sich das nicht so an, als wäre da der Flaschenhals
an der richtigen Stelle.
und das gibt es alles schon.
Also es ist halt die Frage, ob es so häufig ist.
Ich meine, das Problem ist halt, also was du dafür
aufgibst, ist natürlich die Konsistenz.
Ja, das stimmt halt
einfach nicht mehr. Und ich habe halt dazwischen noch so ein extra Layer,
wenn ich jetzt einen Kafka dazwischen mache. Warum?
Also wenn ich jetzt eigentlich direkt aus der Datenbank lesen könnte
und du sagst halt, die Datenbank wird langsam, das verstehe ich nicht so genau,
weil
wie viele Verbindungen hat die denn dann offen?
Nein, aber
zum Beispiel,
du hast ja nur eine bestimmte Bandbreite zu deinen
Platten, wenn du es wirklich schreiben musst.
und Jochen unterhalten sich über die Programmiersprache Python
viel langsamer als sowas wie Redis.
Aber bei Redis ist halt auch, wenn du dann
das Ding ausmachst, dann sind deine Daten
halt weg. Bei Postgres nicht.
Da sind die Daten halt noch da. Das ist der große Unterschied.
Ja, aber die Frage ist halt, was halt dann
schreiben und so weiter, wann wird das halt überhaupt freigegeben?
Also das ist ja egal.
Wenn die Datenmarkt sagt, deine Transaktion ist durch, dann ist das wirklich
das Klassikland. Ja, aber das macht aber die Postgres nicht langsamer,
sondern das ist halt nur so, dass das nur schreiben langsamer.
Ja, aber das macht die langsamer.
Ja, aber das macht schreiben langsamer, aber das heißt nicht, dass das
Lesen langsamer wird. Ja, doch.
und Jochen unterhalten sich über die Programmiersprache Python
kannst als Schreiben. Und dann
die Bandbreite zu deinen Platten halt
oder SSDs heute halt irgendwie
ausgefüllt ist mit Schreibvorgängen.
Dann kannst du nicht mehr viel lesen.
Nein, wieso? Also lesen lässt du ja eh noch auf dem Speicher. Das ist ja egal.
Das I.O. ist ja nur
das CPU.
Ja, das ist sowieso immer
im Hauptspeicher.
Das ist immer im Hauptspeicher. Das ist wirklich so.
Und das Einzige, was halt da dein
Konzern ist, ist dann die CPU-Kerne, die halt damit
beschäftigt sind. Wie viele Prozesse
du offen hast. Das heißt, wie viel Gleichzeitverbindung
und ihr dürft dann in der Datenbank stehen.
Ja, also sagen wir mal so, in der Praxis
das, wo dir häufig
das System platzt, ja, ich sag mal so,
also das ist also Erfahrungswert aus der Praxis,
das, wo du dann merkst, okay, ich hab hier ein Problem,
wo ich irgendwie mit der Architektur
anfangen muss, was zu machen, ist,
dass irgendwann
deine Slaves mit der Schreiblast nicht mehr klarkommen.
Also deine Replikas, ja.
Wenn du das nicht mehr hinkriegst,
wenn dein Replikations-Lag immer größer wird,
weil du das nicht mehr weggeschrieben bekommst,
was du an Schreiblast hast.
und Jochen unterhalten sich über die Programmiersprache Python
und dann lesen die halt aus dem anderen Teil.
Ja, aber was ist, wenn deine Slaves das nicht mehr
wegschreiben können? Das passiert.
Das ist so. Das ist halt bis an den Punkt,
wo es nicht mehr geht. Noch mehr Slaves?
Nein, die können es nicht mehr schnell genug
wegschreiben. Das ist vorbei.
An der Stelle, also ich meine, das ist heutzutage,
also wer kommt an diese Punkte? Also das ist halt,
ja, das ist nicht so häufig, denke ich.
Aber das kann schon passieren
und dann musst du schaben.
Wenn man den Rest dann vorher richtig gemacht hat,
die Frage wäre halt, wenn du das sowieso nicht schnell genug
wegschreiben kannst, dann musst du ja eh warten irgendwo.
Ja, und da hilft dann noch Kafka. Da hast du die Nachrichten
schön in einem Topic und holst sie dir später nochmal ab.
Die Frage ist natürlich, wie lange soll er drinbleiben, aber da brauchst du halt genug Worker.
Also diesen Prozess, den müsstest du dann gewährleisten können, aber auch da hast du Möglichkeiten.
Dann kannst du sagen, irgendwie bis zu so und so viel Speicher
soll vorgehalten werden oder so und so lange.
Und dann kannst du dir das wegschmeißen und du musst auch überlegen, brauche ich alles?
Brauche ich alles, alles?
Du hast halt eine Latenz dann, ne?
oder nicht nur Latenz.
Vielleicht hast du auch einen Datenverlust unter Umständen.
Aber die Frage ist, kann ich vielleicht Daten verlieren?
Ich meine, gerade im Bereich
von Zeitreihen ist es auch oft so, dass Daten
über einen gewissen Zeitraum hinweg
zusammengefasst werden und einfach irgendwie gemittelt werden.
Und dann ist das Problem,
worüber wir uns gerade streiten,
gar nicht mehr so schlimm. Aber das Problem ist
in dem Zeitpunkt schlimm, wenn du es auf einmal
in einer monolithischen Struktur vielleicht hast
und einzelne Services dadurch umkippen
und du hast es jetzt irgendwie so ein bisschen entlastet
und
dass das
Replikations-Lag, wie Jochen sehr schön
gesagt hat, das wächst und wächst.
Dann stoppst du halt eine gewisse Zeit lang mal den Schreibprozess
und hast dann meinetwegen ein Consumer-Lag
im Kafka, aber das kannst du ja irgendwie so zurechtschrauben,
dass es funktioniert, dass es deine Architektur verkraftet.
Aber das ist natürlich ein sehr, sehr,
und das muss man auch sagen, das ist ein
extrem spezielles Problem, welches echt
nicht jeder hat. Aber das ist ein Problem,
welches man bekämpfen kann.
IT-Geräte müssen denn da gegeben haben,
damit das ein Problem wird?
Keine Ahnung, das muss man schon ganz genau wissen
Kommt drauf an, wie du das machst, wenn du am Ende auch arbeitest
Ja, aber letztendlich
diese Art von Problemen hast du natürlich immer
Chris Künthopp
für Datenbank
der hat das mal irgendwie so schön genannt
es gibt ja im Grunde zwei unterschiedliche Arten von Datenbanken
es gibt halt die
OLTP, Online Transaction Processing
Datenbanken, das sind halt so die
wenn du jetzt auf einen Kaufen-Button klickst
die dann halt die Kauf-Transaktionen machen
und es gibt halt
OLAP, also Online
Logistical Processing, das ist also
ein Data Warehouse irgendwie und
er sagte das mal sehr schön, also wenn jetzt die Leute
irgendwas machen und du schreibst halt Sachen, also
OLTP ist zum Schreiben gedacht und OLAP eher
zum Lesen,
wenn die jetzt irgendwie die ganze Zeit
diese Geschichten generieren, dann also im Grunde
jede OLTP-Datenbank
hat in sich so ein Data Warehouse,
das raus möchte.
Das fand ich gerade ein sehr schönes Bild.
Ja, das ist halt so. Irgendwann willst du das halt
vielleicht da raustrennen.
Ja.
Aber spannend.
Dass es dann doch wieder um Datenbank ging
am Ende, bei der Frage, ob man
Microsoft an der Stelle macht.
Nein, das weiß ich ja gar nicht.
Es kann doch sein, dass die Datenhaltung,
da haben wir ja auch fast mit angefangen,
dass das Datenmodell, die Datenhaltung dafür sehr relevant ist.
Das ist einfach ein Problem.
Das Schöne ist, dass du quasi,
und das ist vielleicht eher der Knackpunkt,
das Schöne ist, dass man erkannt hat,
wir haben jetzt IoT-Daten, die ich vielleicht anders behandeln möchte,
als meine Nutzerdaten, die ich vielleicht anders
ablegen möchte.
und will ich das in einem Monolithen machen
oder erkenne ich, dass ich vielleicht dafür auch
einfach ein ganz, ganz anderes Know-how brauche.
Ich habe jetzt meinetwegen eine SQL Django Anwendung,
erkenne aber, dass das kein SQL Kontext
ist. Habe ich jetzt die Leute bei mir,
die sich mit dieser Art von Daten auskennen
oder brauche ich dafür vielleicht neue Daten?
Äh, sorry, neue Leute.
Und kriege ich diese neuen Leute in das bestehende
Team rein oder baue ich dafür ein
separates Team mit einem separaten Service auf,
der da einfach parallel läuft, weil
es halt besser ist in diesem Moment.
für das Problem, welches ich jetzt gerade versuche
zu lösen.
Ich meine, das ist jetzt
eine sehr, sehr schöne Wendung.
Aber das ist jetzt wirklich so ein Punkt,
wo man sieht, okay, jetzt auf einmal auf ganz
natürliche Weise macht es auf einmal Sinn,
darüber nachzudenken.
Ja, das kann
cost-efficient sein an der Stelle vielleicht.
Ja,
das ist halt mehrere Trade-offs.
Auch ein anderes Beispiel, nicht unbedingt
aus IoT, aber meinetwegen, du hast eine
Java-Anwendung und du möchtest
auf einmal eine Recommendation-Engine einbauen.
So, und dann erkennst du, okay,
das ist im Bereich Machine Learning,
das ist in Python mehr
vertreten, da hast du in Python eine größere Community,
hast vielleicht auch bessere Lösungen für,
dann suchst du dir ein Python-Team aus,
welches dir dafür ein Model baut, welches dir dafür
eine API bereitstellt. Kriegst du das
jetzt unbedingt in deinen Java-Monolithen
rein oder stellst du deinen Service-Indent nehmen?
Nimmst du den hoch, ne,
und versuchst du das vielleicht zu
integrieren. Das Problem, welches dann natürlich
aufkommt. Wenn du von Monolithen kommst,
ist, dass du von einer
konsistenten Struktur unter Umständen in eine
inkonsistente reinläufst. Ja, du kannst vielleicht gar nicht warten.
Du musst halt immer wieder auf das externe Team zugreifen.
Ja, es muss ja nicht mal ein externes Team sein. Das kann ja auch
ein neues internes Team sein.
Oder dann halt intern.
Klar, dieses Problem hast du dir jetzt geschaffen.
Das ist irgendwo ein selbst geschaffenes Problem.
Die Frage ist natürlich, komme ich da drum herum?
Wie ist der Trade-off? Also man hat einfach
effektiv immer einen Trade-off.
Die Frage ist immer, was ist das größere
Übel am Ende?
und was bringt mich jetzt schneller vorwärts?
Ja, insofern, also
würde ich auch so sagen, also ich denke auch, es gibt
gerade, also wenn man
halt ganz viele Leute hat
und das sehr große, dann
wird Microservices immer attraktiver.
Aber
auf der anderen Seite,
das ist halt irgendwie jetzt heutzutage
oft irgendwie so, das macht man halt so
und das ist halt jetzt irgendwie so.
Das ist so ein bisschen, da würde ich mir denken,
und so, na, ich weiß nicht.
Und ich meine, da gibt es ja auch
so einen schönen Begriff von
David Hanemeyer-Hansen,
den Rural Rails
Menschen, der sagte, der versuchte
den Monolith-Begriff
halt aufzuwerten, indem er dann noch ein Adjektiv
vorgestellt hat und nennt das
jetzt immer Majestic Monolith
sozusagen, weil
ich meine, wenn man jetzt halt ein kleines Team hat und
irgendwie etwas macht, was halt dann
ist halt das unter Umständen
halt deutlich effizienter, weil
auch einfach was bauen willst.
Genau.
Das ist ja auch sehr, sehr bekannt.
Wenn du jetzt gerade anfängst, dann fängst du
natürlich nicht mit Microservices an.
Du ziehst jetzt von null auf einen Code hoch,
hast ein kleines Team, vielleicht sogar ein großes Team,
das ist komplett egal, aber eigentlich
denkt man da erstmal monolithisch nach.
Einfach um vorwärts zu kommen, um wenig Komplexität
erstmal zu haben, weil die Komplexität, die kommt erst mit der Zeit.
Du bist halt jedes Mal noch einen neuen Klotz ans Bein irgendwie.
Und auch noch weitere Komplexität und
weitere Abhängigkeiten und Dependencies,
Wenn du halt einen neuen Service hast.
ist mitunter, auch dass die
nicht immer unbedingt leicht sind,
alle Prozesse zu parallelisieren.
Du kannst einen Monolithen sehr schwer teilweise
parallel laufen lassen
auf verschiedenen Instanzen. Du musst es
nicht immer unbedingt, aber
das ist bei einer großen, komplexen
Struktur mit vielen verschiedenen States
ein bisschen schwieriger und manchmal ist es
leichter, wenn du dir dann einzelne Teile da rausnimmst
und damit schon mal anfängst,
die auszulagern und dann findest
du vielleicht so ein Stückchen, wo es sich lohnen würde, das Teil
zu parallelisieren. Da würdest du dir vielleicht wünschen,
okay, ich will meinen Server jetzt nicht mehr RAM geben, eigentlich hätte ich
lieber einen weiteren dazugebucht für diesen Service, weil es vielleicht günstiger ist,
weil es vielleicht leichter zu machen ist. Dann ziehst du einfach parallel noch eine
Node hoch. Das wünscht man sich ja auch manchmal. Und das ist zum Beispiel, ein Microservice ist einfach
natürlicherweise leichter als ein Monolithen.
Wären wir ein bisschen positiver. Ist auch schön.
Ja, nicht negativ.
Es geht halt ein bisschen darum, wann das der Fall ist
und welcher Use Case dann wirklich
da für sorgen muss.
Ich denke auch, wenn man das dazu bringen will,
dass es ein
Ding, wie das helfen kann,
wenn man jetzt drüber nachdenkt,
ist halt auch so,
wenn man einen Microservice aufteilen will,
dann ist das ja auch ein sehr schöner Anlass,
darüber nachzudenken, wie sind denn eigentlich die
Schnittstellen und so, wie würde man dann
modularisieren wollen?
Also sozusagen, eigentlich würde man dann
anfangen und sagen, okay, machen wir es doch mal
Modularität, also keine Ahnung, ich habe jetzt irgendwie einen Moduliten und der notifiziert irgendwie User für irgendwas und jetzt möchte ich das da raustrennen, weil irgendwie dieses ganze Handling von unterschiedlichen Wegen, wie ich User notifiziere, ist halt problematisch und ich will das gerne da raustrennen.
dann wäre halt eine gute,
die schlechte Strategie wäre halt
irgendwie sozusagen
einen JSON oder HTTP-API
irgendwie jetzt vor die Funktion, die die Notifizierung
gemacht, zu klemmen und das
halt auf einen anderen, irgendwo anders hinzulegen
und dann rufen halt aus einem Monolith
die Sachen halt dann diese JSON-API auf
oder so. Das ist leider
halt das, was oft gemacht wird und das wird dann halt sehr schrecklich.
Aber, was man ja durchaus
tun könnte, ist halt, okay, man
versucht das jetzt sauber zu machen, man macht halt irgendwie ein
Interface, sagt, okay, so sehen
die Notifizierungen aus
irgendwie und die haben wir, das klassische
Ding, was halt immer benutzt wird und jetzt machen wir einfach
eine neue Implementation,
die halt über einen Microservice
geht und
wir können das halt auch hinterher
gucken, dann machen wir das ganz hinterher
in Feature-Flag oder so und sagen, okay, jetzt schicken wir mal
1% des Traffics halt irgendwie über den Microservice,
dann gucken wir an, wie sehen die Fehler hinterher
aus, sind die irgendwie mehr geworden oder hat das
genau das gleiche getan,
oder wir schicken es gar nicht raus, wir gucken einfach
nur, wir schicken es an beide,
wie verhält sich das denn unter
Last und so, und dann kann man das schön,
denke ich, machen, aber die Voraussetzung
ist eigentlich, dass man das halt schon ordentlich
modularisiert hat, dass man ordentlich Interfaces hat,
dass man das irgendwie schon halbwegs gut
strukturiert hat.
Und ja,
und das ist vielleicht auch so eine Möglichkeit, dann
an der Stelle nochmal irgendwie drüber nachzudenken, wie
modularisiert man eigentlich
ordentlich.
Ja, auf jeden Fall.
Auch um noch eine positive
und weitere Sachen aufzugreifen,
wenn man gerade in den Sinn kommt.
Oft ist es ja so, dass
ein Datensatz, eine Row,
sehr viele verschiedene Prozesse
durchläuft, um
in die Datenbank zu kommen.
Die wird von verschiedenen Prozessen genutzt,
manchmal transformiert, also die wird sehr, sehr oft
durchgereicht.
Das fiel mir jetzt gerade ein,
als Jochen gesprochen hat, wenn du das
jetzt auf einmal anfängst, den Microservices aufzuteilen,
dann musst du dir natürlich überlegen,
okay, wie gestalte ich jetzt den Weg
von Anfang bis zum Ende durch.
Und
du bekommst auf einmal wesentlich mehr Möglichkeiten.
Also üblicherweise ist es ja so,
dass dieser Prozess in irgendeiner Form
sehr, sehr synchron ist.
Also geht von A nach B. Und im Prinzip
wartet der Client darauf, dass der hinten angekommen ist.
So wird es halt sehr oft
strukturiert.
Oder die Anwendung wartet auf eine Antwort,
die sie nicht unbedingt braucht.
Und in einer Microservice-Welt kannst du
eben sehr, sehr schön darüber überlegen,
wie Kommunizieren-Services allgemein miteinander.
Und auf einmal stellt man eben fest,
dass sie überhaupt nicht synchron miteinander kommunizieren müssen,
sondern zum Beispiel auch über Queues und Topics.
Und dann schickst du da ein Event hin
und dann ist das so ein Write-Only-Ding.
Dann schicke ich diesen einen Datensatz an diesen Endpunkt,
der schreibt das Richtung Topic
und von diesem Topic kann das dann
von verschiedenen Microservices gleichzeitig konsumiert werden,
ohne dass ich jetzt irgendwie
ein Async bei mir im Code einbauen musste,
um das darzustellen.
Und
der Nutzer, der kann sofort
weitermachen. Der muss nicht unbedingt auf die
Antwort warten, wenn das ein Write-Only-Prozess ist.
Auch ein Vorteil.
Oder auch sehr schön teilweise
zu designen.
Ja,
wobei ich denken würde, also die
Voraussetzung wäre, dass man das halt erstmal intern gemacht hat,
dass man erstmal intern irgendwie so eine Art
Service-Bus hat und
dann kann man das halt auch
vielleicht nach außen verlagern, aber
Ja, also ich meine, das ist halt auch sowas,
ja,
wo man dann vielleicht mal drüber nachdenken kann,
wie strukturiert man die Applikationen
eigentlich so, dass das halt irgendwie
so funktioniert.
Ja, weil,
ja.
Es ist halt saukomplex, ne? Also das muss man halt
einfach sagen.
Braucht man diesen Service-Bus, also diesen Message-Queue,
oder diesen Message-Booker dann halt, und wenn man den halt hat,
braucht man ihn, will man ihn.
Ja, also,
also, weil das ist ja auch die Independence-City,
und Jochen unterhalten sich über die Programmiersprache Python
und die Programmiersprache Python.
mehr, die wir in einer Anwendung
einbauen.
Du kannst ja auch in die Anwendung einbauen.
Ja, aber ist das immer so geil?
Ja, also ich würde sagen, das ist halt so ein bisschen
die Voraussetzung dafür, dass man das überhaupt dann
auftrennen kann, weil
ich kenne,
das ist halt die Frage, also ich kenne das halt so, dass man das intern
in der Applikation vor allen Dingen macht.
Also das ist halt dann auch teils, die Dinge, die man
tut, teilt man halt auch in
Commands, Events und
vielleicht Dokumente gibt es halt auch Da gibt es den ganzen Enterprise Service wo es irgendwie wei ich nicht irgendwas Patterns seit die Frage ob man das braucht keine Ahnung Ich habe letztens mich da so ein bisschen mit besch weil ich mich da einfach mal interessiert hat
wie man denn sowas baut.
Da gibt es ja auch, das buche ich irgendwie auch in jeder
Episode irgendwie, oh,
hier liegt es rum, Architecture Patterns
bloß Python. Die bauen halt,
die fangen halt an und mit irgendwie auch,
das ist auch, glaube ich, ein Allokations,
also das, womit die sich beschäftigen,
ist halt sozusagen
Bestellungen
irgendwelchen Lagerbeständen zuordnen sozusagen
und die fangen halt an, naiv mit so einer Flask-Applikation
und bauen das dann halt immer weiter um, sodass
am Schluss bleibt halt auch so ein Service-Bus
übrig und das könnte
man dann theoretisch auch in Microservices
dann halt alles dann auslagern,
was man da so tut. Aber
das eigentlich, würde ich sagen, so ein bisschen
die Voraussetzung dafür, dass man das überhaupt kann, ist,
dass man es intern schon so macht.
Oder ich weiß es nicht genau,
aber wenn man das jetzt von außen
dran, aber
nochmal zu dem, warum macht man das überhaupt
mit diesen Queues und so, denke ich, der Vorteil
ist halt einfach, wenn du
HTTP oder JSON-RPs hast, dann machst du halt
jedes Mal zum Beispiel so ein TLS-Handshake oder
sowas, das ist natürlich extrem
also es verbraucht immer CPU
Ja, du kannst halt ein Socket aufhaben
oder so. Ja, wie
bei HTTP? Nein, nein
einfach kein HTTP, sondern du hast halt
ein Socket auf, irgendwo in der Verbindung
Ja, okay, und wie sicherst du die
irgendwie ab und welchen Standard
wie machst du das? Keine Ahnung, also wie
WebSocket genau und drunter funktioniert, aber der hat ja am Anfang
beispielsweise auch seinen Handshake, aber der
bleibt halt offen, der muss dann nicht jedes Mal den neuen Handshake machen, oder?
Ja, bei HTTP geht das
nicht. Bei HTTP
gibt es immer nur Request-Response, das war auch so.
Genau, ja, aber ich kann jetzt ein Socket auch machen, wenn ich
jetzt auch so ein Queue-Ding habe,
beispielsweise. Genau, das ist der Vorteil bei der Queue,
da steht deine Verbindung und die bleibt halt
und du kannst halt mehr Sachen drüber schicken, genau. Das ist halt der Riesenvorteil.
Ja genau, aber ich verstehe jetzt nicht, wo der Unterschied ist.
Also warum brauche ich dafür einen Microservice?
Also das hat für mich jetzt nicht so viel miteinander zu tun.
Nee, aber die Frage ist jetzt, wenn du jetzt
Microservices hast, wie
vermindest du die miteinander?
Oder vielleicht habe ich die Frage einfach nicht verstanden.
Ich dachte, das wäre die Frage, warum nimmt man denn da so einen Bus
oder so eine Queue? Warum nimmt man nicht einfach
HTT oder so? Nee, also die Frage wäre,
wenn ich jetzt so einen Bus nehme, also warum mache ich das
bei Microservice? Also warum mache ich das nicht trotzdem in meinem
Monolithen oder so? Ja, genau, da würde ich sagen,
so würde ich anfangen.
Ich würde es so anfangen, dass man das zuerst so baut,
und Jochen unterhalten sich über die Programmiersprache Python
Das brauchst du ja nicht.
Wenn du es intern machst, brauchst du das ja nicht. Das ist einfach nur ein Funktionsaufruf.
Da ist eine Queue. Einfach zum Beispiel
in Python ist das halt einfach nur eine Queue-Modell.
Also
von Queue über Queue sozusagen oder so.
Und dann machst du halt, solange irgendwas in der Queue
drin ist, rufst du Funktionen auf.
Das war's. Das ist auch nicht...
Kann man durchaus machen.
Habe ich zum ersten Mal von tatsächlich.
Das ist so ein Python-Ding.
Genau. Queue.
Es hat aber nichts mit Netzwerkverbindung oder so.
Nein, nein, nein. Genau.
Ist das dann einfach irgendwie so ein State, der
existiert global und
Ja, genau.
Cool.
Man kann diese Muster ja durchaus auch
einfach so, deswegen meine ich
also, wie man das
die Struktur aufteilt und die Architektur von
dem Ding baut, das kann man
ja auch schon vorher richtig machen quasi
und dann kann man es halt auch aufteilen
oder es ist sehr einfach das aufzuteilen, während wenn man jetzt
Moduliten hat und das ist tatsächlich
ich fürchte,
das ist halt das, was ich in der Praxis oft sehe.
Ja, dass Leute halt eigentlich
in so einer Situation sind,
sie haben einen Big Ball of Mud,
der halt irgendwie kompliziert und komisch
ist und wo sie nicht weiterkommen.
Und jetzt suchen sie nach irgendeiner Lösung für
dieses Problem. Und dann kommen sie auf
Microsoft und stürzen sich auf Microsoft und sagen so
Ja, okay. Ich hänge weiter
vorne. Ich will wissen,
was passiert denn mit dieser Queue, wenn der Service
eine Downtime hat? Nein, das ist einfach
nur ein Prozess. Das ist einfach ein Prozess, ne?
Also die anderen funktionieren irgendwie weiter,
da ist dann irgendwie, weiß ich nicht, läuft in einer separaten
in einem gleichen...
Alles in einem Thread im gleichen Prozess.
Das Einzige,
was es halt sozusagen bringt, ist,
dass ich die Sachen halt sauber
voneinander getrennt habe. Ich mache halt auch
immer, wenn ich irgendwas schreiben möchte,
mache ich halt ein Command und
ich habe halt dann meine Event-Händler, die alles mögliche machen.
So zum Beispiel habe ich halt einen Event-Händler,
der schickt das Event dann auf den Websocket raus
für irgendeinen Client, einen anderen Event-Händler,
der tritt
irgendwie einen Prozess los, einen anderen
so. Und das kann ich ja,
aber das ist alles nur Funktionsaufrufe, die
nacheinander passieren. Das ist aber alles im gleichen Prozess.
Okay, also für mich so zum
Verständnis. Vielleicht ergibt sich ja dann so
die Möglichkeit, dass wir alle erkennen, okay, wir brauchen unbedingt
Kafka.
Yay!
Nein, aber nur, damit ich das
verstehe, nehmen wir jetzt mal an, wir sind jetzt in der Django-Anwendung
unterwegs und wir schicken
einen Request rein. So, und der kommt jetzt in die
Queue. Die erste Frage ist, was
passiert beim User? Bekommt er sofort die Antwort zurück
oder wartet er darauf, dass der Prozess von
und Q komplett verarbeitet wurde.
Der bekommt sofort, also da ist es so,
der bekommt sofort
eine Antwort zurück
und
sozusagen die Event-Händler bearbeiten
das dann halt später weiter.
Die bearbeiten das später weiter, das heißt, wenn jetzt der nächste User
kurz danach, bevor das alles abgearbeitet
wurde, wieder ein Request reinpickt.
Was man schon zurückbekommt, ist,
dass das Command durchgegangen ist.
Also sozusagen man wartet bis,
also ein Request kommt rein
und dann erzeugt
und
Events abgearbeitet wurden.
Wenn das ganze Ding fresh ist, ist es vorbei.
Dann ist es weg.
Das heißt, wir haben jetzt nicht irgendwie...
Okay. Ja gut, aber wenn...
Wir brauchen
irgendwas. Also wenn ich mich
jetzt dafür entscheiden würde, dass es unglaublich wichtig ist,
weil dieser Prozess vielleicht eine Minute dauert,
weil der irgendwie verschiedene Stages durchläuft.
Es gibt Gründe. Keine Ahnung, du hast
eine unglaublich langsame API irgendwo dranhängen.
Die braucht einfach ewig lang zum Antworten,
aber der Nutzer soll nicht so lange auf diese API
und Jochen unterhalten sich über die Programmiersprache Python
Also ich weiß nicht, ob man damit wirklich das Problem löst, aber erstmal wird es dann so sein, dass der Prozess weg ist und dass man dort, wenn man diesen Lösungsvorschlag...
Wenn du es weggeschrieben hast, dann hast du zwar noch nicht die Queue durch, aber du hast ja den Daten, dass der gekommen ist.
Aber das macht natürlich den Prozess dann minimal langsamer, weil ich erst was in die Datenbank schreiben muss.
Das dauert nicht lang.
Ja, aber vielleicht doch zu lang.
Na, glaube ich nicht.
Also wenn du irgendwie...
Ich habe gerade 30 Millionen Nutzer, die da draufschreiben.
Ja gut, aber das soll ja nicht so lange dauern.
Aber wie gesagt, ich fühle mich dabei dann so ein bisschen unwohl, dass ich das innerhalb dieses Python-Prozesses habe, weil ich eben sicher gehen muss, dass ich diese Information nicht verliere, wenn ich sie denn nicht verlieren muss. Und da hilft dann natürlich irgendwie so ein Sonderprozess.
Ich würde ja sagen, man kann das ja auch mal, aber ich meine,
ja, also
ja,
ich würde eher denken, also wie man das dann macht,
ist letztlich eigentlich, ist ja dann keine Architekturfrage mehr,
ob man dann auch wieder einen Kafka verwendet oder Rabbit und Q oder
irgendwas anderes ist ja letztlich, fand ich einfach nur interessant gerade.
Ja.
Also, wie gesagt, das war mir jetzt neu.
Ich meine, da tun sich viele Fragen auf, die mit dem eigentlichen Thema nichts zu tun haben.
Also wie gehe ich mit Exception um?
Azure Service Bus hat zum Beispiel einen Exception-Deadletter-Queue.
Das muss ich mir natürlich relativ umständlich dann da reinbauen.
Also ich brauche ein vergleichsweise umständlicheres Fehlerhandling,
wenn ich das dann auch irgendwie über diese Queues abbauen möchte.
Das kann ich mir natürlich anders ein bisschen leichter machen.
Du brauchst ja für jeden Microservice eigentlich so ein eigenes Fehlerhandling auch.
Ja, ein bisschen.
also wenn du, ja,
oder ein Standard,
wie man es dann am Ende sieht.
Also klar, das bringt einen dann wieder zurück
zu den Microservices und
wieder zu einem generellen Problem
und das Fehlerhandling entscheidet dann der Service
selbst oder das Team in dem Fall.
Also ich meine, ja, beim Konsumenten
meinte ich jetzt,
wenn du eh die Dependency hast,
dass du irgendwie einen hast, der das konsumieren will und dann halt Sachen macht,
gut, das Fehlerhandling brauchst du sowieso,
je nachdem, was da drinsteckt, aber du hast natürlich
meiner Meinung nach, wenn du
Microservices hast du eine größere
Anzahl an Fehlerquellen.
Es wird halt viel komplizierter. Du musst dich halt
über all diese Dinge Gedanken machen im einzelnen Prozess.
Musst du das nicht. Da ist das alles egal.
Da machst du halt ganz normales Exception Handling
und da brauchst du all diese Dinge nicht.
Was passiert denn mit Retry und gucken?
Das hast du auch da und lebst du noch.
War der nur kurz weg? War die Verbindung weg?
War der Server weg?
Ja, aber ich meine,
wenn sich darum jeder Service selbst kümmern muss,
dann ist es natürlich auch wieder nicht so kompliziert.
Also wenn ich immer nur auf meinen Punkt gucke
und ich schaue, welche Möglichkeiten
gibt es. Also im gesamten Prozess gibt es immer
mehr Fehlerpunkte. Also du glaubst einfach
eben, was dann da in deiner Queue steht.
Ich beispielsweise.
Ja, das muss natürlich validiert werden.
Und wenn da was Falsches drinsteht, dann weiß ich, dass irgendwas
vorher falsch war. Klar, diese Art von
D-Bagging ist schon super schwer.
Weißt du, dass da was Falsches drinsteht?
Also, weiß ich nicht. Wenn wir jetzt
zum Beispiel, wir erwarten
jetzt ein bestimmtes
JSON in deiner
Queue. Und dieses JSON entspricht
nicht dem richtigen Format, dann weiß ich, dass da vorher irgendwas
falsch war.
Das ist jetzt
so ein sehr, sehr einfacher Fehler. Es kann natürlich sein,
dass ein falscher Nutzer
in deinem Datensatz drin steht und dein Service kann das
nicht überprüfen. Aber da sind wir dann wieder
bei der Herausforderung
des Datenmanagements. Also wie gestalte ich
das richtig? Wie gestalte ich das gut?
Wie kann ich solche Sachen vermeiden? Wie synke
ich vielleicht meine verschiedenen Datenbanken?
Das ist dann wieder so ein eigenes Problemchen.
oder großen Problemen.
Ja, aber das ist wie bei Dependencies.
Ja, wie sagt man so schön,
irgendein Tod muss man sterben.
Das ist halt leider so.
Aber die Frage ist halt,
ich glaube, das hat halt so ein Overhead,
wenn man mit vielen, vielen Microstores arbeitet
und den muss man irgendwie hinhören können
und den trade-offen gegen den Overhead
von, ist das jetzt kompliziert
oder
die Sachen weiterzubauen
in diesem Monolithen, weil halt dann es schwierig
wird, das zu beherrschen und das ist vielleicht so ein bisschen
Ja, es ist immer so ein bisschen trickreich.
Aber vielleicht, ja, ich frage mich immer, ob das jetzt wirklich schlimm ist.
Klar, als Unternehmen möchte ich natürlich so viel wie möglich wissen,
aber als einzelner Entwickler, wie ich jetzt einer bin,
interessiert mich das eigentlich gar nicht so.
Also es ist mir eigentlich relativ egal,
ob ich jetzt in einem Monolithen entwickle oder in einem Microservice.
Das ist auch so das, was meine persönliche Erfahrung ist.
Ich komme in ein Projekt rein, wo meinetwegen Microservices drin sind
und dann bin ich damit total fein.
Dann gucke ich auf meine Sachen, klar, ich habe mehr Abstimmungen
mit anderen Leuten, aber am Ende
ist das, das kann ich jetzt,
ist jetzt auch nur eine gefühlte Sache,
sozusagen so kompliziert,
wie wir hier gerade reden,
ist das in der Realität gar nicht.
Also
wenn du jetzt überlegst, ich will jetzt
zu Microservices rüber migrieren, ich habe einen
funktionierenden Monolithen, will ich das eigentlich,
klar, für dich
ist das super kompliziert,
aber für mich, der als Neuer,
vielleicht in ein Projekt reinkommt, noch nicht alles
kennt, noch nicht weiß, wie es zu diesem Punkt kam,
ist der Umstand
Microservice gar nicht mal so das große Thema.
Und man lernt halt
wirklich auch viele
Dinge, weil man sich mit Sachen
intensiver auseinandersetzen muss, mit denen man sich vorher
nicht so wirklich intensiv auseinandergesetzt hat,
wie zum Beispiel Logging, wie zum Beispiel Metric Monitoring,
wie zum Beispiel...
Ja, aber das kann auch wieder eine Gefahr sein.
Ja, okay, komm.
Technischen Appiel, aber für den Kunden bringt das ja jetzt erstmal nichts.
Aber gut, ich verstehe schon.
Das, was ich vielleicht finde, ist, dass wir relativ kompliziert wurden,
habe ich so das Gefühl.
Aber der Sachverhalt an sich, der ist gefühlt gar nicht so komplex.
Und die Probleme, die wir aufgezählt haben, die sind schon da,
aber die müssen nicht immer ein Problem sein.
Ich bin da mal ein bisschen neben, was Jochen gesagt hat.
Die Frage ist, wann braucht man das überhaupt?
Du brauchst halt wirklich einen Fall, wo du dich auskennst und wirklich weißt,
Braustest, das kannst du nicht anders lösen,
bevor du überhaupt die Entscheidung treffen
würdest, da machen wir jetzt ein Microsoft-Draus, weil ich glaube,
vorher muss man erstmal andere Sachen
korrigieren oder so. Ja, also
ich meine, das klingt
jetzt alles schrecklich oder klingt jetzt, wenn ich
ähm, alter Sack.
Irgendwie, ich habe aber früher,
wenn Leute sowas gesagt haben, war ich immer so, ja, ja.
Aber tatsächlich, so Erfahrungen
zu, also oft ist es irgendwie,
dass, also ich
habe das Gefühl, dass das Problem in der
Praxis oft
Kompetenz.
Da weiß ich nicht, ob Leute das irgendwie hinkriegen oder nicht.
Kann man das essen?
Und die Sachen
selber sind gar nicht so kompliziert. Da würde ich
vollkommen recht geben.
Ich würde es so ausdrücken,
es gibt einen
nicht unerheblichen handwerklichen Teil
bei dieser ganzen Geschichte und der ist
gar nicht so gut in theoretischer,
also sagen wir so, das ist halt nicht so viel,
da ist gar nicht so viel Theorie.
Vielleicht die falsche Analogie,
und Jochen unterhalten sich über die Programmiersprache Python
Ja, das ist halt
ein Problem, mit dem Organisationen
dann auch oft konfrontiert sind
und das nicht
so richtig gelöst kriegen. Und dann
probiert man das halt mit so komplizierten Geschichten irgendwie.
Also ja, okay, aber
eigentlich... Und das Dumme ist, da gibt es
halt auch keinen einfachen Weg raus.
Die Lösung dafür ist halt,
weiß ich nicht, Leute schulen oder
abwarten, bis sie so gut geworden sind, dass das dann
funktioniert oder so viele Sachen kaputt gegangen
sind, dass sie dann irgendwann gemerkt haben, wie es richtig funktioniert.
und das ist halt dann vielleicht so ein Zeithorizont
mehrere Jahre oder so.
Und dann ist noch nicht mal sichergestellt,
dass es dann hinterher wirklich funktioniert.
Sondern da kann man nur die Hoffnung drauf haben,
dass es dann vielleicht funktioniert. Das ist ja
ganz schrecklich. Wenn ich jetzt ein Projekt habe,
wo meine Karriere dann hängt, ob das jetzt gut wird oder
nicht, das kann mir ja niemandem erzählen.
Und dann versuchen wir halt
irgendwie andere Sachen um das. Aber das ist halt
alles nur...
Ohne mal zu der Barth-Analogie zurückzukommen, dann hast du
halt entweder eine Mosaikwand oder
du klebst halt alles mit einem Kleber drüber,
und dann hast du eine glatte Wand, das ist auch, glaube ich, modisch gerade.
Ich glaube, das ist nicht so schlimm.
Ja, ich weiß nicht.
Wichtig ist, was kannst du in dem Bad machen?
Kannst du da dich duschen zum Beispiel?
Ja, ja, aber ich glaube, das ist halt tatsächlich gar nicht so einfach,
das hinzukriegen, dass es wirklich gut funktioniert.
Das ist halt irgendwie schwierig.
Ja, okay.
Die Handwerksgrund ist natürlich schon sehr wichtig.
Ja, oder ich weiß nicht, vielleicht ist das auch ein blödes Beispiel,
oder Musikinstrument spielen ist vielleicht auch theoretisch gar nicht so,
Gitarre gibt nicht so viele Seiten,
aber trotzdem irgendwie muss man lange üben
bevor das irgendwie funktioniert und manche
Bereiche, vielleicht nicht alle, aber manche Bereiche beim Programmieren
sind halt auch so, sozusagen dieser Modellisierungsbereich
da habe ich das Gefühl
Es gibt schon die kleinen Kinderkunden, die relativ viel
Kraft machen und nennen das so
Naja
Okay
Haben wir eine Quintessenz gefunden damit?
Es kommt drauf an
Genau, das gibt es auch
hat jemand schön
die Lösung aller IT-Probleme
irgendwie so ein O'Reilly-Buch, wo drauf steht
It Depends.
Absolut.
Ich bleibe
dabei, es ist prinzipiell cool erstmal.
Das muss man halt sagen. Es klingt
natürlich cooler, auch wenn das natürlich
niemals ein Entscheidungspunkt sein sollte
und auch sehr, sehr subjektiv ist.
Aber ich glaube, am Ende kommt es immer einfach drauf an,
ob man es haben will, ob man es braucht.
Da haben wir wieder, es ist ein gutes Sales-Argument.
Wir machen Microservices, das ist wunderbar.
Das klingt erstmal immer gut.
Das ist auf jeden Fall ein gutes Argument,
wenn man Geld für mich verdienen kann.
Rein technisch natürlich immer schwer.
Da sind wir wieder bei den Dingen,
wo die Infra sagt, da bewegen wir uns gar nicht,
sagt dann halt,
wir müssen nichts neu durchsortieren,
wie der ein bisschen Sales und Marketing machen kann.
Ja, aber das ist halt so ein bisschen,
das ist halt auch das gleiche Problem wie,
ich versuche immer das noch auf den Punkt zu kriegen,
ich kriege es nicht so richtig gut formuliert,
das ist halt so Probleme, die schwer lösbar sind,
die produzieren im Grunde irgendwie
so Scheinlösungen.
Gesundheit ist schwierig
wenn man eine schwere Krankheit
bekommt oder so, dann hat man ein Problem, das sehr schwer
lösbar ist, wo man nicht viel machen kann
das produziert halt den ganzen Markt von
Pseudo-Snack-Oil, weiß ich nicht
Quacksalbern
Computersicherheit, schwieriges Problem
auch da
entsteht so eine Branche von
etwas halbwegs
zielrichtigen, weiß ich nicht genau
manche sind gut, manche sind nicht so gut
Also habe ich schon gesagt, dass du ja durch eine Firma betreibende Organenergie auf Telefon anrufen kannst und ich schicke dir dann positive Energie durch das Universum zurück.
Ja, also jetzt musst du nur noch das entsprechende Problem suchen, was die Leute gerne gelöst haben.
Ja, Stundenbesatz aufzählen oder halt so eine 0109-Hängernummer oder sowas.
Ja.
Wir schweifen schon wieder ab.
Ja, und da muss man halt, ich meine, ja, und es gibt dann halt so Dinge, die sind so, ja, vielleicht schon sinnvoll, aber man kann sie halt auch so benutzen.
das ist halt wie, weiß ich nicht, gibt es die ganzen
Big Data Blockchain, weiß ich nicht
und Microservices ist halt auch irgendwie
so ein bisschen, irgendwie zumindest
irgendwie man hatte so das Gefühl, das wird immer so
als Lösung verkauft für Sachen, die schwer sind
ja
aber ich will gar nicht sagen, dass das jetzt
irgendwie Unsinn wäre oder so, sondern
nee, es gibt da schon durchaus
und das ist auch vielleicht eine gute Idee
Sie machen nicht immer alles leichter
Sie machen manchmal auch Sachen schwerer
aber Sie machen dabei andere Sachen leichter, aber nicht alles
alles.
Man hat einfach wirklich diesen,
also das ist, ich glaube, das ist auch immer
ganz wichtig zu sagen dabei, man hat halt
wirklich einen Trade-off und der ist nicht ohne, der ist
niemals ohne. Ja, vielleicht wollte mal jemand fragen, der sich damit
auskennt, bevor man
zum Beispiel mehr Änderungen macht.
Genau, ja.
Ja, keine Ahnung.
Wir hätten, also ich hätte auch noch
Pics, also wir können auch noch, ich weiß nicht genau,
wie es aussieht, wollen wir noch irgendwie,
gibt es noch irgendwie Themen oder haben wir schon
alles gesagt, was wir sagen? Haben wir alles gesagt von Microservices?
Fällt euch noch was ein?
Bestimmt nicht
Ich habe noch eine andere Frage, aber das hat nichts mit dem Pix zu tun
aber ist an Jochen
Aber haben wir noch irgendwas zu Microservices?
Sonst würden wir das Thema einfach zumachen
No, machen wir es so
Du hast irgendwas mit File-Benchmarks gemacht, Jochen, was waren das?
Ah, okay
Ja, also das ist etwas
das mich ja auch
eine ganze Zeit lang umtreibt
Sollen wir das beim nächsten Mal sonst erzählen?
Nö, wir können das gerne
kurz darauf eingehen
Ja, also
die Frage, die mich beschäftigt hat, ist
weil ich würde ja gerne
ins
Hosting-Geschäft einsteigen
Ja, ganz sicher
Ja, genau
und eine Frage, die mich dann beschäftigt hat
also gerade Podcast-Hosting, ich meine, wir betreiben
unsere eigene Podcast-Hosting
tatsächlich und
da sind etwas spezielle Anforderungen
die Files sind groß
Ja, Files dürfen schnell Files dürfen
und genau, und die Frage ist jetzt, okay, wir können...
Mit Python oder nicht? Ja, mich ärgert, dass wir da so eine Abhängigkeit haben, wir machen das über
ein CDN, über CloudFront und
das ist auch teuer irgendwie.
Erstaunlich teuer. Und
die Frage wäre, kann man das nicht selber machen, weil wenn man irgendwie... Ich miete ja sowieso
Server, auf denen ich den Hum deploye und da ist der Traffic
frei, warum kann man dann nicht die Server auch mit
ausliefern, mit Minio oder sowas. Ja, oder einfach
im einfachsten Fall ein statischer Web-Server, das geht natürlich, das Problem
dabei ist halt,
naja, also solche Dinge wie
Authentifizierung und so ist halt schwierig.
Wie ist das denn halt? Also ich meine, das ist natürlich
viele würden sagen,
das ist doch egal, wenn da jemand
deine, also hier geht es um den Fall
zum Beispiel, man editiert halt irgendwie
eine neue Podcast-Episode zum Beispiel
und dann sollte das ja, sollte zum Beispiel
die Audio-Inhalte nicht für jeden sofort
verfügbar sein, sondern erst, wenn das frei veröffentlicht
ist, ja, sozusagen. Also nur wenn man
authentifiziert ist. Wie macht man das denn?
Das geht ja quasi gar nicht, wenn ich
auf dem statischen Files-Server hätte, dann sobald die Files
verfügbar sind.
Von dem Link dann, ja.
Ist jetzt ein Detailproblem eigentlich,
aber mir geht's, also wie wäre das denn,
wenn ich das für andere machen wollen
würde? Die haben ja eventuell auch noch
irgendwie so Anwendungsfälle, wo
sie Sachen vielleicht nur nicht öffentlich
veröffentlichen wollen, also eine ausgewählte
Gruppe von Leuten.
Also wie soll denn Authentifizierung funktionieren?
Dann gibt's dann halt diese ganzen Geschichten mit,
man schickt halt
sozusagen ein Request an den
Fileserver, und da ist halt irgendwie ein Cookie gesetzt oder halt ein Token oder da ist irgendwas in der URL, was signiert ist, und dann der fragt nochmal einen anderen Service und guckt halt nach, ist der jetzt authentifiziert?
Fragt der Microservice?
Bitte?
Fragt der Microservice?
Ja, genau, da hat man dann auch schon so eine Art Microservice oder man schickt halt den Request zum Applikationsserver, der Applikationsserver schickt aber nicht die File-Response zurück, sondern er schickt nur eine Response zurück, wo ein Header gesetzt ist, in dem drin steht, ja, dieses File darf ausgeliefert werden, und dann der Reverse-Proxy vorne dran tauscht dann halt diese Response, die echte File-Response aus.
Engine X macht? Ja, genau.
Das gibt's, wie heißt das?
X-Send-File?
Irgendwie so. Ja, genau.
Also das gibt's alles
sehr hässlich und funktioniert auch alles nicht so
richtig gut. Und deswegen wäre es auch viel schöner,
wenn man das direkt über einen Applikationsserver ausliefern würde.
Und ich dachte eigentlich, geht doch. Django Static
Files quasi. Ja,
das gibt's schon. Also wenn
die Assets gemeint sind, also sowas wie
CSS und JavaScript und so,
da gibt's schon was für.
Nicht die Assets, sondern wirklich dann halt mit
Einzel-Single-Permission und
File-Off-Check-Level. Genau, da gibt es nichts.
Und das wäre aber interessant. Und eigentlich
dachte ich irgendwie, das müsste mit Python auch gehen.
Python-Icing-AO, da gibt es ja auch alles irgendwie.
Und
UV-Loop
ist ja auch sehr schnell und so.
Und das müsste man doch eigentlich
machen können und es geht auch.
Dein Benchmark hat festgestellt, Keddy ist viel schneller.
Ja, genau.
Dann habe ich irgendwie jetzt ein anderes,
weil ich mich interessiere für Kochen und so.
Dann gibt es so einen Rezeptmanager, Mili.
kann man sich auch mal angucken, ist ja nett.
Und das habe ich dann irgendwie auf meiner Infrastruktur deployed
und da gibt es auch viele Bilder und so.
Und dann dachte ich, ah, das mache ich bei Ubicorn, weil
wozu haben die dann noch extra
einen Caddy laufen?
Und dann habe ich dann auch in ihrem Discord Bescheid gesagt,
so, ja, warum macht ihr denn
da nochmal ein Caddy zusätzlich?
Das ist doch Quatsch, ihr macht das doch einfach über den Ubicorn.
Und dann hieß es, ja, aber wir haben die Erfahrung gemacht,
das ist dann irgendwie schneller und irgendwie sonst ist es langsam.
Der so, das kann gar nicht sein.
Dann muss ich mal einen Matchmark machen.
Ich hab ein Benchmark gemacht und gesehen,
stimmt doch, sie haben recht, ich liege falsch.
Auf jeden Fall
tatsächlich Nginx Caddy
viel schneller als
Ubicorn, beziehungsweise die
Fallresponsion von Starlet,
was halt unter FastAPI unterliegt.
Und das ist halt FastAPI Backend.
Ja, keine Ahnung, wo ans liegt,
ich weiß es nicht. Also sagen wir so, es ist immer noch schnell genug
für Gigabit Ethernet
Interface, aber wenn es
also 10 Gigabit schafft man damit nicht.
Und Caddy und
Nginx schaffen das schon. Also
irgendwas ist da nicht richtig. Ich weiß aber nicht was.
Kommen wir wieder zu UV-Con macht das
ganze Jahr oder UV-Loop ist halt Zeiten
vor allen Dingen und denken wir, das kompiliert ja nach 10,
das muss doch eigentlich schnell sein. Keine Ahnung.
Also eine mögliche
Grundführung, warum das
so ist, den ich
denke, das könnte es sein, ist
es liegt daran, dass
irgendwie Caddy und Nginx
irgendeine Art von Serial-Copy-TCP verwenden.
wo halt nicht nochmal durch den User-Space kopiert werden muss
die Daten und das macht
Ubiquon halt nicht, sondern
weil das kann es halt noch nicht, also es gibt
ein Pull-Request, ist aber noch nicht durch
das heißt, da wird immer alles nochmal kopiert
also es wird vom Filesystem, vom Hauptspeicher
von der Anwendung kopiert und dann nochmal
in den Netzwerkspeicher und dann erst raus
das ist natürlich viel ineffizienter
als wenn man es halt, als wenn der Colonel direkt
mal mal den Pull-Request kann, mal mal cherrypicken
mal gucken, ob dann...
Also das könnte noch ein Unterschied sein
das wäre dann halt ein relativ langweiliger Grund
und dann muss man sagen, ja gut,
und das wäre halt so, ich weiß nicht, ob das dann mit Minio auch einfach so geht,
wenn man die Files nicht im Filesystem liegen hat,
sondern halt irgendwo anders, was man ja vielleicht will
heutzutage, dann geht es vielleicht
alles nicht mehr, aber dann ging es
auch mit Nginx und so nicht mehr,
auch mit Kelly nicht,
weil die könnte man nicht sein File einfach verwenden,
das geht halt nicht, das geht halt nur, wenn es
tatsächlich ein File im Filesystem ist, glaube ich.
Auch da wäre interessant, wenn sich das jemand,
wenn jemand mir damit Bescheid sagen könnte, der sich damit auskennt,
ob das so ist oder nicht.
Hallo, Herr Paisenbocker.
Genau.
Ja, genau.
Damit habe ich mich so ein bisschen beschäftigt.
Und ja,
auf jeden Fall scheint es so zu sein, dass
Caddy viel effizienter ist als
Ubiquon oder Ubiloop
beim serbischen Pals.
Und ich weiß nicht warum. Keine Ahnung.
Aber es war interessant. Mal gucken, ob ich das irgendwie rauskriege.
Ja, das werden wir euch
weiter informieren irgendwann am Ende von irgendeiner weiteren
Zukunftsfolge. Also hört alle unsere Folgen mal bis ganz
zum Ende durch. Selbst wenn es langweilig wird.
Nicht schlafen.
Ja.
Dann pickt ihr Woche, Jochen.
Genau, picken würde ich
diesmal tatsächlich
Wo habe ich das gesehen?
Ich weiß gar nicht mehr genau. Das Ding nennt sich
bpytop
Ah, da.
Ich habe es hier laufen.
Oh, das ist hübsch. Das ist ziemlich hübsch, ne?
Ich weiß nicht, ob das Textual verwendet oder Rich oder irgendwas in der Richtung.
Aber genau.
Was ist das oder so?
Ja, das gibt einem so ein bisschen
Daten zu den, also
es ist halt top.
Ja.
Es gibt da so ähnliche Sachen.
Glances gibt es auch.
Ja, Glances gibt es auch.
Gtop, Htop.
Aber das ist mir so letztens
über den Weg gelaufen und fand ich, sieht echt
ziemlich gut aus.
Ist jetzt hier langweilig, der Rechner macht überhaupt nichts.
Ja, das hat keine Last drauf.
Ich picke iJSON.
Habe ich auch noch nicht so viel
benutzt, aber es macht so große
JSON-Objekte irgendwie vernünftig.
Hast du noch einen Pick, Hannes?
Was genau soll ich denn picken?
Muss das einen Python-Kontext haben?
Nö, irgendwas Cooles,
was man vielleicht noch nicht kennt.
Ah, okay.
Ich weiß nicht, ob man es heute gehört hat.
Ich habe so eine gewisse Präferenz zu Kafka.
Das, was ich da picken würde,
ist Kafka Connect
tatsächlich.
Kann man mal nachgoogeln.
das sorgt letztlich
dafür, dass man sich Sachen
automatisch aus Datenbanken holen kann
wenn sie reingeschrieben wurden
zum Beispiel Write-Only-Prozesse und die werden
dann ganz ganz automatisch in einen Topic
reingeschoben, das nennt sich dann
Source-Connector ohne Code
Also quasi so eine Duplikation von der
Realität in der Datenbank in das Kafka
Ja, wir haben ja über Datenkonsistenzen
heute geredet und im Prinzip ist das
so ein Ansatz, wie du dir die Daten
quasi aus einer Datenbank ohne den
Service selbst da
beeinflussen zu müssen, rausziehen kannst,
in ein Topic schreiben kannst und über einen
Sync-Connector in andere Datenbanken reinschreiben kannst.
Und das wirklich coole an der Sache ist,
es gibt Konnektoren für alle möglichen Datenbanken.
Also Postgres,
Elasticsearch,
Neo4j, das ist relativ interessant.
Kann man sich mal angucken.
Ja, das klingt gut. Also Next Level Kafka.
Mindestens.
Mindestens, ja.
Okay, cool.
Ja, vielen Dank, Janis, dass du hier warst heute.
Sehr gerne.
Microservices. Ich hoffe, es hat dir ein bisschen Spaß gemacht, genauso viel wie uns.
Bleibt uns gewogen.
Schaltet uns wieder ein.
Wie auch immer. Montag, Tag.
Dann bis demnächst.
Tschüss.