Transkript: Microservices

· Zurück zur Episode

Vollständiges Transkript der Episode. Zeitstempel beziehen sich auf die Audiowiedergabe.

Ja, hallo liebe Hörerinnen und Hörer.

Dominik

Willkommen beim Python Podcast, Episode Nummer 41.

Dominik

Heute unterhalten wir uns über Microservices.

Dominik

Schön, dass ihr wieder eingeschaltet habt.

Hi Joan.

Hallo Dominik.

Und wir haben einen Gast dabei.

Guten Abend.

Dominik

Hi Janis.

Janis

Ja, das bin ich.

Hallo, hallo Janis.

Ich bin der Dominik.

Janis

Ich bin der Janis.

Dominik

Ja, dann.

Dominik

Janis, willst du dich mal kurz vorstellen, vielleicht direkt?

Janis

Ja, das geht schnell.

Janis

Ich bin der Janis.

Janis

Noch 29 Jahre alt, jung, aus Wuppertal.

Janis

Ich entwickle mit Python viel und oft und gerne.

Janis

Bereich Data Engineering, Data Science.

Janis

Irgendwo da bewege ich mich rum.

Dominik

Und du hast gesagt, du hättest was zu Microsoft zu sagen und deswegen unterhalten wir uns heute darüber.

Dominik

Ich würde sagen, wir fangen wieder mit News aus der Szene an.

Jochen

Ja, genau, machen wir das immer.

Dominik

Was hast du denn?

Jochen

Ja, ich weiß nicht, hier 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 zuhören oder dabei sind gerade, die irgendwie davon betroffen sind.

Jochen

Es gab da so eine Sicherheitsschwankung bei Okta.

Ja.

Dominik

Ich weiß nicht, wenn du meinst, denn betroffen gemacht.

Keine Ahnung.

Jochen

Ja, also das fand ich, war mal wieder.

Dominik

Also October erst so ein Multi-Login-Service, Single Sign-on.

Ja, genau.

Jochen

Viele Kunden, viele Konzerne sind da Kunden und so.

Jochen

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.

Jochen

Und jetzt mussten die Leute, die das irgendwie, die diese Dienstleistung in Anspruch genommen haben, feststellen, dass sie doch jemandem vertrauen mussten.

Jochen

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.

Jochen

Und das ist natürlich schlecht.

Dominik

Ja, das ist also, ich würde auch sagen, das ist ziemlich beschädigt jetzt auch mal.

Jochen

Ja, ja, aber ich meine, ich habe mich da ja mal, ich frage mich, warum das, warum das gerade große Unternehmen so leicht fertig machen, weil das ist ehrlich gesagt irgendwie, sieht irgendwie schon von weitem wie eine nicht so richtig gute Idee aus, da sowas zu machen, so gerade Authentifizierung irgendwie outzusourcen.

Dominik

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 verhalten sollen und die dann immer unsicherere Passwörter nehmen, wenn die ganz viele verschiedenen Services auf ihrem Rechner benutzen sollen oder so.

Dominik

Und diese Single-Sand-On, da kann man dann, glaube ich, die Policies vielleicht ein bisschen besser einhalten und die Leute dazu, dass sie so ein bisschen mehr drüber nachdenken, was die tun.

Jochen

Ja.

Ja, gut, Single-Sand-On verstehe ich auch irgendwie, aber ich verstehe nicht so richtig, warum man dann auch.

Jochen

Wenn man das selber machen muss, dann haben wir es genau, ist auch wieder schwierig.

Jochen

Ja, also das war auf jeden Fall, denke ich, ein großes Ding, was dann irgendwie in der letzten Jahr

Dominik

passiert ist.

Dominik

Ja, ich habe auch für Okta tatsächlich so ein Dunkel-Modul geschrieben, mit dem das dann doch irgendwie geht, aber ja, das ist halt nutzer nichts, wenn Okta kaputt ist.

Dominik

Ja, doof.

Dominik

Mehr News.

Jochen

Dann, äh, ah, oh, gibt es einen, wir hatten ja schon mal diesen Thiobel Programmiersprachen.

Dominik

Ach, der spannende große

Index, ja.

Jochen

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 so, wie viel das so sagt, keine Ahnung.

Jochen

Es gibt einen anderen, der macht so was ähnliches, der heißt Pipel, Piple, ich weiß gar nicht, wie der heißt.

Jochen

Naja, jedenfalls, da ist Python auch momentan die beliebteste Programmiersprache.

Dominik

Oh je.

Jochen

Also das ist, 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.

Jochen

Insofern wird das ein bisschen mehr Glaubmürdigkeit, dass da irgendwie was dran sein könnte.

Jochen

Ja, es ist auf jeden Fall Python sehr populär zur Zeit.

Dominik

Sogar Meta hat einen großen Beitrag an die Python Software Foundation gespendet, habe ich mitbekommen in letzter Zeit.

Jochen

Ja, das sind tatsächlich sehr gute Neuigkeiten.

Jochen

Das ist ja eigentlich noch nicht so lange her, dass tatsächlich die, also Python Software Foundation irgendwie, hatte bisher alles Mögliche um diese, um die Marke, drumherum gemacht und so und irgendwie Rechtsbeistand und solche Sachen für irgendwie Leute, die das verletzen.

Jochen

Und so, aber sie haben halt eigentlich keine Entwicklung bezahlt oder niemanden gehabt, der halt, es gab niemanden, der sich Vollzeit irgendwie bezahlt um Python gekümmert hätte.

Jochen

Und klar, es gab Leute, die bei Firmen gearbeitet haben, dann zumindest einen Teil der Zeit irgendwie dafür zur Verfügung, irgendwie sich damit zu beschäftigen, aber jetzt gibt es seit, ich weiß nicht, ist das jetzt schon seit zwei Jahren, glaube ich.

Dominik

Ja, ja.

Dominik

Wird auch verlängert.

Jochen

Developer in Residence sozusagen und zuerst hat Google den bezahlt und das ist Lukas Langer macht das, macht das sehr gut.

Jochen

Schreibt auch immer wieder Blogposts, was er so tut.

Jochen

Und jetzt quasi damit bezahlt das jetzt erstmals auf Facebook, was natürlich super ist.

Jochen

Und ja, vielleicht werden jetzt ja nochmal irgendwann mehr Leute, also es ist auf jeden Fall, wird es irgendwie mehr Geld und das ist ja schon mal toll.

Ja, genau.

Jochen

Voll gut.

Ja.

Jochen

Also ich meine, eigentlich denke ich, dass große Konzerne das ja eigentlich fast wie eine Art Versicherung sehen können.

Dominik

Sollte man meinen.

Jochen

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 zuständig kommen hat.

Dominik

Es ist halt schwierig, sowas zu vermitteln, dass du halt irgendwie Dinge bezahlen musst, die in der Zukunft eventuell einen Return on Rest geben und

Jochen

auch nur ein Risiko abwenden.

Dominik

Ja, aber dass das gerade bei Open Source, die kriegt man ja einfach immer so umsonst.

Dominik

Das reduziert ja bis meistens immer nur irgendwie die Kosten auf einer Kostenstelle.

Ja.

Jochen

Ja.

Jochen

Ja, ja, das genau.

Jochen

Aber irgendwie geht es da voran, das ist voll gut.

Jochen

Ja, was haben wir noch?

Jochen

Oh, äh, genau, Bugspython.org, da weiß ich auch schon seit Jahren.

Jochen

Versuchen wir da irgendwie zu migrieren auf GitHub.

Jochen

Ist aber noch nicht.

Jochen

Nein, wir haben

Dominik

es verschoben.

Dominik

Achso.

Auch jetzt am 8.

Jochen

April, also quasi bald.

Jochen

Nicht übermorgen, aber in ein paar Tagen.

Jochen

Und zwar auf uns schon GitHub, weil die gesagt haben, oh, wir haben Schwierigkeiten, da weiß ich, ob das, wissen nicht, ob das funktionieren wird, wenn wir die als alle so eine Menge-Issues erzeugen und so.

Jochen

Wartet lieber nochmal ein bisschen.

Jochen

Ja.

Dominik

Okay, ja gut, das setzt du nicht mehr so lange hin.

Dominik

Also ist jetzt quasi, wenn ihr es hört, vielleicht schon migriert.

Oder kurz davor.

Jochen

Und gestern am 4.4.

Jochen

ist tatsächlich Seiten 20.

Seiten 20 Jahren geworden.

Jochen

Das ist auch ein richtiger Meilenstein.

Jochen

Hätte ich jetzt auch nicht gedacht, aber das ist natürlich alles irgendwie Zeitgefühl, komische Sache.

Dominik

Das ist schon ein bisschen abgehangen, gemerkt, wie erstmal alt wird.

Jochen

Ja, aber Seiten ist total wichtig, super.

Jochen

Also immer wenn man sich fragt, okay, ja, Python selber langsam, aber macht trotzdem Dinge schnell und so, wie geht denn das eigentlich?

Jochen

Ja, da ist meistens Zeit-Ran beteiligt und ja, tolles Projekt.

Jochen

Irgendwie man schreibt so eine Python-ähnliche Syntax und das wird dann halt in C Cross-Compiles sozusagen und dann.

Dominik

Man kann auch C-Funktion direkt laden, glaube ich, wenn man das möchte.

Jochen

Ja, genau, und dann kann man es wieder einbinden als Python-Modul.

Jochen

Dann gibt es sogar sowas wie ein Cell Magic in Jupyter Notebooks oder JupyterLab.

Jochen

Und da kann man einfach sagen, Prozent, Prozent Zeiten und dann wird das halt eine Funktion einfach so wieder reimportiert und dann wird die halt tausendmal schneller oder so.

Jochen

Das ist halt sehr schick.

Ja.

Ja, okay.

Dominik

Also Apo, kennst du Wie, die Language?

Dominik

Wie Läng V.

Dominik

Ja.

Dominik

Bin ich irgendwie letztens so gestolpert, weil ein Kollege mich drauf brachte und habe ich mal geguckt, kannte ich noch nicht, ist noch in so einer Beta-Version.

Dominik

Sieht irgendwie witzig aus, so eine Kombination von Rust und Go irgendwie.

Jochen

Ja, momentan ist auch wieder so die Zeit für neue Programmiersprachen.

Jochen

Letztens habe ich gehört von Sig.

Jochen

SIG.

Jochen

Das ist auch so ein Ding.

Dominik

Voller lustiger Name, das ist wieder so, wenn man drüber fällt, aber den Namen direkt nicht so.

Jochen

Ja, das sieht auch so ein bisschen aus wie eine Kreuzung aus Go und JavaScript und irgendwie Rust und weiß nicht, ganz vielen Dingen.

Dominik

Also ich habe es noch nicht reingeguckt, also falls ihr darüber was wisst, das könnte auch interessant sein.

Dominik

Also wie lange IO.

Jochen

Okay, ich muss mich mir auch mal angucken.

Dominik

Kompliziert auch zu C, deswegen kam ich gerade drauf.

Jochen

Ach so, ah, okay.

Jochen

Das ist ja auch interessant.

Ja.

Witzig.

Ja.

Ja.

Jochen

Okay.

Jochen

Dann sind wir eigentlich schon fast.

Jochen

Das war diesmal schnell.

Dominik

Ja, wir haben gar nicht mehr sonst.

Jochen

Ja, dann sind wir damit eigentlich durch.

Dominik

Achso, ja, haben wir eigentlich Veranstaltungshinweise oder sowas?

Jochen

Ja, das wollten wir.

Dominik

Achso, du wolltest du wolltst vor PyCon, bist du da?

Fritz findet man dich da.

Jochen

Montan sieht es nicht danach aus.

Jochen

Ich hätte jetzt zufällig, also zuerst hatte ich gedacht, das schaffe ich irgendwie nicht, beziehungsweise ich habe gar nicht so richtig mitbekommen, dass sie überhaupt stattfindet.

Jochen

Also vor Ort, weil das wäre es für mich interessant geworden, aber nicht vor Ort halt eher nicht so richtig.

Jochen

Weil das schaffe ich eben, wenn ich, das habe ich auch schon mal probiert, irgendwie Remote-Aufkonferenzen oder dass es funktioniert eigentlich.

Dominik

Dann warten wir jetzt eine halbe Stunde da und dann gepa.

Jochen

Ja, genau, und dann ist halt vorbei.

Jochen

Und das funktioniert einfach nicht.

Jochen

Also wenn das funktionieren soll, muss ich da irgendwo hin und getrennt sein von irgendwie anderweitigen Verpflichtungen.

Jochen

Und da habe ich das halt nicht so mitgekriegt, dass das tatsächlich vor Ort sein sollte.

Jochen

Und dann habe ich es mitgekriegt und dann waren aber schon Tickets, und dann dachte ich, ich hätte gerne Zeit und dann habe ich dann gemerkt, oh, ich habe vielleicht doch Zeit und dann waren aber keine Tickets mehr da.

Insofern.

Ja.

Dominik

Na gut, wenn es daran lag.

Jochen

Aber vielleicht machen wir auch nochmal eine Sendung oder so dazu, wie das da gewesen ist von Finden, noch Leute, die da, die da waren und dann davon erzählen können.

Ja, das war nicht mehr zu sagen oder so.

Vielleicht.

Jochen

Genau, den habe ich schon gefragt.

Jochen

Er hat sich auch schon gemeldet und wollte eigentlich ja auch.

Dominik

Okay, cool.

Dominik

Also gibt es noch irgendwann eine Pike-on-Folge.

Dominik

Ja.

Dominik

Ja, im Sommer, Europyton-Tickets sind auch gerade draußen.

Dominik

Da gibt es sogar noch welche von, glaube ich, es war noch nicht so super angelaufen, der Vorverkauf, obwohl die so schnell immer weg waren, sonst.

Dominik

In Dublin, also wenn ihr mit mir abends in Dublin ein Bierchen trinken wollt.

Jochen

Da könnte es auch gut sein, dass ich damit komme.

Jochen

Ja, das wäre nicht.

Jochen

Würde ich gerne machen.

Ich bin gespannt.

Jochen

Und dann gibt es noch die, also gut, dass jetzt nicht mehr so aggressiv ist.

Dominik

Aber das Conference Center in Dublin ist relativ nah an der Bluedog-Außenstelle.

Jochen

Das war.

Bluedog Burry.

Dominik

Ja, ja, genau.

Jochen

Das Angenehme mit dem nützlichen Superverbindung.

Jochen

Genau, und im Herbst, irgendwann im September, gibt es die DjangoCon EU, diesmal auch tatsächlich vor Ort und in Porto.

Jochen

Die sollte ja eigentlich die letzten beiden Jahre in Porto stattfinden, aber hat es ja nicht.

Jochen

Und genau da denke ich ja wahrscheinlich leider nicht, weil irgendwie so viele Konferenzen.

Dominik

Ist Johannes da?

Jochen

Habe ich noch nicht gefragt.

Jochen

Aber wer auf jeden Fall da ist, ist Ronny.

Ronny ist da stimmt.

Dominik

Das ganze Team ist auch.

Das ist natürlich ein bisschen schade.

Jochen

Das wäre natürlich nett.

Dominik

Das ist ja schön, ja.

Ja.

Dominik

Naja.

Dominik

Ja, jetzt haben wir doch noch ein bisschen News gemacht.

Jochen

Okay.

Jochen

Gut.

Dominik

Dann kommt jetzt wieder der obligatorische Werbeblock, habt ihr schon gehört?

Dominik

Und diesmal ist Janis dann.

Janis darf Werbema.

Janis

Ich darf Werbung machen, ne?

Janis

Als Neuling.

Janis

Ja, wofür mache ich Werbung?

Janis

Ich mache Werbung für meinen Arbeitgeber.

Janis

Ich arbeite bei Elio, wir machen Consulting, mit Fokus auf künstliche Intelligenz und den Weg dahin.

Janis

Alles, was dazugehört.

Dominik

Und ihr sucht neue Leute?

Janis

Wir suchen neue Leute, genau.

Jochen

Wie hieß die Domain nochmal?

Jochen

Ich versuche die gerade Elio?

Janis

alio.de.

Janis

a-I-L-I-O.de.

Janis

Quasi AI im Namen.

Janis

Als Programm, wenn man so möchte.

Janis

Genau, und wir suchen neue Leute immer.

Janis

Also es ist wahrscheinlich sogar ziemlich egal, wann du die Folge hörst.

Janis

Wir suchen dich.

Dominik

Was müssen die Leute können, die zu euch kommen?

Janis

Wir haben einen Fokus auf künstliche Intelligenz, ne?

Janis

Also Data Science, Machine Learning, Deep Learning, NLP, das ist natürlich super interessant, wenn man sich damit schon mal auseinandergesetzt hat.

Janis

Aber auch ganz, ganz normale Backend-Tools, sag ich jetzt mal, sind sehr herzlich willkommen und sehr gerne gesehen.

Janis

Generell haben wir den Ansatz, dass man wunderbar in Rollen hineinwachsen kann und wir jeden dabei unterstützen wollen.

Dominik

Das heißt, wenn Pandas dein Liebestool ist, ist das vielleicht auch interessant.

Welches Tool?

Pandas.

Janis

Pandas, ja klar.

Janis

Sicher, ist ja Data Science, ne?

Ja, Data

Jochen

Science passt natürlich eigentlich schon ziemlich gut zusammen.

Jochen

Und da kann man dann wahrscheinlich auch Remote arbeiten oder so.

Jochen

Eigentlich ist es die Form in Bielefeld, sehe ich gerade.

Janis

Genau, wir sitzen in Bielefeld.

Janis

Remote-Arbeit.

Janis

Ich arbeite sehr viel Remote.

Janis

Wir haben immer so einen Stammtisch irgendwie, damit man sich doch auch mal in Person sieht.

Janis

Aber rein optional, sage ich jetzt mal.

Janis

Insofern sind wir gespannt.

Dominik

Ja, ich finde gut.

Dominik

Also falls ihr einen Job sucht, dann schaut doch mal da vorbei.

Janis

Ja, ich würde mich freuen.

Dominik

Kriegen das fans nette Jungs und Kollegen.

Mindestens einmal, ne?

Mindestens.

Janis

Ja, vielleicht auch mehr.

Ich habe davon gehört.

Dominik

Du musst jetzt noch persönliche Coachings und Benefits anbieten von dir aus, damit das dann.

Janis

Ja, würde ich natürlich machen.

Janis

Also wenn du Hörer der Folge bist und so begeistert von mir bist, ganz gut.

Dominik

Genau, da gibt es einen Aktionskurs, Gejanne, groß geschrieben.

Janis

Ja, schreibe mich an.

Janis

Genau, eine E-Mail-Adresse und eine Internetseite gibt es auch, LUDE, business at lu.de, da könnt ihr euch gerne hinbewerben.

Janis

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, dann kann ich 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.

Dominik

Habt ihr auf jeden Fall bessere Chancen, da wissen wir auch, dass er das hatte.

Dominik

Genau, dass ihr interessiert seid und so.

Jochen

Keine Ahnung, ob das irgendjemand hört, den das auf der Suche ist.

Janis

Ich glaube tatsächlich, das hat einen Wert.

Janis

Also ich wurde mal gefragt in einem Interview, welche Bücher und Podcasts ich so empfehlen kann.

Janis

Das war ganz lustig.

Janis

Python Podcast ist mir vielleicht in den Sinn gekommen, vielleicht auch nicht.

Dominik

Ich wurde tatsächlich auch im Arbeitskontest von jemandem angesprochen, also der ein Projektmanager war, der für ein größeres Projekt irgendwie gehört hatte, was da so gibt und der einen Danke-Podcast von uns gehört hat und dachte so, oh cool, das weißt du nicht, der Tür mit dem Podcast hat.

Ja, interessant.

Janis

Ja, hilft manchmal, ne?

Janis

Also das ist schon cool.

Janis

Genau.

Ja, super.

Dominik

Hört mal rein.

Dominik

Wenn ihr was sucht, bist du jetzt wo.

Janis

Oder nicht sucht und doch zu uns wollen, ne?

Janis

Man weiß ja nie.

Jochen

Ja.

Jochen

Okay, genau.

Jochen

Ja, Thema diesmal Microservices.

Microservices.

Dominik

Ja, also ich habe ja wie immer keine Ahnung und würde erstmal, was ist denn überhaupt so ein Microservice?

Ja, was ist das denn?

Janis

Wer soll das denn erklären?

Jochen

Ja, keine Ahnung.

Jochen

Möchtest du anfangen oder so?

Janis

Ich kann gerne anfangen.

Janis

Also es gibt relativ harte Definitionen darüber.

Janis

Ich bin da kein Freund von.

Janis

Also im Prinzip ist ein Microservice erstmal etwas, was wenig Sachen macht, aber dafür sehr gut.

Janis

So würde ich es beschreiben.

Janis

Man stellt jetzt ja ganz gerne mal so einen Monolithen gegenüber.

Janis

Und wir haben schon vorrangig überlegt, wollen wir jetzt so ein Versus-Ding machen oder nicht.

Janis

Schauen wir mal, was das wird.

Janis

Aber ja, ich weiß nicht, vielleicht, wenn man Selbstentwickler ist, man kennt das ja, man hat irgendwie tausend Funktionen, die man gerne in einer Anwendung hat.

Janis

Und dann überlegt man halt hoffe ich, wie man das gestaltet.

Janis

Und der Microservice-Ansatz ist eben, dass man viele einzelne Funktionen in verschiedenen Codebasen auslagert mit eigenen Text-Stacks und ganz wild und ganz toll und hoch skalierbar.

Janis

Und erstmal ist alles cool in Microservices.

Okay.

Dominik

Die Meinung von ja alles.

Janis

Ja, ganz so ist es nicht, ne?

Janis

Das ist ein bisschen plakativ.

Janis

Werden wir noch sehen, ob das wirklich so ist am Ende.

Dominik

Ja, aber das ist doch genau spannend jetzt.

Dominik

Also du sagst also, Microservices sind quasi eine isolierte Funktionalität.

Janis

Genau.

Dominik

Wenn ich jetzt eine Anwendung habe.

Dominik

Wir tun jetzt mal so, als wäre es eine Webanwendung, vielleicht ist das am einfachsten zu verstehen.

Dominik

Das heißt, es gibt ein Frontend und die bezieht dann ihre Quellen aus unterschiedlichen, ja, also ihre Bestandteile, ihre Logik aus unterschiedlichen Quellen.

Dominik

Aus dem jeweils einzelnen Microservice.

Dominik

Würdest du sagen, das ist eine gute Idee?

Janis

Es gibt verschiedene Ansätze, ne?

Janis

Das ist Thema Best Practice, sage ich jetzt mal.

Janis

Und auch immer so ein bisschen ein Thema der Architektur.

Janis

Also ich glaube, das werden wir im Laufe der Folge, wenn ich in die Zukunft gucke, immer mal häufiger hören.

Janis

Man kann sich natürlich verschiedene API-Endpunkte suchen und alle einzelnen Anfragen ist, würde ich sagen, aber keine gute Idee.

Janis

Da gibt es dann meistens AP-Gateways, beziehungsweise eine Schnittstelle, die man anfragt, die verschiedene Endpunkte sammeln.

Dominik

Genau, darüber hatte ich eben auch schon mal, glaube ich, ganz kurz mit Jochen gesprochen, weil es halt genau darum geht, also wer ist dann die Spinne im Netz, wovon bekommt man das, wenn man jetzt ein Frontend hat?

Dominik

Sollte das Frontend die einsammeln, einzeln oder holt man das von so einem Gateway ab?

Dominik

Oder wie macht man das am liebsten?

Jochen

Ja, keine Ahnung.

Jochen

Also ich glaube, wenn man das wirklich konsequent machen wollen würde, dann müsste man ja auch im Frontend das sozusagen.

Jochen

Mikrofrontends müsste man machen.

Jochen

Was da nur ein bisschen.

Janis

Aber die fand ein Frontend, oder?

Dominik

Wer liefert denn das Mikrofrontend aus?

Dominik

Also wenn man zum Beispiel HTMX das ausliefert, dann wäre ein Dango ein sogenannter Spinne oder so ein Aggregator, ein Gabi-Gateway, obwohl ich jetzt das Wording da immer nicht ganz treffen finde, ehrlich gesagt.

Jochen

Das spielt dann letztlich ja keine große Rolle mehr, weil du musst ja dann, das wäre nur noch eine statische Seite.

Dominik

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.

Dominik

Warum mache ich das nicht in der einen Anwendung direkt und habe dann diesen ganzen Gefummel mit dem Ganzen drumherum nicht?

Janis

Darüber wollen wir ja reden, ne?

Janis

Ja, also das ist ja das Ziel der Folge.

Janis

Wäre eine kurze Folge, wenn wir das jetzt so einfach und so schnell machen.

Dominik

Diese Einsatz fertig, ja, danke schön.

Dominik

Heute haben wir euch nicht so lange geklickt.

Janis

Nee, ganz, ganz so ist es natürlich nicht.

Janis

Man muss halt auch mal sehen, welche verschiedenen Funktionalitäten man haben möchte.

Janis

Wir sind jetzt im Bereich Web unterwegs, von deinem Beispiel.

Janis

Das klingt erstmal sehr, sehr einfach.

Janis

Web-Anwendung, ich meine, so eine Standard-Firmen-Webseite meinetwegen mit einem Kontaktformular, da braucht man keine Microservices für, das stimmt schon.

Janis

Aber wenn wir jetzt zum Beispiel mal eine Kurswebseite meinetwegen sehen, wo wir ein Empfehlungssystem, wir haben so ein Dashboard, wir haben einen Nutzerbereich, wir haben einen Content Creator-Modus, da werden die Sachen schon komplizierter.

Janis

Wir haben ganz viele verschiedene Sachen, die ineinander greifen, die ineinander funktionieren müssen.

Janis

Und da muss man natürlich überlegen, wie gestalte ich das designtechnisch, wie gestalte ich die Suchfunktion und so weiter und so fort.

Janis

Und kann ich das überhaupt in einem einzelnen Django-Monolithen gewährleisten, meinetwegen, oder ist es vielleicht manchmal einfacher, einen eigenen Service für etwas zu schreiben?

Ja.

Jochen

Also genau, vielleicht einfach hake ich an der Stelle mal ein und sag mal so, was ich denken würde, was Microservice ist.

Jochen

Und ich würde denken, der entscheidende Punkt dabei ist eben die Einheit, wie deployed man das.

Jochen

Also alles, was man, wenn man, wenn man es insgesamt, wenn man es halt getrennt deployt, dann ist es halt ein Microservice, würde ich jetzt mal so sagen.

Jochen

Und oder getrennt deployen kann.

Jochen

Und also wenn es halt irgendwie, wenn die gesamte Applikation etwas ist, was man insgesamt deployt, dann ist es halt irgendwie eher ein Monolith.

Jochen

Und eben Microservice hat halt den Vorteil, du kannst halt da unterschiedliche Technologien ausprobieren, du kannst halt unterschiedliche Sprachen verwenden.

Jochen

Man sagt mal auch mal, man sollte das halt so machen, dass man da quasi unterschiedliche Sprachen verwenden kann, dass sie halt möglichst irgendwie ihre eigene Datenhaltung irgendwie haben oder zumindest ihre eigene Sicht auf die Daten.

Jochen

Und da ist man dann halt schon so ein bisschen bei dem, ich weiß nicht, diesen Domain-Driven Design-Ansatz, da gibt es immer diese Begriff Bounded Context, ne?

Jochen

Und das ist halt immer so das, was man so klassischerweise Bounded Context.

Dominik

Bounded Context.

Dominik

Jetzt musst du wieder irgendwie anwenden, was dann Context ist.

Jochen

Ja, das ist quasi so, ja, also Dinge, die halt irgendwie so zusammengehören und nur gemeinsam verändert werden sollen.

Jochen

Ich glaube, das Standardbeispiel auch eben aus dem Domain-Diven-Design Buch 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.

Jochen

Das heißt, man holt das insgesamt aus der Datenbank, macht irgendwelche Änderungen und schreibt es halt in einer Transaktion wieder irgendwie in die Datenbank rein oder so.

Jochen

Und das ist halt sozusagen ein, ja, brauchende Kontext eben.

Dominik

Ja, dann ist aber eine spannende Frage.

Dominik

Also was gehört halt dazu oder nicht?

Dominik

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 Bauendkontext da dazu oder holt man das aus dem CRM?

Jochen

Ich glaube auch, dass der Grund, also vielleicht der Name, das kommt daher, dass es halt unterschiedliche Dinge in unterschiedlichen Kontexten bedeuten kann.

Jochen

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 Person, an die irgendwas geschickt wird im Kontext einer irgendwas Bestellung oder so.

Jochen

Und im 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.

Jochen

Und ja, je nachdem, welchem 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.

Dominik

Okay, interessant.

Dominik

Also Bounded Kontext abstrahiert das so ein bisschen.

Dominik

Was aber jetzt dafür sprechen wir, in dem Masch, was du gesagt hast, braucht man ja irgendwie eine Wahrheit der Daten, wenn das eben.

Jochen

Ja, das ist dann, glaube ich, da wird es ein bisschen schwieriger bei dem Microservice.

Janis

Single Point of Truth, ja.

Janis

Das ist eine Herausforderung.

Janis

Also ich sage jetzt mal, das ist eine ganz gängige Frage.

Janis

Wie gewährleistet man den in Microservices?

Janis

Und eine Frage, die damit einhergeht, ist immer das Datenmanagement.

Dominik

Vielleicht vielleicht nochmal gerade Entschuldigung, dass ich euch gerade direkt einhaber wieder.

Dominik

Aber was heißt Datenmanagement an der Stelle?

Janis

Ein Microservice, beziehungsweise Microservices allgemein zeichnen sich ja dadurch aus, dass das isolierte Systeme sind.

Janis

Also im Idealfall hält jeder Microservice genau die Daten, die er braucht oder eben nicht.

Janis

Und wenn er die Daten nicht hält, muss er natürlich überlegen, woher kriege ich meine Daten eigentlich und wie kriege ich sie.

Janis

Und dann gibt es eben verschiedene Möglichkeiten, damit umzugehen.

Janis

Ich könnte zum Beispiel mal irgendwelche AP-Requests gegen irgendeinen anderen Microservice machen, meinetwegen, und hole von da meine Daten.

Janis

Hab dann aber den Nachteil, okay, das ist langsam und irgendwie kopple ich meine Microservices dann wieder zusammen.

Dominik

Genau, ja, also wenn es im dieselbe Datenbank liegt, dann ist doch die Frage, warum macht man da eine unterschiedliche Architektur?

Dominik

Aber obwohl, vielleicht kann er auch das dann machen, wenn er halt irgendwie hingehe und möchte aus derselben Datenbank Dinge erzeugen mit unterschiedlichen Sprachen und die dann unabhängig.

Jochen

Genau, eine selbe Datenbank wird schwierig, weil dann kannst du es halt nicht mehr getrennt voneinander deployen.

Jochen

Also wenn du jetzt zum Beispiel auf der, wenn du eine gemeinsame Datenbank hast und du änderst die jetzt.

Dominik

Na gut, er kann ja einfach den Datenbank deployen.

Dominik

Also die Datenbank kann ja noch ein dritter Punkt sein, der ganz unabhängig von den Services läuft.

Jochen

Ja, aber da kannst du es nicht mehr unabhängig deployen, weil wenn du jetzt die Datenbank änderst, dann hat das ja Auswirkungen auf einen anderen, hat es ja auch Auswirkungen auf die anderen Services.

Janis

Ja, und es ist ein Single Point of Failure.

Janis

Also da spreche ich aus ganz, ganz schmerzhafter Erfahrung.

Janis

Wenn verschiedene Services an einer Datenbank hängen, verschiedene Microservices und die Datenbank kippt um, dann kippen dir die Microservices auch um, weil irgendjemand Schluss gemacht hat.

Janis

Das will man eigentlich auch vermeiden.

Janis

Also das ist so ein Shared-Datenbank, Anti-Pattern heißt das.

Janis

Das macht man manchmal, weil es einfach schnell ist, weil es einfach einfach ist.

Janis

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, in Single Point of Failure reinholt.

Janis

Aber ja, eigentlich hat jeder Service seine eigene Daten, seine eigene Datenbank.

Janis

Und du musst halt überlegen, okay, will ich jetzt mehrfach die gleichen Daten in verschiedenen Microservices verteilen?

Janis

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.

Janis

Und das beschreibt eben das Datenbankmanagement.

Janis

Das heißt, wir haben viele Datenreplikationen an unterschiedlichen Stellen und das macht natürlich den Punkt der Wahrheit, wie ich es so schön sagte, extrem schwierig.

Dominik

Ja, da musst du vielleicht über diesen Flora am Anfang halt Gedanken machen.

Dominik

Also wo kommen die Daten überhaupt her?

Und wo sollen die hin?

Dominik

Und dann, ja, also ist ja die Frage, ist das eine Architekturentscheidung, wenn du jetzt sagst, es ist Design, Domain-Driven Design, was würde denn da.

Jochen

Damit sind noch keine Architekturentscheidungen gefallen, quasi.

Jochen

Damit ist es halt einfach nur so ein Konzept, wie man Dinge angehen könnte, aber

Dominik

ich stelle das ja so ein bisschen in den Raum dann vielleicht.

Dominik

Also die Wahl.

Jochen

Ja, also ich weiß es nicht.

Jochen

Ich meine, es ist halt die Frage, ob man tja, also ich hab's, ich habe in der Vorbereitung habe ich jetzt mal so ein Podcast auch gehört, von wo der, da gibt es irgendwie ein Buch, das mal empfohlen wird zu Microservices von Sam Newman und der ist auch in diversen Podcasts schon zu Last gewesen und der sagte dann dazu quasi so, naja, also das mit den Datenbanken ist ja so eine Sache, also wenn man, wenn das

Jochen

funktioniert, wenn man halt eine Datenbank haben kann und so, und dann sollte man das schon machen, weil es gibt ja einen Grund, warum die so verbreitet sind und sich so lange gehalten haben und alle die benutzen.

Jochen

Und wenn man das halt, äh, wenn man das halt nicht kann, gut, weil man halt Microsoft machen muss, dann okay, da muss man sich halt was überlegen, dann wird es halt schwierig.

Jochen

Und dann derjenige, der ihn interviewt hat, 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 Architekturen so, ja, das kann man, warum sollte man das tun?

Jochen

Man muss der Datenbank schreckliche Dinge antun, damit das geht.

Jochen

Also es muss einem halt klar sein.

Jochen

Also, ja, also es geht schon, aber es ist halt, die Frage wäre, würde man so anfangen wollen?

Jochen

Und da denke ich, ja, warum nicht einfach mit einem ganz normalen Datenbankschirm anfangen?

Dominik

Genau, ja, aber das würde ja nicht für Microsoft sprechen, sondern für einen Monolith oder einen Service, der.

Jochen

Es würde nicht dafür sprechen, damit anzufangen, ja, genau.

Jochen

Würde ich auch sagen, normalerweise, sollte man einen Grund haben, worum man das macht.

Dominik

Also das heißt, also ich würde jetzt auch so intuitiv sagen, du baust halt erst einmal dein Deployment für ein Tool, für eine Webanwendung und hast halt dann eine Datenbank dahinter und arbeitest dann damit und erweiterst sie halt.

Dominik

Und die Frage ist halt, wann komme ich denn überhaupt in diese Sphäre, dass ich sage, so Microsoft ist jetzt eine gute Idee oder das behilft mir irgendwo bei.

Janis

Das ist unterschiedlich.

Janis

Vielleicht erstmal eingehakt noch bei diesem Datenbank auseinanderschneiden, das stelle ich mir sehr, sehr kompliziert vor.

Janis

Das, was wesentlich einfacher ist, sich vorzustellen, ist, dass jeder Service tatsächlich seine eigene echte Datenbank hat.

Janis

Und man verteilt die Daten dann quasi auf verschiedene Microservices in ganz normalen Datenbanken.

Janis

Also das, was du gesagt hast, das kam relativ kompliziert.

Jochen

Aber du hast ja dann das Problem.

Jochen

Du hast dann ja ein verteiltes, du hast ja eine verteilte Datenhaltung, wo du nicht einfach einen Join machen kannst, sondern du musst dann halt.

Janis

Ja, ja, klar.

Janis

Also das Datenmanagement selbst, das ist wesentlich komplizierter geworden, aber die Datenhaltung pro Service, die ist immer noch relativ.

Janis

Das muss man halt ganz klar sagen.

Janis

Also die einzelnen Microservices in sich, die sind unglaublich einfach.

Janis

Wenn du zum Beispiel einen Monolithen hast, und da kommen wir direkt zu deiner Frage, die du gestellt hast, Monolith wird sehr schnell sehr kompliziert.

Janis

Also gerade dann, wenn du viele Leute an einer Codebasis arbeiten hast, mit vielen verschiedenen Services da drin, die sich vielleicht auch gegenseitig affektieren.

Janis

Also du bindest ja unter Umständen einzelner Services aneinander und du hast dann auf einmal teamübergreifende Bugs, meinetwegen, weil du eine gemeinsame Codebasis hast, dann denkt man schon relativ schnell bei Microservices nach.

Dominik

Okay, aber das klingt ja so, als wären die Apps-Sets nicht so gut getestet im Staging oder sowas.

Dominik

Und als würden jetzt, also Dinge, die halt eine Seite kaputt machen, andere Apps kaputt machen.

Dominik

Und wenn man jetzt beispielsweise in Django-App-Sets denkt, ja, wenn man das parallel entwickelt, dann könnte man die ja voneinander trennen.

Janis

Im besten Fall tut man das, ja.

Also wenn

Dominik

die sich gegenseitig differenzieren, kommt man natürlich in so ein Dependency-Problem vielleicht.

Jochen

Ja, ja, ich glaube, also ich, ich meine, das ist auch mal was, wo ich dann, also es geht eigentlich im Grunde, das zentrale Problem irgendwie bei der Softwareentwicklung ist eben dieses Modularisierungsproblem.

Jochen

Das ist halt irgendwie so das Ding, was jeder hat und was irgendwie ganz einfach aussieht, wo alle sagen, ah, da muss man halt ein bisschen modularisieren, kein Problem.

Jochen

Das ist aber tatsächlich sehr schwierig.

Dominik

User musst du sehr oft importieren.

Dominik

Das heißt, dass zum Beispiel, wenn da irgendwas kaputt geht, das ist schon doof dann wahrscheinlich.

Jochen

Ja, aber du kannst ja trotzdem sozusagen die Dinge irgendwie auseinanderhalten, die nichts miteinander zu tun haben.

Jochen

Wenn es nicht geht, dann geht es halt nicht.

Jochen

Aber dann kannst du immer noch die Abhängigkeiten explizit machen.

Jochen

Also es ist, man kann da schon was tun und man kann das richtig und falsch machen und meistens machen sie total falsch.

Jochen

Das ist halt so.

Jochen

Und die allerschlimmsten Geschichten sind dann halt, oder wenn man es halt halt verteilt falsch macht, das ist halt.

Jochen

Ja, insofern, ich bin auch so ein bisschen immer 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, dass alle haben in der Softwareentwicklung irgendwie, sie kriegen ihren Kram halt nicht organisiert.

Jochen

So richtig und richtig strukturiert und nicht modularisiert.

Jochen

Und dann nehmen sie halt irgendwie Teile, die kompliziert sind und machen daraus mehr Mikroservices, weil sie sagen, ja, dann haben wir das irgendwie modularisiert.

Jochen

Aber das ist ja nicht so, sondern dann hat man es einfach nur verteilt.

Jochen

Das heißt, man hat ein Ding, was man nicht modularisiert hatte, verteilt und dann hat man halt einen verteilten Monolithen und das ist halt leider sehr offen.

Ich weiß nicht, ob die ganzen Dinge nicht.

Jochen

Ja, insofern, genau.

Jochen

Aber ich glaube, dem kann man so ein bisschen entgehen, wenn man sich überlegt am Anfang, so wofür will ich das eigentlich bauen und warum mache ich das?

Jochen

Und dann geht das wahrscheinlich schon besser.

Janis

Die Frage ist auch immer, ob man es besser oder schlimmer macht oder ob man überhaupt was am Zustand ändert.

Janis

Ich meine, wenn man innerhalb seiner Architektur bzw.

Janis

innerhalb seines Codes Referenzen hat, dann hat man die ja nicht automatisch nicht mehr, nur wenn man auf einmal Microservices verwendet.

Janis

Genau.

Janis

Man verlagert das Problem.

Janis

Aber ich sage jetzt mal, man macht die Sache halt, die Codebasis selbst wesentlich einfacher und manchmal läuft man auch einfach in eine Situation, wo man feststellt, okay, die Funktion, die ich jetzt hier machen möchte, die ist in dem Umfeld, in dem ich mich gerade bewege, einfach super schwierig zu implementieren.

Janis

Das heißt, ich finde gar keinen geeigneten technischen Ansatz, da mal ein wenig was einzubauen.

Janis

Vielleicht ein ganz, ganz einfaches Beispiel.

Janis

Wir haben jetzt eine Django-Anwendung und wir haben jetzt irgendwo, weiß ich nicht, Rabbit-MQ, Kafka, irgendwas rumliegen, irgendeine Que, irgendein Topic und das will ich konsumieren.

Janis

Und dann muss ich mal überlegen, gut, wie baue ich das möglichst elegant in eine Django-Anwendung ein?

Janis

Dann habe ich da irgendwie permanent etwas parallel Laufendes.

Kann man machen.

Janis

Die Frage ist, ob es sich natürlich anfühlt, ob es cool ist, ob man es wirklich so machen will.

Dominik

Also du willst eine Verlichtanbindung aufmachen zu einem Kafka oder einer anderen Queue.

Janis

Ich würde es gar nicht mal so ausdrücken.

Janis

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.

Janis

Oder wo man meinetwegen sagt, okay, ich finde jetzt in meiner jetzigen Architektur einfach allgemein keinen schönen Ansatz für das, was ich vorhab.

Janis

Weiß ich nicht.

Janis

Es kann auch andere Gründe haben.

Janis

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.

Janis

Also vielleicht geht das mehr so in die Richtung politische Entscheidung oder auch nicht.

Janis

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.

Janis

Vielleicht lagern wir das aus und vielleicht ziehen wir dadurch wirklich unsere Vorteile.

Dominik

Ja, also was ich halt da wieder ein Problem sehen, ist halt, wenn ich das jetzt tue, dann habe ich ja irgendwo den Hut nicht auf.

Dominik

Oder ich muss den Hut an einer Stelle aufsetzen und muss das halt dann wieder agrigieren, wo du es vom API-Gateway sprachst, ja.

Dominik

Also wenn ich diese Spinne im Netz sein will, die halt die Informationshoheit hat, die die Single Source of Truths irgendwie bereitstellen möchte.

Janis

Das ist ja kein API Gateway.

Dominik

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.

Ja.

Dominik

Also ich kann die auch schwer testen oder sowas, ja.

Dominik

Also wenn ich das auf meiner Seite hast, muss halt eigentlich auf deren Seite dann getestet sein.

Dominik

Das heißt, ich gebe quasi die ganze Verantwortung weg.

Janis

Du hast natürlich sehr viel, du hast wahrscheinlich wesentlich mehr Integration-Tests erstmal, als du in einem Monolithen hättest.

Janis

Auf der anderen Seite sagt man ja, die einzelnen Services, die sind entkoppelt voneinander.

Janis

Das heißt, wenn deiner läuft, hast du deinen Job gemacht und das ist erstmal alles gut.

Janis

Und der andere muss dafür sorgen, dass sein Microservice läuft.

Janis

Das heißt, man verlässt sich irgendwie aufeinander.

Janis

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.

Janis

Das ist immer so eine Sache, die kann man unglaublich gut machen oder unglaublich schlecht machen.

Janis

Oder man macht sie einfach, wie man es macht.

Janis

Also man bewegt sich irgendwo in der Mitte.

Janis

Und mal funktioniert es richtig gut und mal nicht.

Janis

Also das ist eine Riesenherausforderung, worüber du sprichst, beim Single Point of Truth.

Janis

Beziehungsweise auch das ganze Monitoring.

Janis

Das ist ja wesentlich kompliziert in der Microservice-Welt.

Janis

Weiß ich nicht, wenn du zwanzig hast.

Dominik

Ja, also ich sag mal so, 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 Logites rauspasst oder irgendwie.

Jochen

Du musst überhaupt mit sowas erstmal anfangen und wir haben das möglicherweise eben noch nicht.

Jochen

Das ist auch so das erste Projekt, was er vorschlägt und man sich dann tatsächlich doch mal dazu durchkungen hat, das dann zu machen.

Jochen

Also immer so, dass ein gutes Startprojekt ist halt zu sagen, okay, da machen wir doch mal irgendwie als ersten Microservice irgendwie zentrales Log, äh, so Else-Stack oder sowas, Logmanagement, weil das ist halt relativ einfach, ja, das ist eigentlich nicht so schwierig, aber man muss halt trotzdem irgendwie Sachen irgendwo hindeployen können, man hat unterschiedliche Sprachen, man muss es irgendwie konfigurieren und diese ganzen unterschiedlichen Aspekte irgendwie müssen alle z

Jochen

usammen funktionieren, sonst geht es halt nicht.

Jochen

Und wenn man da schon feststellt, okay, das ist mit der Organisation, weil das oft hat man ja so Organisationsprobleme, 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.

Jochen

Aber ja, genau, genau.

Jochen

Das ist eigentlich, du brauchst dann halt irgendwas, wo du dann halt zentral deine Logfiles sehen kannst und gucken kannst, was passiert ist, über deine unterschiedlichen Services hinweg.

Jochen

Und das musstest du für die Frage.

Dominik

Also ich muss, also das meinte ich mit dem Hutterfaden, ich muss halt immer irgendwie so ein Admin haben oder so.

Jochen

Naja, also ich meine, du hast dann ein Ding für Loggeschichten, du hast aber dann vielleicht auch ein anderes Ding für Monitoring, du hast wieder ein anderes Ding für, weiß ich nicht, dann Live-Dashboard oder so.

Jochen

Das müsste ja jetzt nicht alles das gleiche sein.

Jochen

Das ist auch wieder unterschiedlich.

Dominik

Also 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 entspannt der Bark sitzt halt.

Janis

Ja, also ich meine, am Ende, ich meine, das, worauf der Jochen hingewiesen hat, wir haben ja unsere Tools.

Janis

Also der Elk-Stack für Logging meinetwegen, Sentry für Fehlermeldungen, dann hast du vielleicht noch Grafana Prometheus für Metrikmonitoring.

Janis

Das sind ja alles standardisierte Ansätze, die du relativ einfach in deiner Services einbauen kannst.

Janis

Also Filebeat-Logging geht zum Elk-Stack.

Janis

Und das ist halt etwas, wo man sich auch in einem Monolithen durchaus Gedanken drüber machen muss, um da einen einfach einen Zugang zu seinen Loks zu kriegen, zum Beispiel.

Janis

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 Loks kommst und diese möglichst schön filtern kann.

Janis

Elk-Stack ist auch wunderbar.

Janis

Das heißt, diesen Stack, den hast du unter Umständen auch in einer guten monolithischen Struktur schon.

Dominik

Vielleicht könnt ihr einfach noch kurz den Egg-Stack beschreiben, weil den hatten wir, glaube ich, noch nicht.

Jochen

Das ist einfach nur, ich weiß jetzt gar nicht, ob ich das richtig, ich habe mit Hilfe gar nicht so viel.

Jochen

Das ist irgendwie Elasticsearch halt, um die Logfiles durchsucher zu machen.

Jochen

Es ist halt Kibana oder so.

Genau, das ist Dashboard.

Jochen

Dashboard, genau.

Jochen

Und was gehört da noch dazu?

Jochen

Logstash.

Jochen

Logstash, ah ja.

Janis

Also vielleicht auch, um das zu beschreiben, du kannst in Python zum Beispiel, schreibst du deine Logfiles und Files, ne?

Janis

Und dann kannst du dir die mit FileBeat Richtung Logstash schicken.

Janis

Das ist einfach nur ein weiterer Service, ne?

Janis

Der sorgt dann letztlich einfach nur dafür, dass die Logs, die du schreibst, Richtung Elasticsearch gehen.

Janis

Und entweder du hast da noch einen Logstash vor oder nicht, dann kannst du die vielleicht noch ein bisschen schöner formatieren, um sie ein bisschen schöner JSON-tauglicher zu machen und durchsuchbarer zu machen, einzelne Fan zu indizieren.

Janis

Und dann wird das eben auf Elasticsearch gespeichert und mit Kibana durchsuchst du es einfach.

Janis

Dann kriegst du so ein Dashboard, dann kannst du relativ nutzerfreundlich mit schön viel klickibunti deine Loks durchsuchen und dann hast du deine Graphen, kannst dir auch Dashboards bauen.

Dominik

Ja, okay, ja, Kibana ist immer.

Freitext-Suche.

Janis

Das ist sehr schön.

Janis

Macht Spaß.

Dominik

Okay.

Dominik

Ja, also.

Jochen

Ja, ich sehe es auch tatsächlich, also wenn du sagst, in der Organisation irgendwie muss doch 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 denn normalerweise anders, wenn sie das halt, wenn sie nicht Microservice machen, dann machen sie meistens so eine, also ich würde sagen, bei Microservice ist halt so, versucht das ganze Problem, die Problemendomain irgendwie vertikal aufzutrennen.

Jochen

Und was man klassischerweise vielleicht eher macht, sind Sachen horizontal aufzuteilen.

Jochen

Das heißt, du teilst normalerweise, sag ich mal, eben dann vielleicht eher auf in Frontend irgendwie so Service Layer und Backend und Datenhaltung.

Jochen

Und sozusagen bei Microservice ist halt eher vertikal, das heißt pro Projekt irgendwie oder pro irgendwann irgendeine Organisationsstruktur halt.

Jochen

Und das Problem bei dem horizontalen Ding, weshalb 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 sich halt gegenseitig auf den Füßen unter Umständen.

Jochen

Also du hast dann vielleicht halt eben schon ein Datenbank-Team oder so, wo sich Leute sehr, sehr gut mit Datenbanken auskennen.

Jochen

Aber und du brauchst sie halt auch deswegen, weil du halt eventuell fiese Datenbankprobleme hast, wo Leute irgendwie Queries optimieren müssen oder sich überlegen müssen, wie sie da halt irgendwie möglichst schnell neue Replikas von irgendwelchen Datenbanken hochziehen können und die Daten da und so weiter.

Jochen

Dieses ganzen Kramenloadsing und dieses ganze Zeugs, was man halt so machen muss.

Jochen

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 willst jetzt, hast jetzt irgendwie ein Projekt und da muss halt irgendwie jetzt eine Spalte zusätzlich irgendwo eine Tabelle.

Jochen

Und das ist jetzt eigentlich nichts, was so sonderlich schwierig ist, vielleicht sollte man sich überlegen, ob man das halt machen will oder nicht, oder keine Ahnung, aber letztlich das zu tun ist gar nicht so schwer.

Jochen

Und dein Datenbank-Team ist zwar jetzt zum Beispiel gerade mit irgendeinem anderen Projekt beschäftigt oder so.

Jochen

So, und dann kommst du nicht weiter mit deinem eigentlich Projekt, das nur da eine blöde Spalte zusätzlich haben muss.

Jochen

Es gibt halt eine Menge Anforderungen, die sehr einfach sind.

Jochen

Also entweder du beschäftigst dann halt deine teuren Spezialexperten mit sehr simplen Geschichten, oder du kannst sie nicht auslasten, weil die halt oder du kannst halt kommst mit deinem Projekt nicht weiter, weil die halt mit irgendwelchem anderen Kram ausgelastet sind.

Jochen

Also es ist halt, und das blockiert sich halt gegenseitig.

Jochen

Du hast halt sehr viel Handoffs zwischendurch viel Kommunikation, weil viele Leute miteinander reden müssen, damit irgendwas am Schluss deployed werden kann.

Jochen

Und wenn du es jetzt anders machst und machst es halt vertikal und sagst, ein Team ist ein Grund dafür zuständig, das komplett zu deployen, ein Produkt, Projekt, Microservice, dann und die anderen sind halt bloß, die beraten dich dann halt, wenn es irgendwie kompliziert wird oder so 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.

Jochen

Und du machst bestimmte Teile deiner Organisation halt auch handlungsfähig, ohne dass sie halt sich mit allen anderen abstimmen müssen.

Jochen

Und dann, also das sind vor allen Dingen zwei Teile, die da halt ein Problem sind.

Jochen

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.

Jochen

Deswegen eben gerade schon so mit Mikrofon jetzt so ein bisschen, weil das Problem ist, wie stellst du Konsistenz gegen quasi sicher, wenn halt du nicht mehr ein UI-Team hast, das halt alles auf allem irgendwie zu einem Ja sagen muss, dass das jetzt so funktioniert.

Jochen

Die könnten dann sagen, ja, nee, das muss konsistent sein, das können wir so nicht machen.

Jochen

Aber wenn jetzt die Teams das einzeln machen sollen, dann kann es natürlich inkonsistent werden.

Dominik

Ja, dann müssen ja irgendwie komische Style Guides folgen oder so.

Jochen

Ja, aber ob sie das dann tun oder nicht, weil das Team muss dann ja verantwortlich sein.

Jochen

Die müssen es ja, die müssen ja sagen können, nee, wir releasen, das ist uns wichtiger und dann, oder wir deployen jetzt und dann machen sie das halt einfach.

Jochen

Ja, aber du bist halt unter Umständen schneller.

Jochen

Und ich finde, ich finde, eine Firma, in einer Firma gibt es das auch sehr schön, sowohl der, was das an Vorteilen bringen kann, sieht man da, und auch was an Nachteilen, nämlich bei Amazon.

Jochen

Die haben ja eigentlich früher schon angefangen mit so Service-Oriented Architecture, was vielleicht auch so ein bisschen Vorläufer ist von Microservices.

Jochen

Und auf der Amazon-Shopping-Seite, da funktioniert das, finde ich, ganz gut.

Jochen

Also ich meine, die sieht auch immer so ein bisschen inkonsistent aus und komisch und Altbacken und so.

Jochen

Aber das geht irgendwie.

Jochen

Also man kann einkaufen und meistens funktioniert es sogar besser als anderswo vom Prozess her.

Jochen

Aber, und also das geht.

Jochen

Das ist zwar nicht so komplett konsistent, aber das funktioniert insgesamt.

Jochen

Und wo ich finde, wo es eine ziemliche Katastrophe ist, ist halt bei sowas wie AWS oder so.

Jochen

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.

Jochen

Und das macht es für mich als Benutzer halt total schwierig, irgendwie, das irgendwie zu bedienen, weil ich nie Sachen finde und immer da suchen muss nach Sachen und so.

Dominik

Nee, also auch die Konfiguration, wenn man das irgendwie automatisiert, ist jedes Mal total anders und das ist ein bisschen nervig auch.

Jochen

Ja, also ich meine, es geht schon, aber es ist halt schon, das macht es echt, da an der Stelle macht die fehlende Konsistenz an das Leben halt echt schwer.

Jochen

Und ja, aber ich glaube, das sind halt so Trade-offs, ne, muss man sich entscheiden.

Jochen

Ist einem die Konsistenz wichtiger oder die Geschwindigkeit?

Jochen

Ja.

Jochen

Ja.

Naja, naja.

Janis

Welche Begeisterung für Microservices, habe ich das Gefühl, ne?

Dominik

Ja, ich weiß nicht.

Dominik

Also ich habe noch nicht so rausgefunden, wofür ich denn jetzt einen Microservice gut einsetzen könnte.

Dominik

Also wenn ich mir jetzt vorstelle, ich möchte jetzt irgendwie so ein Projekt implementieren, ja?

Dominik

Irgendwie so eine gewisse Größe.

Dominik

Und dann muss ich ja, wie du ihr auch in so schön sagt, enablen die Leute, dass sie selber klarkommen mit den ganzen Regeln, die ich irgendwie haben will.

Janis

Ich glaube, das ist noch viel zu kompliziert.

Janis

Ich glaube, erstmal muss man überlegen, brauche ich das überhaupt?

Janis

Also macht das für mich überhaupt Sinn?

Janis

Habe ich die Größe, wie viele Mitarbeiter habe ich?

Janis

Bin ich jetzt zu fünf, dann mache ich keinen Microservice auf.

Janis

Aber habe ich meinetwegen 20, 30, 40 Mitarbeiter.

Janis

Das macht schon super viel Sinn, da über Microservices nachzudenken, weil ich kann jetzt eigentlich so Teams machen.

Janis

Diese Teams haben verschiedene Verantwortlichkeiten.

Janis

Und natürlich habe ich hinterher den Trade-off mit Konsistenz meinetwegen im Frontend.

Janis

Frontend ist halt immer so ein, ich bin nicht im Frontend drin, ich persönlich.

Janis

Also ich halte mich davon so weit fern wie nur möglich, ja.

Janis

Und so Backend-Prozesse, da sind so Guidelines total egal, ja.

Dominik

Nein, aber ich versuche jetzt wirklich nochmal von diesem Management-Layer von oben, das mir anzugucken, weil du hast natürlich recht, ich bin nicht jetzt ein Content habe mit 100.000 Mitarbeitern, macht das vielleicht Sinn, die Teams zu verteilen auf ihre einzelnen Kompetenzen, die sie haben, die in unterschiedlichen Ländern Slogan sitzen.

Dominik

Das heißt, die haben ganz andere Abstimmungsprobleme.

Dominik

Mein Problem ist es aber, als Konzern von oben das so zu managen, diese unterschiedlichen Services, dass sie konsistent sind.

Dominik

Ja, dann habe ich wieder das Problem des Brandings oder wie auch immer.

Dominik

Oder halt, ich möchte eine Nutzbarmachung der einzelnen Services für alle sicherstellen.

Dominik

Und wenn die Standards jetzt so sind, dass die jetzt irgendwo im Pazifikraum funktionieren, aber für uns nicht lesbar, dann habe ich ein Problem, weil dann kann ich keine Synergieeffekte daraus ziehen.

Janis

Ja, die Frage ist dann auch immer, welche Prozesse werden durchlaufen, um etwas zu veröffentlichen.

Janis

Das steht halt noch ein bisschen.

Dominik

Genau, aber ist die Frage, erschlage ich das dann mit irgendwelchen Prozessen?

Dominik

Weiß ich nicht, das macht's ja nicht besser.

Dominik

Dann habe ich den Vorteil von Microservices nicht mehr, weil dann muss ich durch so ein Prozessgateway durchkommen und hab dann einen Doorkeeper nach dem anderen.

Janis

Ja, gut, aber auch um auf deine Frage zu kommen, die Frage ist am Ende auch, wie schlimm ist das?

Janis

Also wenn ich jetzt zum Beispiel in Tokio das eine Team habe und in Berlin das andere, die bauen beide, die backen beide ihren eigenen Kuchen, dann 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.

Janis

Weil das Team in Berlin wird relativ wenig Berührungspunkte mit dem Code zum Beispiel vom Team in Tokio haben.

Janis

Und umgekehrt natürlich auch, weil Microservice-Teams, die stehen ja für sich alleine.

Janis

Das heißt, wir haben ein Team, das arbeitet an einer Sache, das deployt einen Service für sich alleine und der muss natürlich integrativ mit den anderen irgendwie funktionieren.

Jochen

Ja, ich würde auch denken, dass das Problem eher tatsächlich andersrum ist.

Jochen

Also das, was dann tatsächlich auftritt.

Jochen

Also ich meine, ja, es kann auch sein, dass es schwierig ist, das zu koordinieren, keine Ahnung.

Jochen

Kann man sich halt dann sich halt vielleicht irgendwas überlegen.

Jochen

Aber das habe ich jetzt noch gar nicht zu gehört, als das ist ein Riesenproblem.

Jochen

Was aber schon ein Riesenproblem ist, ist halt, also wenn du jetzt so etwas hast, wie, ich weiß jetzt nicht, was das Beispiel war, das kam auch in der Programm, du hast halt irgendwie einen Konzern, der hat halt hunderte Marken und jede Marke hat irgendwie eigene Dienste, die sie irgendwie anbieten.

Jochen

Und die sind alle in unterschiedlichen Teams und so, auch weltweit verteilt und so.

Jochen

Wie stellst du denn sicher, dass du irgendwas über einen bestimmten Kunden weißt, zentral?

Jochen

Das kriegst du halt dann nicht mehr hin.

Jochen

Oder halt

Dominik

genau Produktion, wenn du halt da, wenn du denjenige bist, der das produziert und das dann verteilt an Unterrichtungen.

Dominik

Das ist genau das, was ich meine.

Jochen

Das ist der Nachteil, das geht halt nicht mehr.

Dominik

Aber das ist ja das, was ich zentral, das sind wir vielleicht wieder, was bei Singapore und Frühstück irgendwie überschreiben kann.

Dominik

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

Jochen

Steuer bin.

Jochen

Es ist halt die Frage, ob es.

Jochen

Also es geht halt manchmal, ich meine, ich kann es halt zum Beispiel nehmen, ein Beispiel als zweitgrößte E-Commerce-Konzern der Welt, wisst ihr, wer das ist?

Jochen

Nach Amazon.

Oder?

Jochen

Vielleicht ist Otto, aber tatsächlich, ich weiß nicht mehr, ob das noch stimmt.

Jochen

Es kann sein, dass Ali das irgendwie AliExpress oder so größer ist.

Jochen

Oder Alibaba

drauf, aber

Jochen

Otto auf jeden Fall sehr, sehr groß und damals, das ist jetzt aber auch schon wieder lange her, hat sie sich das auf die Fahnen auch geschrieben, irgendwie der Zeitgröße nach Amazon zu sein.

Jochen

Und die haben halt zum Beispiel genau dieses Problem, weil sie haben, es gibt ja nicht die eine Seite, auf der dann alle irgendwie Zeugs einkaufen, sondern die haben halt hunderte Shops.

Jochen

Also jeder dritte Shop, auf dem du irgendwie landest, ist halt letztlich gehört zum Autokonzern.

Jochen

Du weißt es aber gar nicht, weil das steht da ja auch nicht dran.

Jochen

So, und die haben jetzt genau dieses Problem.

Jochen

Jeder einzelne Shop hält halt User-Daten.

Jochen

Und genau, wie machst du das denn jetzt eigentlich, wenn du quasi irgendwie Dinge wissen willst über deine User?

Dominik

Also andersrum.

Dominik

Also wie kriegen die ganzen Microservices wieder alle zusammen?

Jochen

Und die Antwort, die das eigentlich gar nicht.

Dominik

Also kriegst du nicht.

Dominik

Ich glaube, da kommen so Leute auf die Idee wie Data Lake, wird dann eher Data Swamp oder so.

Dominik

Irgendwas zu Sekretornen und bauen das dazwischen.

Jochen

Das schlimmste Problem ist gar nicht unbedingt die technische Lösung, sondern das schlimmste Problem sind halt die politischen Geschichten, die du halt da auch kriegst automatisch.

Jochen

Dass halt Leute sagen so, wir haben hier gerade einen Vorteil, die sind ja untereinander im Wettbewerb, ja.

Jochen

Wir haben hier gerade einen Vorteil, weil wir irgendwas wissen, was die anderen nicht wissen.

Jochen

Und jetzt sollen wir die Daten, das, was wir, was uns dazu verhilft, dass wir irgendwie besser sein können als unsere interne Prokuretz, das sollen wir denen jetzt irgendwie freiwillig zur Verfügung stellen.

Ja, aber dann kann ich nicht mehr so gut.

Jochen

Dann haben wir halt irgendwie einen leichten kaputten Export, wo die Daten so ein bisschen.

Dominik

Ja, aber mit der Konzernbrille, die du dann aufhast, dann musst du da hingehen, musst den goldischen Knoten dann kaputt hauen.

Dominik

Dann musst du sagen, gib uns die Daten, wir sind der Chef.

Jochen

Ja, schwierig.

Sehr schwierig.

Jochen

Also, ja.

Janis

Aber auch da, ich meine, das ist jetzt ein sehr, sehr schönes Beispiel.

Janis

Aber als Konzern muss man sich natürlich die Frage stellen, was will ich eigentlich?

Janis

Will ich jetzt ein möglichst großes Franchise so schnell wie möglich aufbauen?

Janis

Habe ich die Kapazität, um das aus innerer Kraft herauszuschaffen?

Janis

Oder muss ich dafür sorgen, dass die Leute in weiß nicht wo das alles selbst entwickeln können?

Janis

Dann machen sie halt ihren eigenen Service und dann habe ich das Problem mit den Daten, dass ich nicht unbedingt alle Nutzer auf einmal kenne.

Janis

Aber das ist dann eine Sache, die man lösen muss im Nachhinein.

Janis

Und was hilft mir jetzt mehr?

Janis

Hilft es mir mehr, da einen Shop hochzuziehen und irgendwie mein Geld über das Franchise reinzuziehen oder wie auch immer.

Janis

Oder will ich jetzt einfach alles wissen und will ich die totale Kontrolle haben?

Dominik

Ja, das ist halt genau das klassische Problem eigentlich.

Dominik

Machst du halt irgendwie Diversifizierung oder machst du Fusionierung.

Dominik

Irgendwie, das ist in der Software-Seite und die Frage, die irgendwie die Consultants immer geben, ist immer genau das Gegenteil von dem, was gerade da ist.

Dominik

Dann kannst du halt so ein Projekt konsulten, kannst du halt Geld verdient.

Dominik

Und dann geht es halt immer raus und zusammen.

Dominik

Ich meine, das macht natürlich auch Sinn, ne?

Dominik

Also, wenn du irgendwas hast, was total verfilzt ist, dann musst du das erstmal auseinandspalten, dann hast du kleine einzelne Services, die untereinander so ein bisschen Wettbewerben haben, die guten Sachen, muss dann irgendwie wieder konsolidieren und zentralisieren, um dann wieder den guten Benefit rauszubekommen.

Dominik

Bist du dann wieder merkst, das wird dir doof, dann fängst du wieder an, das auseinanderzudröseln.

Dominik

Das ist ja genau wie bei den Ländern.

Dominik

Mal sind Länder werden zusammengefasst, dann sind sie auseinandergewogen.

Dominik

Ja, aber das ist ja vielleicht auch dieser natürliche Zyklus, Lebenszyklus von so einem Ding.

Dominik

Und ja, also wenn ich jetzt zum Beispiel hingehe, dieses Otto-Beispiel nehme und ich möchte diese User-Daten haben.

Dominik

Ich würde jetzt als Otto hingehen und sagen, ich will wissen, wer sind meine Kunden, wie viele Kunden sind überhaupt irgendwo.

Dominik

Da muss ich hingehen, muss sagen, gebt mir alle eure Daten.

Dominik

Dann baue ich einen zentralen Service dann zusätzlich, der halt von allen die Daten abholt.

Dominik

Dann kann es sein, dass ich jeden einzelnen dieser Shops einzeln integrieren muss.

Dominik

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 jetzt 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 über was dann meine Leute sind.

Dominik

Und da kann ich dann bestimmte Analysen fahren, die ich vielleicht fahren möchte.

Dominik

Aber das ist ja das, was man vielleicht dann braucht.

Dominik

Und dann kann man damit vielleicht dann wieder sagen, ah, aber dafür machen wir jetzt wieder so kleine Services, weil dann.

Janis

Vielleicht, ne?

Janis

Oder du kannst aber überlegen, ob du nicht schon im Vorfeld einen gewissen Standard etablierst, wo du sagst, da sind wir wieder beim Standard natürlich.

Und bei den Gateways.

Dominik

Und bei den Gatekeepern.

Janis

Nicht nur bei den Gateways.

Janis

Ich bin ein Backend, ich interessiere mich nicht so für die.

Janis

Er doch auch.

Dominik

Ja, mein Problem ist aber bei der Gatekeeper, ich musste gerade, weil du gesagt hast, Standards, musste ich an Infrastrukturstandards denken.

Dominik

Und auch das ist ja unheimlich schwierig, wenn du die gleichen Standards einführst für Teams, die auf der Welt irgendwo sitzen.

Jochen

Ja, damit verlierst du die Vorteile von Microsoft.

Ja, eigentlich sofort.

Genau.

Janis

Die Frage ist halt, was der Standard ist.

Janis

Möchte ich jetzt einfach so ein Plugin auf jedem Shop haben, welches meinetwegen in verschiedenen Programmiersprachen vorhanden ist, damit die Shops autonom sind.

Janis

Es ist für mich ein vertretbarer Aufwand, das zu gewährleisten, meinetwegen.

Dominik

Das fängt ja schon bei moderneren Sachen an, wie keine Ahnung, jeder Dev kriegt einen Windows-Laptop mit AD Zugriff.

Genau, sowas hört es ja nicht.

Dominik

Das ist nämlich der Punkt, weil wenn du Microservice das machst, musst du erkennen, dass das unabhängig sein muss von dem Rest.

Dominik

Und du kannst das da nicht zentralisieren.

Dominik

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 doch festzuhalten.

Dominik

Und dann ist das völlig absurd.

Janis

Wie gesagt, für mich muss man da so ein bisschen von loslassen, dass man die Kontrolle, die totale Kontrolle haben will.

Janis

Und wenn man das kann und wenn man dann die Vorteile für die Flexibilität sieht, die man dabei gewinnt, dann sind Microservices schon sehr vorteilhaft.

Dominik

Ja, genau, aber das ist genau der Punkt.

Dominik

Weil wenn ich jetzt sage, ich möchte den Hud auf haben, wird das so nicht funktionieren.

Dominik

Sonst wird nur dann die Verantwortung abgeben kann.

Ja, dann

nimmst du Microservices.

Genau.

Janis

Aber das ist ja eine, aber da hast du ja schon eine Antwort.

Janis

Also willst du den Hut auf haben, wie du es so schön sagst, dann mach keinen Microservice oder überleg dir halt sehr, sehr gut, wie du das gewährleisten kannst, wie viel willst du wachsen.

Janis

Vielleicht geht das ja so bei den Microservices, wer weiß.

Janis

Oder willst du die Verantwortung abgeben, dann kannst du einen Microservices nehmen.

Janis

Die Frage am Ende ist, wenn du einen riesen Konzern hast, hat da überhaupt noch jemand den Hut auf, egal welche Ansatz zu machen.

Dominik

Die Frage von Tenn ist ja ganz einfach, ist dann auf welcher Kostenstelle wird denn das gebucht und wer halt dann wo die Hand aufhört.

Jochen

Ja, aber ich glaube, also, wenn man nochmal einen Schritt mehr Richtung Organisation oder allgemein oder abstraktes Problem geht, ich denke, also ich würde irgendwie diesen Trend zu Microservices halt so verorten in einem in einer Reihe von Trends, die halt alle in eine ähnliche Richtung laufen.

Jochen

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.

Jochen

Und zwar, und das sind alles Versuche, das zu lösen, dieses Problem, dass die Incentives eigentlich nicht korrekt sind.

Jochen

Also was ich damit meine, ist einfach nur, das ist eigentlich ein total simples Problem, ja.

Jochen

Nehmen wir an, du hast halt irgendwie, früher irgendwie war es halt Entwicklung und Betrieb, ja, oder IT und Operations oder weiß ich nicht, und auf deinen Seite Entwicklung.

Jochen

Und das hast du vielleicht auf unterschiedlichen Seiten deiner Bilanz auch, ne?

Jochen

Das eine sind halt halt und das andere sind halt Investitionen.

Jochen

Ja, so, dann hast du halt irgendwie, siehst du halt eine, wenn da Features entwickelt wirst, siehst du das halt Investition und denkst halt, je mehr Features entwickeln wir, voll gut, gib mir in der Zukunft mehr Einnahmen, total super.

Jochen

So, das heißt, irgendwie deine Entwicklung misst du daran, wie viele Features kriegen die ja eigentlich pro Quartal irgendwie raus oder keine Ahnung, irgendwie sowas.

Jochen

So, und dann geht das Ganze in den Betrieb, nachdem so und dann, woran misst du deinen Betrieb, den misst du an den Kosten und daran, dass es halt funktioniert.

Jochen

Aber sozusagen, die Leute, die da arbeiten, die haben nichts davon, dass da mehr Features rausgehen.

Jochen

Die werden nicht, die werden nicht, kriegen nicht mehr Geld dafür, dass sie halt dafür sorgen, dass die Entwickler mehr Features veröffentlichen.

Jochen

Was ist deren rational beste Strategie in diesem Setting, ist halt tatsächlich zu sagen, never change a running system.

Ja, ja.

Jochen

Irgendwie, ich werde nicht belohnt dafür.

Jochen

Ich bin ein Kostenfaktor, ja, ich werde nur bestraft, wenn irgendwas nicht geht.

Jochen

Solange das Wasser läuft und der Strom an ist, alles gut.

Jochen

Sobald der Strom ausfällt, kriege ich auf ein.

Dominik

Kein Problem.

Jochen

Das heißt, mein Ding ist also, ich meine, klar, irgendwie eine Änderung kann sein, dass sie gut ist für andere, ja, aber ich habe ja nichts davon.

Jochen

Oder sie ist schlecht, dann trifft mich das.

Jochen

Das heißt, ich versuche möglichst Änderungen zu verhindern.

Jochen

Dann, das ist sozusagen für mich am besten, weil dann kann ich sicherstellen, dass möglichst wenig kaputt geht.

Jochen

Und na gut, für die anderen ist das halt nicht so toll, dass sie halt nicht so viele Features rauskriegen, aber es ist ja ehrlich gesagt nicht mein Problem.

Jochen

So, und dann, das ist halt etwas, in das Unternehmen dann halt früher oder später irgendwann reinlaufen und überlegen sich, wie sie damit irgendwie umgehen, dass das jetzt irgendwie problematisch ist und das halt irgendwie, das ist halt halt ein Maß dafür.

Jochen

Man sich fragt so, also dann macht man dann eine Kostenstellen und keine Ahnung, und dann sagt man intern so, und dann kostet das unfassbare Beträge, irgendwas sehr Simples zu tun.

Jochen

Dann fragt man sich, ja, wie kommt denn das zustande, dass das plötzlich so wahnsinnig wie kostet?

Dominik

Ein Server 50.000 Euro.

Jochen

Ja, irgendwie sowas.

Jochen

Und die Antwort ist einfach so, ja, das ist halt deswegen, damit du das nicht machst, damit du nichts änderst, ja?

Jochen

Das ist der Grund.

Jochen

Das ist halt der Preis für die Änderung.

Jochen

Dass jemand sagt, so irgendwie, ich gehe hier für dich das Risiko, dass sich irgendwie das Sachen kaputt gehen.

Jochen

Ich will möglichst, dass du nichts änderst.

Jochen

Und deswegen ist das so teuer.

Jochen

Und ja, DevOps ist halt dann so ein, also die Lösung dafür ist halt dann sozusagen die Verantwortung für diese Dinge halt auch mit den in den Bereich zu packen, der halt davon profitiert, wenn was deployed wird.

Ja, mit in den agilen Sprinter, das zu packen.

Jochen

Genau, genau, Agile, auch so ein Ding, wo man sagt, okay, genau, das packen das alles zusammen.

Jochen

Ja, oder halt eben DevOps, wo man sagt, okay, die Leute, die das deployed haben wollen, die plonst dann halt auch selber und betreiben es auch selber.

Dominik

DevStack-Ops jetzt, ne?

Okay.

Jochen

Full Stack Microservice DevOps im agilen Prozess, ja.

Jochen

Und es geht halt darum, irgendwie, dass einzelne Teams halt möglichst autark irgendwie Dinge machen können und halt so, dass man halt sozusagen da, wo man investiert, halt auch tatsächlich, dass die auch dann die Möglichkeit haben, das umzusetzen.

Jochen

Aber das kommt halt mit dem Preis.

Das ist halt Trade-off.

Jochen

Es ist halt nicht so, dass das dann insgesamt automatisch super viel besser ist, wenn man das so macht, sondern es ist halt dann, ja, man wird dann halt schneller und so, aber dann wird halt eigentlich automatisch halt inkonsistenter dabei.

Und ja, das Projekt ist ja auch komplizierter.

Dominik

Wenn die Leute aneinander ziehen, wenn es halt dann so ein PM-Layer dazwischen gibt, der halt dann in verschiedenen Schrauben zieht, also auch politisch zieht, weil es halt um Kosten stellen geht und wer wie, wann, wo, warum abrechnen kann und wer welche Investitionen oder Kosten verursachen oder schützen möchte.

Dominik

Und das führt halt dazu, dass diese Idee Microservices ganz groß geschrieben, du willst ganz viel Microservice machen, aber hast eigentlich da die ganze Zeit diese Krake, die das festhält.

Dominik

Und das funktioniert, glaube ich, überhaupt nicht gut.

Jochen

Weiß ich gar nicht.

Jochen

Also, ich meine, das Problem, also vielleicht kann man das ja an einzelnen Projekten irgendwie, also ich würde ja auch denken, das ist eine schlaue Art irgendwie, wenn man jetzt migrieren wollte von Modulite auf Microsoft oder so, wäre halt, man fängt halt kleinen mit kleineren Teilen an und macht das da und man macht nicht alles auf einmal, weil das wird wahrscheinlich nicht gut funktionieren.

Dominik

Warum überhaupt?

Dominik

Also ich verstehe es immer noch nicht.

Dominik

Also irgendwie denke ich immer noch so, ja, warum hält man das dann nicht an einer Stelle fest und sorgt dann dafür, dass.

Dominik

Und lösen wir uns mal darum, dass die alle dann an eine Stelle kommen, dass sie sich alle gut verstehen, dass sie alle dieselbe Text-Sag benutzen, dass die die Infrastruktur standardisiert benutzen, dass sie nur die standardisierte Infrastruktur benutzen, keine andere und dass sie halt dieses ganze Distributed Quatsch, Entschuldigung, dass alles weg ist.

Dominik

Und ich habe die Single Source of Two, ich kann ja von mir aus verschiedenen Rechenzentren parallel an verschiedenen Orten halten.

Dominik

Das ist ja okay, das kann ja ein Server-Team betonen.

Dominik

Aber warum muss ich also die Abhängigkeiten werden dann von mir aus schwieriger, ja?

Dominik

So ein bisschen zu managen, weil ich habe halt dann das Problem, wie Jochen gerade sagte, dass hochspezialisierte, hochgut bezahlte Spezialkräfte sich teilweise um trivialen Tries kümmern müssen, bis die Sachen halt mal integriert sind.

Dominik

Aber dafür konnte man ja einen Service schreiben, also keinen Microservice, sondern einen, der halt dann in den Monolithen drin hängt, ja.

Ja.

Janis

Also ich ganz grundsätzlich, ich habe so ein bisschen das Gefühl, du bist, du bist so ein bisschen biased, ja.

Janis

Also ist mir

Dominik

eine Meinung.

Janis

Ja, nee, es ist ja alles gut.

Janis

Also grundsätzlich muss man halt die Ausgangslage erstmal in Frage stellen.

Janis

Habe ich denn überhaupt die gleichen Kompetenzen?

Janis

Ich meine, darüber hatten wir ja schon geredet.

Janis

Es ist auch nicht immer ganz leicht, die gleichen Kompetenzen überhaupt zu finden für alles.

Janis

Wenn du eine große Firma bist, dann haben, weiß ich nicht, dann hast du vielleicht irgendwie einen Java-Entwickler, der ist Querensteiger in Python oder C Sharp in C<unk>, was weiß ich.

Janis

Sowas gibt es.

Janis

Und dann verlangst du halt von dem einen Entwickler, dass er seinen Stack zum Beispiel umstellt, das willst du ja auch nicht unbedingt.

Janis

Also du hast halt grundsätzlich erstmal verschiedene Kompetenzen.

Janis

Dann ist die Frage, brauche ich diesen einen globalen Text-Deck überhaupt?

Janis

Will ich den überhaupt haben?

Janis

Bringt er mir überhaupt was?

Dominik

Ist ja immer so, also es gibt halt so wenig gute Leute, dass man wahrscheinlich schon Text-Tag multiplexen muss, damit man überhaupt

genug Leute findet.

Janis

Ah, siehst du, also Microservice, nein.

Janis

Aber grundsätzlich musst du dir ja auch die Frage stellen, erstmal, vielleicht, um von dieser Ebene mal ein bisschen zurück zum Code zu kommen.

Janis

Ein Monolith, der hat natürlich eine riesen Codebasis, die unter Umständen relativ komplex ist.

Janis

Das heißt, du musst viel Aufwand in den Deployment-Prozess an sich stecken.

Janis

Also bis du ein einzelnes Feature, ein neues Feature deployst oder einen Bug fix, musst du dich mit relativ vielen Leuten, wie der Jochen schon gesagt hat, abgesprochen haben.

Janis

Du bist insgesamt ein bisschen langsamer und vor allem auch fehleranfälliger insgesamt.

Dominik

Wenn irgendein Integration-Test irgendwie fehl geht und der irgendwie den Produktion durchrutscht, dann ist im Zweifel rauscher ein ganzes System ab und hat eine Downtime, ne?

Genau, das kann steuer werden.

Janis

Der Monolith ist so ein klassisches Beispiel für Single Point of Failure.

Janis

Auch das kannst du irgendwie umgehen, indem du, du hast ein Backup-System, du hast das parallelisiert, was weiß ich.

Janis

Also du kannst die Chance minimalisieren, dass du genau in solche Punkten läufst, mit Rollback, mit AB-Tests und so weiter.

Janis

Also du hast deine Möglichkeit, aber auch das musst du dir halt erstmal aufbauen.

Janis

Das heißt, du musst dir mit der Zeit erstmal aufbauen, mit dieser Komplexität umzugehen.

Janis

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.

Janis

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 lange rumliegen, weil zu viele Menschen.

Dominik

Dann denn natürlich so, hm, wenn ich so zwei, drei am Tag rausschruben will, wäre das schon ein bisschen doof.

Janis

Ja, nicht nur, wir reden ja nicht über Stunden, wir reden teilweise über Tagen, Wochen.

Janis

Also das ist schon nicht so einfach.

Janis

Und dann kippt du auf einmal was um.

Janis

Du hast dann irgendwie ein, du musst das irgendwie organisieren, dass du einzelne Sachen deployst.

Janis

Und dann ist es natürlich schon cooler, wenn du einen einzelnen Microservice hast.

Janis

Und wenn der mal umkippt, dann ist es nicht so schlimm für die Gesamtanwendung.

Janis

Du gefährdest dadurch relativ wenig andere Sachen durch das Deployment.

Janis

Also erstmal wirst du durch einen Microservice, wie wir schon gesagt haben, unter Umständen auch nicht zwingend.

Janis

Du musst es natürlich auch erstmal gut machen.

Janis

Aber du kannst gewisse bürokratische Randeffekte dadurch durchaus vermeiden erstmal.

Janis

Also das wäre zum Beispiel ein Grund zu sagen, ich will das jetzt aufsplitten.

Janis

Ein anderer Grund ist, dass bei einem, wir reden über große Codebasen.

Janis

Also das muss man halt immer erwähnen.

Janis

Wir reden über große Teams.

Janis

So, und niemand kennt den ganzen Code.

Janis

Also was bringt dir einen einheitlichen Text-Deck, 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 der Django-Anwendung und du nutzt noch, du nutzt jetzt keinen WooJS oder sowas, sondern du schreibst irgendwie deinen Frontend-Code in die Django-Anwendung rein als Java-Entwickler, äh JavaScript-Entwickler.

Janis

Hast du auch nichts mit Python am Hut.

Janis

Da macht es schon Sinn, dass du sagst, okay, gut, ich baue jetzt mein eigenes Frontend irgendwo anders.

Janis

Ist jetzt nicht wirklich ein Microservice, ne?

Janis

Aber das veranstaltet einfach das Problem so ein bisschen, dass dieser Entwickler nicht den ganzen Stack kennt und auch überhaupt nicht kennen muss.

Dominik

Gute Ich freut mich halt, ob das einen Unterschied macht.

Dominik

Also ist ja egal, ob er jetzt jemand an seinem Feature-Branch irgendwie eine App baut.

Janis

Süße, wenn es keinen Unterschied macht, ist es doch doppelt egal.

Dominik

Nein, aber das ist ja dann trotzdem im Monolithen.

Janis

Ja gut, aber also mindestens habe ich Komplexität raus.

Janis

Sowohl im Code.

Janis

Microservice 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.

Janis

Du stehst vor einer Wand aus Guidelines und Jira-Pages und was weiß ich, ne?

Der guter Jira.

Janis

Genau, ne?

Janis

Aber du steigst nicht irgendwie komponententief in den Code rein, musst du auch gar nicht, du kommst gar nicht erst in die Versuchungen.

Janis

Na, also du hast auf jeden Fall erstmal ein bisschen Komplexität auf Code-Ebene entschlankt.

Janis

So durch Microservice und vielleicht auch durch Deployment-Ebene und du hast das Risiko erstmal minimiert, dass du es verhaust.

Janis

Und du behinderst niemanden anderen damit.

Janis

Also du deployst halt in einem Monolithen immer nacheinander, wenn du verschiedene Teams hast, dann deployst du erst Team A, Team B, da musst du die Reihenfolge festlegen, auch das hast du in Microservices, wenn sie unabhängig voneinander sind, teilweise nicht.

Janis

Na klar, Breaking Changes, immer ein Thema.

Dominik

Das hast du jetzt auch sehr schön geredet, weil also in meinem Kopf, da ploppt gerade wieder aus wie die Angst.

Dominik

Und wenn ich das dann warten möchte und wenn ich das ausbauen möchte, wenn das Team weg ist, was diesen Microsoft entwickelt hat, dann muss ich ja wieder Experten suchen, sich dann mit dem anderen Text-Seck auskennen, die ich jetzt gar nicht kenne.

Janis

Vielleicht ja nicht.

Janis

Der Microservice an sich, der soll relativ schnell entwickelt sein.

Janis

Ich meine, das ist jetzt auch wieder Theorie, aber rein theoretisch soll er auch ein Microservice austauschbar sein.

Dominik

Ja, okay.

Dominik

Das heißt, das ist ein Wegwerf Ding.

Dominik

Das heißt, wenn es nicht mehr läuft, dann würde ich halt jemand aus dem anderen Text-Stack den gleichen Microservice neu baut, irgendwie in das dann günstiger, wenn es geht, den anderen neu zu warten, ja.

Dominik

Okay.

Jochen

Ja, könntest du natürlich machen.

Jochen

Aber ja, ich meine, ja, ehrlich gesagt, ich bin da, also ich meine, ich würde schon sagen, natürlich, dass es klar, dass es Situationen gibt, in den Microservice halt voll gut sind.

Jochen

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.

Jochen

Aber genau, also ich meine, das ist halt die Frage, gibt es irgendwie einen Grund, warum man das machen sollte?

Jochen

Der, was ich dann, was der Autor von dem Buch da meinte, ist so, naja, eigentlich eher so, Microsoft, was macht man halt dann, wenn sonst nichts mehr funktioniert, als wenn halt sozusagen, wenn alle anderen Ansätze halt nicht funktionieren, dann muss man halt irgendwie, ne?

Jochen

Aber ja, also 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.

Jochen

Und genau, wenn das halt anders nicht geht, dann muss man das halt so machen.

Jochen

Aber, und ja, das kann halt nicht 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 rein.

Da muss man es machen.

Janis

Wir können vielleicht auch sogar in Richtung Use Cases gehen.

Janis

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, Microservice zu etablieren.

Janis

Ich meine, nehmen wir jetzt mal an, wir haben einen sehr, sehr großen Datendurchsatz.

Janis

Also wir haben irgendwo eine Nutzerplattform, da machen Nutzer irgendwelche Sachen.

Janis

Und parallel davon kommen meinetwegen aus dem IoT-Bereich irgendwelche Temperaturdaten von Heizung rein oder Geodaten vom Auto, was weiß ich.

Janis

Also du schreibst sehr 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.

Janis

Du hast ja keinen Bock, dass die Datenbank dadurch langsamer wird.

Janis

Unter Umständen ist die Datenbank da auch gar nicht die richtige für, um diese Art von Daten da reinzuschreiben.

Janis

Das heißt, wir haben auf einmal mit diesen Beispielen einen Kontext geschaffen, wo wir sagen müssen, okay, wir haben zwei komplett unterschiedliche Anforderungen geschaffen.

Janis

Wir haben einmal irgendein Dashboard, das ist so klassisch HTML, kannst du eine SQL-Datenbank hinterhängen, ist alles toll.

Janis

Und wir haben auf einmal irgendwie meinetwegen IoT-Daten, Geodaten, irgendwas, die in hoher Frequenz geschrieben werden.

Janis

Müssen wir uns überlegen, gut, wie verwalten wir den ganzen Spaß eigentlich?

Janis

Eignet sich dafür meine.

Dominik

Aber ich habe es jetzt nicht genau verstanden.

Dominik

Also du sagst, du würdest dich voneinander trennen.

Dominik

Also du sagst nicht, beispielsweise, du hast eine SQL-Datenbank, da kommen die Sachen von der IoT-Sache einfach rein und der User liest halt aus der.

Janis

Ja, ich fülle das erstmal weiter aus noch.

Janis

Also ich kann überlegen, schreibe ich das jetzt gleichzeitig damit rein.

Janis

Aber irgendwann stelle ich halt fest, okay, zu Lastzeiten wird auf einmal meine Internetseite langsamer.

Janis

Weil ich auf einmal zu viele Daten schreibe von diesem IoT-Prozess.

Janis

Und die User, die kriegen eine schlechte Nutzererfahrung dadurch.

Janis

Also die Schreiblast, die steigt, dadurch wird die Internetseite unter Umständen langsamer, weil ich alles ineinander verwurscht habe.

Janis

Und da muss ich überlegen, gut, wie gehe ich jetzt damit um?

Dominik

Also normalerweise sollte darfst du gar nicht so viel langsamer werden, oder?

Jochen

Wenn du schreibst, klar.

Jochen

Aber gut, oder ich meine.

Dominik

Also schreiben, also zum Beispiel Boostgres lockt jetzt dann nur die Zeile, wenn du schreibst.

Dominik

Und wenn du jetzt ein neues IoT hast, dann hat er ja eine neue Zeile drauf.

Dominik

Das heißt, der Nutzer, der kann ja alle anderen Zeilen zum Beispiel lesen.

Jochen

Ja, also halt, also ich meine, das kann, aber es kann natürlich schon passieren.

Jochen

Es kann natürlich schon passieren, dass Schreiblast irgendwann irgendwie dein System langsam macht.

Jochen

Aber auch meine Frage wäre halt, ja, wie häufig kommt denn so denn vor, dass man so skalierbar oder dass man, also ich würde sagen, ja, es gibt einen mal liegen Grund, Microservices aus Skalierbarkeitsgründen einzusetzen, aber wie häufig kommt denn das vor?

Dominik

Nochmal kurz zu dürfte Fragen, was wäre denn jetzt die Lösungen davon?

Dominik

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 was übertragen muss.

Dominik

Dann ist ja der Stand alt beispielsweise, weil die Verbindung.

Janis

Ja, die Frage ist, ob wir das überhaupt übertragen müssen.

Janis

Also Microservices.

Janis

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.

Janis

Dann schreibe ich das in eine Datenbank, die extra dafür vorgesehen ist.

Influence zum Beispiel.

Janis

Prometheus ist auch eine, aber die ist eher so für Metrikdaten.

Janis

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.

Janis

Das heißt, ich habe diesen Prozess mal getrennt und auf einmal habe ich Möglichkeiten.

Janis

Also 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.

Janis

So, wie kann ich die Architektur jetzt vielleicht sogar günstig halten?

Janis

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.

Janis

Jetzt kann ich anfangen, den Schreibprozess zu optimieren, meinetwegen, ich mache es jetzt mal ganz wild, meinetwegen einen Kafka in die Mitte zu hängen.

Janis

So, dann schreibe ich jetzt Richtung Kafka rein.

Janis

Kafka ist letztlich so ein Topic, hast einzelne Nachrichten drin.

Janis

Und diese Nachrichten, die können asynchron zum Prozess konsumiert werden.

Janis

Und zu Schreibzeiten schreibe ich ganz viele Nachrichten in dieses Topic.

Janis

Ich habe aber vielleicht gar nicht die Kapazität, um alles in Echtzeit abzuarbeiten.

Janis

Aber vielleicht ist es auch gar nicht schlimm.

Janis

Ich kann die nachabarbeiten.

Janis

Also von diesem Tickets-System kann ich mir dann meinetwegen 10 Minuten verzögert Nachrichten rausziehen und die dann erst in die Datenbank reinschreiben.

Janis

Und dann habe ich nicht das Problem, dass ich meinen Server unter Umständen dynamisch skalieren muss.

Janis

Oder generell hochskalieren muss.

Jochen

Ja, aber ja gut, aber da wäre halt die Frage, was ist ja, also ja, es ist alles valide, aber irgendwie, was ist teurer, irgendwie die Architektur aufzuteilen oder irgendwie einen von dickeren Server zu kaufen?

Janis

Ja, aber auch da, da gibt es so sehr, sehr schöne Grafen, dass es natürlich ein Monolith ist sehr, sehr lange günstiger als Microsoft, das stimmt.

Janis

Aber irgendwann, irgendwann kann man zu diesem Punkt kommen, wo es überproportional teurer wird, sich größere Hardware zu kaufen.

Janis

Also erstmal steigt das irgendwie sehr, sehr gradlinig.

Janis

Ich geh es kollier hier immer so rum, aber ist ja Podcast.

Janis

Nee, aber erstmal steigt das relativ geradlinig, also irgendwie iPhone X3X, ne?

Janis

Kann man sich sehr schön vorstellen.

Janis

Und hinten raus wird es dann auf einmal exponentiell.

Janis

Dann explodieren die die Kosten, weil die Maschinen dann einfach wirklich sehr, sehr teuer wird.

Dominik

Also ich finde, das Problem, was du gerade gesprochen hast, müsste man eigentlich nochmal mit Leuten, die noch ein bisschen mehr Spezialbissen Datenbank haben, sprechen, weil für mich hört sich das nicht so an, als wäre da der Flaschenhals an der richtigen Stelle.

Das gibt es alles schon.

Jochen

Also es ist halt die Frage, ob es so häufig ist.

Jochen

Ich meine, das Problem ist halt, also was du dafür aufgibst, ist natürlich die Konsistenz.

Dominik

Ja, das stimmt halt einfach nicht mehr.

Dominik

Und ich habe halt dazwischen noch so einen extra Layer, wenn ich jetzt einen Kafka dazwischenpacke.

Dominik

Warum?

Also wenn ich jetzt eigentlich direkt aus der Datenbank lesen könnte und die Frage, du sagst halt die Datenbank wird langsam, das verstehe ich nicht so genau, weil wie viele Verbindungen hat die denn dann offen?

Jochen

Nein, aber einfach die Schreib, zum Beispiel, du hast ja nur eine bestimmte Bandbreite zu deinen Platten, wenn du es wirklich schreiben musst.

Dominik

Wie du denn, ganz ehrlich, die Postgres hängt im Bram.

Jochen

Nee, nee, nee, nee, nee.

Jochen

Wenn du was schreibst, nein, nein, das ist ja.

Jochen

Nee, ja, nur beim Lesen, nicht beim Schreiben.

Dominik

Doch, beim Schreiben auch.

Dominik

Nein.

Dominik

Doch, das wird danach mit Vakuum reingeschrieben.

Jochen

Nee, also das ist, wenn die Transaktion fertig ist, dann hat Postgres F-Sync hinterher aufgerufen.

Jochen

Dann ist das, dann hat die Platte gesagt, ich hab's weggeschrieben.

Ja.

Jochen

Das macht Postgres unfassbar viel langsamer als sowas wie Riddis.

Jochen

Aber bei Ridis ist halt auch, wenn du dann, wenn du das Ding ausmachst, dann sind die Daten sind halt weg.

Jochen

Bei Postgres nicht, dann sind die Daten halt noch da.

Jochen

Das ist der große Unterschied.

Dominik

Ja, aber die Frage ist halt, was halt dann Schreiben und so weiter, wann wird das halt überhaupt freigegeben?

Dominik

Also das ist ja egal, das macht aber.

Jochen

Wenn wir die Datenbank sagt, deine Transaktion ist durch, dann ist das wirklich so.

Dominik

Ja, aber das macht dann nicht.

Dominik

Das macht aber die Postgres nicht langsamer, sondern das ist doch halt nur langsamer.

Jochen

Ja, aber das macht die langsamer.

Dominik

Ja, aber das macht schreiben langsamer, aber das heißt nicht, dass das Lesen langsamer wird.

Jochen

Ja, doch, weil in der Zeit, wo du was schreibst, kannst du nichts lesen.

Dominik

Nein, du kannst nur die Sachen nicht lesen, die geschrieben werden.

Jochen

Also du kannst die Sachen nicht lesen, die noch nicht im Hauptschall hier sind, ja, sagen wir so.

Dominik

Ja, genau, also die noch nicht auf der Platte sind, die kannst du nicht schreiben.

Dominik

Also kannst du nicht lesen, aber das heißt ja nicht, dass du nicht die Sachen, die vor drin sind, lesen kannst, weil die Transaktion von den Sachen, die noch nicht geschrieben ist, noch nicht fertig ist.

Dominik

Das heißt, dass du den Stand der Schreibsachen nicht kannst, das heißt aber nicht, dass das Lesen langsamer wird.

Jochen

Doch, ja, letztlich.

Dominik

Nein, das ist ein eigener Prozess.

Dominik

Also völlig unabhängig davon ist.

Jochen

Also wenn irgendwann quasi, wenn du so viel schreibst, dass du nichts anderes mehr machen 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?

Dominik

Also lesen nimmst du eh noch auch einen Speicher, das ist ja egal.

Dominik

Das IG einfach nur, dass das nicht mehr so gut ist.

Jochen

Wenn dein Work-Z komplett im Hauptspeicher ist, ja.

Dominik

Ja, das ist sowieso immer im Hauptspeicher.

Dominik

Das ist immer im Hauptspeicher, das ist wirklich so.

Dominik

Und das Einzige, was halt da dann dein Constraint ist, ist dann die CPU-Kerne, die halt damit beschäftigt sind.

Dominik

Wie viele Prozesse du offen hast, also das heißt, wie viel gleichzeitig Verbindungen, die auf deiner Datenbank stehen.

Jochen

Ja, aber 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.

Jochen

Das, wo du dann merkst, okay, ich habe 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.

Jochen

Also deine Replikas.

Jochen

Wenn du das nicht mehr hinkriegst, wenn die, wenn dein Replikationslack immer größer wird, weil du das nicht mehr weggeschrieben bekommst, was du an Schreiblast hast, in dem Moment hast du ein Problem mit deiner Architektur.

Jochen

Dann musst du das sowieso aufbrechen, ob du deinen Microservice machst oder sozusagen vertikal auftrennst oder ob du es horizontal auftrennst, indem du dann halt sozusagen das schadest nach irgendeinem Hash oder so, wo du dann halt mehrere Master hast, in die du schreibst.

Dominik

Ja, auch Master Slave, ja.

Jochen

Genau, das kannst du dir dann überlegen, ist beides schrecklich und mach dein ganzes Datenbankmodell im Grunde kaputt und inkonsistent, ja.

Jochen

Also das aber kannst du dann nicht mehr aussuchen.

Dominik

Ja, aber du Master Slave-System mit so einer Postgres, dann hast du dann, wo die Dachin reinschreiben und dann lesen die halt aus dem anderen Teil.

Jochen

Ja, aber was ist, wenn deine Slaves das nicht mehr wegschreiben können?

Jochen

Das passiert.

Das ist so.

Jochen

Das ist halt, dann bist du an dem Punkt, wo es

nicht mehr geht.

Dominik

Noch mehr Slaves?

Jochen

Nein, die können es nicht mehr schnell genug wegschreiben.

Das ist ja vorbei.

Jochen

An der Stelle, also ich meine, das ist heutzutage, also wer kommt an diese Punkte?

Jochen

Also das ist halt, ja, das ist nicht so häufig, denke ich.

Jochen

Aber das kann schon passieren und dann musst du Schaden.

Dominik

Also 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.

Janis

Ja, und da hilft dann noch Kafka.

Janis

Da hast du die Nachrichten schön in einem Topic und holst du die später nochmal ab.

Janis

Die Frage ist natürlich, wie lange sie da drin bleiben, aber da brauchst du halt genug Worker.

Janis

Also diesen Prozess, den müsstest du dann gewährleisten können, aber auch da hast du Möglichkeiten.

Janis

Dann kannst du sagen, irgendwie bist du so und so viel Speicher soll vorgehalten werden oder so und so lange.

Janis

Und dann kannst du dir erst wegschmeißen und du musst auch überlegen, brauche ich alles?

Janis

Brauche ich alles, alles?

Dominik

Gut, dann hat was halt eine Latenz dann, ne?

Ja.

Janis

Nicht nur Latenz, ne?

Janis

Also vielleicht hast du auch einen Datenverlust unter Umständen.

Janis

Aber die Frage ist, kann ich vielleicht Daten verlieren?

Janis

Also 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.

Janis

Und dann ist das Problem, worüber wir uns gerade streiten, gar nicht mehr so schlimm.

Janis

Aber das Problem ist, in dem Zeitpunkt schon, wenn du es auf einmal in einer monolithischen Struktur vielleicht drin 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.

Janis

Dann stoppst du halt eine gewisse Zeit lang mal den Schreibprozess und hast dann meinetwegen ein Konsumer-Lack im Kafka, aber das kannst du ja irgendwie so zurechtschrauben, dass es funktioniert, dass es deine Architektur verkraftet.

Janis

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.

Janis

Aber das ist ein Problem, welches man bekämpfen kann.

Dominik

Wie viele IT-Geräte muss es denn denn da gegeben haben, damit das ein Problem hat?

Jochen

Keine Ahnung, das wurde schon

ganz gut.

Kommt drauf, aber das war's.

Da spielt ja auch mit rein.

Jochen

Ja, aber letztendlich, also diese Art von Problem hast du natürlich immer.

Jochen

Also Chris Küntopp, der hat das mal irgendwann irgendwie so schön genannt, es gibt ja im Grunde zwei unterschiedliche Arten von Datenbanken.

Jochen

Es gibt halt die OLTP, Online-Transaction Processing Datenbanken.

Jochen

Das sind halt so die, wenn du jetzt auf irgendwie einen Kaufen-Button klickst, die dann halt die Kauftransaktionen machen.

Jochen

Und es gibt halt OLAP, also Online Analytical Processing, das ist halt so dein Data Warehouse irgendwie.

Jochen

Und der sagte das mal sehr schön, also werden jetzt die Leute irgendwas machen und du schreibst halt Sachen, also OTP ist zum Schreiben gedacht und Olaf eher zum Lesen.

Jochen

So, wenn, wenn die jetzt irgendwie die ganze Zeit irgendwie diese Geschichten generieren, dann, also im Grunde, jede OTP-Datenbank hat in sich so ein Data Warehouse, das raus möchte.

Jochen

Irgendwie von einer gewissen Zeit.

Jochen

Das hatte ich gerade ein sehr schönes Bild.

Jochen

Ja, das ist halt so.

Jochen

Irgendwann willst du das halt vielleicht da raustrennen.

Ja.

Dominik

Ja, aber spannend, also dass dann doch wieder um Datenbank ging am Ende, bei der Frage, ob man Microservice an der Stelle macht oder nicht.

Jochen

Nein, das weiß ich ja gerade gar nicht.

Dominik

Kann doch sein, dass halt die Datenhaltung, da waren wir auch fast mit angefangen, dass das Datenmodell, die Datenhaltung, dafür sehr relevant ist.

Janis

Das ist einfach generell ein Problem, ne?

Janis

Aber das Schöne ist, dass du quasi, und das ist vielleicht eher der Knackpunkt, das Schöne ist, dass man erkannt hat, okay, wir haben jetzt IoT-Daten, die ich vielleicht anders behandeln möchte als meine Nutzerdaten, die ich vielleicht anders ablegen möchte.

Janis

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?

Janis

Ich hatte das meinen wegen einer SQL-Django-Anwendung, erkenne aber, dass das kein SQL-Kontext ist.

Janis

Habe ich jetzt die Leute bei mir, die sich mit dieser Art von Daten auskennen oder brauche ich dafür vielleicht neue Daten?

Janis

Sorry, neue neue Leute.

Janis

Und kriege ich diese neuen Leute in das bestehende Team rein?

Janis

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.

Janis

Für das Problem, welches ich jetzt gerade versuche zu lösen?

Janis

Und ich meine, das ist jetzt sehr, sehr schöne Wendung, ne?

Janis

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.

Dominik

Ja, das kann Cost-Efficient sein an der Stelle vielleicht.

Dominik

Ja, das hat mehrere Trade-offs, ne?

Janis

Oder 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.

Janis

So, und dann erkennst du, okay, das ist im Bereich Machine Learning.

Janis

Das ist in Python mehr vertreten, da hast du in Python eine größere Community, hast du vielleicht auch bessere Lösungen für.

Janis

Dann suchst du dir ein Python-Team aus, welches dir dafür ein Model baut, welches dir dafür eine API bereitstellt.

Janis

Kriegst du das jetzt unbedingt in deinen Java-Monoliten rein oder stellst du deinen Service in deinem?

Janis

Und versuchst du das vielleicht zu integrieren.

Janis

Das Problem, welches dann natürlich aufkommt, natürlich, wenn du von Monolithen kommst, ist, dass du von einer konsistenten Struktur unter Umstände in eine inkonsistente reinläufst.

Dominik

Ja, du kannst vielleicht gar nicht warten.

Dominik

Du musst halt immer wieder auf das externe Team zurückgreifen.

Janis

Ja, es muss ja nicht mal ein externes Team sein, das kann ja auch ein neues internes Team sein.

Dominik

Ja, oder dann halt intern, ne?

Aber du bist halt da.

Janis

Klar, dieses Problem hast du dir jetzt geschaffen.

Janis

Das ist irgendwo ein selbstgeschaffenes Problem.

Janis

Die Frage ist natürlich, komme ich da drum herum?

Janis

Wie ist der Trade-off?

Janis

Also man hat einfach effektiv immer einen Trade-Off.

Janis

Die Frage ist immer, was ist das größere Übel am Ende?

Janis

Und was bringt mich jetzt schneller vorwärts?

Jochen

Ja, insofern, also ja, würde ich auch so sagen, also ich denke auch, es gibt gerade gerade, also wenn man halt ganz viele Leute hat und das sehr groß wird, dann wird Microservices immer attraktiver an die.

Jochen

Aber auf der anderen Seite, aber dass das halt irgendwie jetzt heutzutage oft irgendwie so als, das macht man halt so und das ist halt jetzt irgendwie so.

Das ist ein volliger Quatsch.

Jochen

Das ist so ein bisschen, da würde ich mir denken, ich weiß nicht.

Jochen

Und ich meine, da gibt es ja auch so einen schönen Begriff von David Hannemeyer-Henson, dem Ruby and Rails-Menschen, der sagte, der versuchte den Monolith-Begriff halt aufzuwerten, indem er dann noch ein Adjektiv vorgestellt hat.

Jochen

Man nennt das jetzt immer Majestic Monolith sozusagen.

Jochen

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, ja,

Janis

auch wenn du schnell was bauen willst.

Genau.

Janis

Also das ist ja auch sehr, sehr bekannt.

Janis

Also wenn du jetzt gerade anfängst, dann fängst du natürlich nicht mit Microservices an.

Janis

Also du ziehst jetzt von null auf einen Code hoch, hast ein kleines Team, vielleicht sogar ein großes Team, das ist komplett egal.

Janis

Aber eigentlich denkt man da erstmal monolithisch nach.

Janis

Einfach um vorwärts zu kommen, um wenig Komplexität erstmal zu haben, weil die Komplexität, die kommt erst mit der Zeit.

Dominik

Du bist halt jedes Mal noch neuen Klotz ans Bein irgendwie, ne?

Dominik

Und auch noch weitere Komplexität und weitere Abhängigkeiten und Dependencies, wenn du halt einen neuen Service setzt.

Janis

Aber irgendwann wird das Erfahrungsgemäß dann so groß, dass du deine Prozesse so verlangsamst und so ineinander verstrickst und dass sich die einzelnen Entwickler auf einem engen Raum so sehr auf die Füße treten, dass du eben drüber nachdenken musst, das Ding aufzubrechen.

Janis

Und das ist dann, haben wir ja auch gesagt, dann migriert man üblicherweise langsam rüber Richtung Microservice.

Janis

Das ist man lagert einzelne Funktionalitäten aus, schaut, wie sie alleine dastehen und dann bekommst du auch wesentlich mehr Möglichkeiten.

Janis

Ich meine, ein Vorteil oder Nachteil eines Monolithen ist mitunter, auch dass die nicht immer unbedingt leicht sind, alle Prozesse zu parallelisieren.

Janis

Also du kannst einen Monolithen sehr schwer teilweise parallel laufen lassen auf verschiedenen Instanzen.

Janis

Du musst es nicht immer unbedingt.

Janis

Aber das ist bei einer großen, komplexen Struktur mit vielen verschiedenen States ein bisschen schwieriger.

Janis

Und manchmal ist es leichter, wenn du dir dann einzelne Teile daraus nimmst 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.

Janis

Da würdest du dir vielleicht wünschen, okay, ich will meinen Server jetzt, will ich nicht mehr RAM geben.

Janis

Eigentlich hätte ich lieber einen weiteren dazu gebucht für diesen Service, weil es vielleicht günstiger ist, weil es vielleicht leichter zu machen ist.

Janis

Dann ziehst du einfach parallel noch eine Note hoch.

Janis

Das wünscht man sich ja auch manchmal.

Janis

Und das ist zum Beispiel ein Microservice ist einfach natürlicherweise leichter als ein Monolithen.

Janis

Wären wir ein bisschen positiver.

Janis

Ist auch schön.

Ja, nicht negativer.

Dominik

Also es geht halt so ein bisschen darum, wann das der Fall ist.

Dominik

Welcher Use Case dann wirklich dafür ist.

Jochen

Also ich denke

Jochen

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, irgendwie da nochmal drüber nachzudenken, wie sind denn eigentlich die Schnittstellen und so, wie würde man dann modularisieren wollen.

Jochen

Also sozusagen eigentlich würde man dann anfangen und sagen, okay, machen wir es doch mal modular, also keine Ahnung, ich habe jetzt irgendwie einen Modoliten und der notifiziert irgendwie User für irgendwas.

Jochen

Und jetzt möchte ich das da raustrennen, weil irgendwie dieses ganze Handling von unterschiedlichen Wegen, wenn ich User notifiziere, ist halt problematisch und ich würde das gerne da raustrennen.

Jochen

Dann wäre halt eine gute, die schlechte Strategie wäre halt irgendwie sozusagen irgendwie den Funktion, also irgendwie eine JSON- oder HTTP-API irgendwie jetzt vor die Funktion, die die Notifizierungen macht, zu klemmen und das halt auf einen anderen irgendwo anders hinzulegen und dann rufen halt aus dem Monolithen die Sachen halt dann diese JSON-API auf oder so.

Jochen

Das ist leider halt das, was oft gemacht wird und das wird dann halt sehr schrecklich.

Jochen

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.

Jochen

Und jetzt machen wir einfach eine neue Implementation, die halt dann über den Microservice geht.

Jochen

Und wir können das halt auch hinterher gucken, dann machen wir das Ganze hinter den 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?

Jochen

Sind das, ist das, oder wir schicken es gar nicht raus, wir gucken einfach nur, wir schicken geben jetzt, wir schicken es an beide, wie verhält sich das denn unter Last und so?

Jochen

Und dann kann man das schön, denke ich, machen.

Jochen

Aber die Voraussetzung ist eigentlich, dass man das halt schon ordentlich modularisiert hat, dass man ordentliche Interfaces hat, dass man das irgendwie schon halbwegs gut strukturiert hat.

Jochen

Und ja, dann und das ist vielleicht auch so eine Möglichkeit, dann an der Stelle nochmal irgendwie drüber nachzudenken, wie modularisiert man eigentlich ordentlich.

Auf jeden Fall.

Janis

Ich meine, auch um noch eine positive weitere Sache aufzugreifen, die mir gerade in den Sinn kommt.

Janis

Oft ist es ja so, dass, ich sage jetzt mal, ein Datensatz, eine Row, sehr viele verschiedene Prozesse durchläuft, um in die Datenbank zu kommen.

Janis

Also die wird von verschiedenen Prozessen genutzt, manchmal transformiert, also die wird sehr, sehr oft durchgereicht.

Janis

Und das fiel mir jetzt gerade ein, als er ja auch angesprochen hat.

Janis

Wenn du das jetzt auf einmal anfängst, in Microservices aufzuteilen, dann musst du dir natürlich überlegen, okay, wie gestale ich jetzt den Weg vom Anfang bis zum Ende durch.

Janis

Und du bekommst auf einmal wesentlich mehr Möglichkeiten.

Janis

Also üblicherweise ist es ja so, dass dieser Prozess in irgendeiner Form sehr, sehr synchron ist.

Janis

Also der geht von A nach B.

Janis

Und im Prinzip wartet der Client darauf, dass der hinten angekommen ist.

Janis

So wird es halt sehr oft strukturiert.

Janis

Oder die Anwendung wartet auf eine Antwort, die sie nicht unbedingt braucht.

Janis

Und in einer Microservice-Welt kannst du eben sehr, sehr schön darüber überlegen, wie kommunizieren Services allgemein miteinander.

Janis

Und auf einmal stellt man eben fest, dass sie überhaupt nicht synchron miteinander kommunizieren müssen, sondern zum Beispiel auch über Cues und Topics.

Janis

Und dann schickst du da ein Event hin und dann ist das so ein Write-Ony-Ding.

Janis

Dann schicke ich diesen einen Datensatz und diesen Endpunkt, der schreibt es Richtung Topic und von diesem Topic kann das dann von verschiedenen Microservices gleichzeitig konsumiert werden, ohne dass ich jetzt irgendwie einen Async bei mir im Code einbauen musste, um das darzustellen.

Janis

Und der Nutzer, der kann sofort weitermachen.

Janis

Der muss nicht unbedingt auf die wahre Antwort warten, wenn das ein Bride-only-Prozess ist.

Janis

Auch ein Vorteil.

Janis

Oder auch sehr schön teilweise zu design.

Jochen

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-Boost hat und dann kann man das halt auch vielleicht nach außen verlagern.

Jochen

Aber ja, also ich meine, das ist halt auch so was, wo man dann vielleicht mal drüber nachdenken kann, wie strukturiert man die Applikation eigentlich so, dass das halt irgendwie so funktioniert.

Jochen

Ja, weil

Janis

es ist halt saukomplex, ne?

Janis

Also das muss man halt einfach sagen.

Dominik

Da braucht man diesen Service-Boster, diesen Message oder diesen Message-Boker dann halt.

Dominik

Und wenn man den halt hat.

Janis

Braucht man ihn, will man ihn.

Dominik

Die musst du ja auch dann wieder mitbetreuen.

Janis

Ja, klar, ist das eine Dependency, du brauchst die Kompetenz, ne?

Janis

Das ist halt immer so das Ding mit der Komplexität.

Janis

Aber der Service auf der anderen Seite, der ist vielleicht auch unter Umständen einfach austauschbarer.

Janis

Du kannst ihn relativ problemfrei austauschen, ohne dass du denn aktive Anwendungen affektierst.

Janis

Oder du kannst ihn leichter deployen, ohne dass der Service darauf warten muss, dass das Deployment abgeschlossen ist.

Janis

Zum Beispiel.

Janis

Also du hast weniger Downtime dadurch.

Janis

Also klar, du brauchst ihn nicht.

Janis

Du kannst auch weiterhin synchron denken.

Janis

Wenn wir jetzt nur in der Welt von Microservices unterstellen.

Dominik

Ja, du wenigstens.

Dominik

Synchron hat das ja, glaube ich, gar nicht gekriegt.

Janis

Ja, oder per AP-Call.

Janis

Du kannst.

Janis

Wenn wir in der Welt von Microservices unterwegs sind, dann haben wir auf einmal mehr Möglichkeiten, wie einzelne Services miteinander kommunizieren können und wie wir gewisse Prozesse strukturieren.

Dominik

Das verstehe ich nicht genau.

Dominik

Also was meinst du mit mehr Möglichkeiten so kommunizieren?

Janis

Ja, die Service Bus oder die Ques, beziehungsweise Topics und Ques sind natürlich jetzt eine Möglichkeit mehr, die wir in einer Anwendung.

Dominik

Du kannst ja, die kannst ja auch, oder da hatte ich auch gerade gerade, kannst du ja auch in die Anwendung einbauen.

Janis

Ja, aber ist das immer so geil?

Jochen

Ja, also ich würde sagen, das ist halt so ein bisschen die Voraussetzung dafür, dass man das überhaupt dann auftrennen kann, weil, äh, oder ich sag mal, ich kenne, ist halt, ist halt die Frage.

Jochen

Also ich kenne das halt so, dass man das intern in der Applikation vor allen Dingen macht.

Jochen

Also das ist halt dann aufteils, die Dinge, die man tut, halt man halt auch in Commands, Events und irgendwie vielleicht Dokumente gibt es halt auch.

Jochen

Da gibt es ja diese ganzen Enterprise-Service-Bus, irgendwie, weiß ich nicht, irgendwas Patterns.

Jochen

Es ist halt die Frage, ob er das braucht, keine Ahnung.

Jochen

Ich habe mich letztens mich da so ein bisschen mit beschäftigt, weil ich mich einfach mal interessiert hat, wie man denn sowas baut.

Jochen

Da gibt es ja auch das Buch, er werde ich irgendwie auch in jeder Episode irgendwie, oh, hier liegt es rum, Architecture Patterns with Python.

Jochen

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 fangen halt an, naiv mit so einer Flask-Applikation und bauen das dann halt immer weiter um, sodass am Schluss bleibt halt so ein Service-Bus übrig.

Jochen

Und das könnte man dann theoretisch auch in Microservices dann halt alles dann auslagern, was man da so tut.

Jochen

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, also dass man halt intern schon, 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 Ques und so, denke ich, der Vorteil ist halt einfach, wenn du es, wenn du HTTP oder JSON-RPs hast, dann machst du halt jedes Mal zum Beispiel so ein TLS-Handshake oder sowas.

Jochen

Das ist natürlich extrem ist halt verbraucht immer CPU.

Dominik

Du kannst halt ein Socket aufhaben.

Jochen

Oder so.

Jochen

Ja, wie bei HTTP.

Dominik

Nein, nein.

Dominik

Einfach kein HTTP, sondern du hast halt ein Socket auf, irgendwo in der Verbindung.

Jochen

Ja, okay, und wie sicherst du die irgendwie ab und welchen Standard, wie machst du das?

Dominik

Keine Ahnung, also wie Websocket genau unten drunter funktioniert.

Dominik

Aber der hat ja am Anfang beispielsweise auch seinen Handshake, aber der bleibt halt offen, der muss dann noch jedes Mal den neuen Handshake machen, oder?

Jochen

Ja, bei HTTP geht das nicht.

Jochen

Bei HTTP gibt es immer nur Request-Responses.

Dominik

Genau, ja, aber ich kann jetzt ein Socket aufmachen, wenn ich jetzt auch so ein Q-Ding habe.

Jochen

Genau, das Support bei der Queue hast du, da steht halt eine Verbindung und die bleibt halt und du kannst halt mehr Sachen drüber schicken, genau.

Das ist halt der Riesenvorteil.

Dominik

Ja, genau, aber ich verstehe jetzt nicht, wo der Unterschied hat, warum brauche ich dafür einen Microservice?

Dominik

Also das hat für mich nicht so viel miteinander zu tun.

Jochen

Nee, aber die Frage ist jetzt, wenn du jetzt Microservices hast, wie verbindest du die miteinander?

Jochen

Oder vielleicht habe ich die Frage einfach nicht verstanden.

Jochen

Ich dachte, das wäre die Frage, warum man nimmt man denn da so einen Bus oder so eine Que, warum nimmt man nicht einfach HTTP oder so?

Dominik

Ja, also die Frage wäre, also wenn ich jetzt schon so einen Bus nehme hatte, warum mache ich das bei Microservice?

Dominik

Also warum mache ich das nicht trotzdem mit meinen Monolithen oder so?

Jochen

Ja, ja, genau, da würde ich sagen, ja, das kann man, so würde ich anfangen.

Jochen

Ich würde so anfangen, dass man das zuerst so baut, dass man das intern benutzt.

Dominik

Also meine Meinung, es kann halt schon sein, dass man sowas braucht.

Janis

Die Frage ist, ob man es in einem Monolithen will, ne?

Warum nicht?

Janis

Ich hatte jetzt, also ich persönlich hatte jetzt noch nicht das Anliegen oder das Verlangen, dass ich in einem Monolithen mir sowas gewünscht hätte.

Janis

Weil die Wege dort dann natürlicherweise kürzer sind, ne?

Dominik

Na gut, also du kannst halt einfach jetzt theoretisch noch einen Container zu deinem Deployment spawnen, wo halt irgendwie so ein Kafka oder ein Redis oder irgendwas läuft.

Jochen

Nee, nee, das brauchst du ja nicht.

Jochen

Wenn du es intern machst, brauchst du das ja nicht.

Jochen

Das ist einfach nur Funktionsaufruf.

Jochen

Da ist ja eine Queue.

Jochen

Einfach zum Beispiel in Python ist es halt einfach nur ein Q-Modell.

Okay.

Jochen

Also vom Qur Q sozusagen oder so.

Jochen

Und dann machst du halt, solange irgendwas in der Q drin ist, machst du halt irgendwie rufst du Funktionen auf.

Jochen

Das war's.

Jochen

Das ist auch nicht, ja.

Kann man durchaus machen.

Janis

Nicht verwendet.

Janis

Da höre ich jetzt zum ersten Mal von tatsächlich, dass das so ein Python-Ding ist.

Jochen

Es hat aber nichts mit Netzwerkverbindungen oder so.

Nein, nein, nein.

Janis

Ist das dann einfach irgendwie so ein State, der existiert, global und cool.

Jochen

Ja, man kann das einfach so, man kann diese Muster ja durchaus auch einfach so, deswegen meine ich, also wie man die Struktur aufteilt und die Architektur von einem Ding baut, das kann man ja auch schon vorher richtig machen quasi.

Jochen

Und dann kann man es halt auch aufteilen, oder es ist sehr einfach, das aufzuteilen, während wenn man jetzt einen Modoliten hat und das ist tatsächlich, ich fürchte, also ich 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 Mutt, der halt irgendwie kompliziert und komisch ist und wo sie nicht weiterkommen.

Jochen

Und jetzt suchen sie nach irgendeiner Lösung für dieses Problem.

Jochen

Und dann kommen sie auf Microservice, stürzen sie auf Microservices und sagen so, was ist die Lösung für mein Problem?

Janis

Ich hänge weiter vorne, ich hänge weiter vorne.

Janis

Ich will wissen, was passiert denn mit dieser Queue, wenn der Service eine Downtime hat?

Jochen

Nein, dass du einfach nur ein Prozess da ist.

Das ist einfach ein Prozess.

Janis

Also die anderen, die funktionieren irgendwie weiter oder ist dann irgendwie, weiß ich nicht, läuft in einem separaten Thread in einem gleichen.

Jochen

Alles in einem Thread im gleichen Prozess.

Jochen

Das Einzige, was es halt sozusagen bringt, ist, dass ich die Sachen halt sauber voneinander getrennt habe.

Jochen

Ich mache halt auch, ich mache halt immer, wenn ich irgendwas schreiben möchte, mache ich halt einen Command und ich habe halt dann meine Eventhändler, die alles Mögliche machen.

Jochen

So zum Beispiel habe ich halt einen Event-Händler, der schickt halt das Event dann auf dem Websocket raus für irgendeinen Client, einen anderen Eventhändler, der tritt irgendwie einen Prozess los, einen anderen so.

Jochen

Und das kann ich ja, aber das ist alles nur Funktionsaufrufe, die nacheinander passieren.

Jochen

Das ist aber alles im gleichen Prozess.

Janis

Okay, also für mich so zum Verständnis.

Janis

Vielleicht ergibt sich ja dann so die Möglichkeit, dass wir alle erkennen, okay, wir brauchen unbedingt Kafka.

Janis

Nein, aber nur, damit ich das verstehe, nehmen wir jetzt mal an, wir sind jetzt in der Django-Anwendung unterwegs, ja, und wir schicken einen Request rein.

Janis

So, und der kommt jetzt in die Queue.

Janis

Die erste Frage ist, was passiert beim User?

Janis

Bekommt er sofort die Antwort zurück oder wartet er darauf, dass der Prozess von der Queue komplett verarbeitet wurde?

Jochen

Der bekommt sofort, also da ist es so, der bekommt sofort eine Antwort zurück.

Jochen

Und sozusagen die Eventhändler bearbeiten das dann halt später weiter.

Janis

Okay, die bearbeiten das später weiter.

Janis

Das heißt, wenn jetzt der nächste User kurz danach, bevor das alles abgearbeitet wurde, wieder einen Request hat.

Jochen

Was man schon zurückbekommt, ist, dass das Command durchgegangen ist.

Jochen

Also sozusagen man wartet bis, also ein Request kommt rein, sozusagen, dann erzeugt man einen Command, sagt irgendwie Handle-Command oder Handle, Service Bus Handle.

Jochen

Und wenn das zurückgekommen ist, kann man sicher sein, die Transaktion ist durch.

Jochen

Aber dann sind noch nicht alle Events bearbeitet worden.

Janis

Okay, dann sind noch nicht alle Events bearbeitet worden.

Jochen

Und dann schickt man einen User zurück, okay, das ist jetzt durchgegangen.

Janis

Okay, und jetzt kommt der nächste User an, bevor alle Events abgearbeitet wurden.

Janis

Und der kann dann unbekümmert das auch reinschicken, weil die Events im Hintergrund noch parallel abgearbeitet werden.

Janis

Okay, das heißt, das geht.

Janis

Und was passiert, wenn der Service jetzt crasht, bevor alle Events abgearbeitet wurden?

Jochen

Wenn das ganze Ding crasht, ist vorbei, dann events.

Jochen

Das ist ja nur ein Prozess.

Dann ist es weg, ja.

Janis

Das heißt, wir haben jetzt nicht irgendwie, okay.

Janis

Ja gut, aber wenn, wenn wir brauchen irgendwas, ja.

Janis

Also wenn ich mich jetzt dafür entscheiden würde, dass es unglaublich wichtig ist, weil dieser Prozess vielleicht eine Minute dauert, weil da irgendwie verschiedene Stages durchläuft.

Janis

Es gibt Gründe.

Janis

Keine Ahnung, du hast eine unglaublich langsame API irgendwo dranhängen.

Janis

Die braucht einfach ewig lang zum Antworten, aber der Nutzer, der soll nicht so lange auf diese API warten müssen, also kriegt er sofort die Antwort zurück.

Janis

Wir haben das jetzt in der Queue, das wartet, jetzt stürzt das Service ab.

Janis

Aber eigentlich will ich unbedingt diese Antwort haben, weil es meinetwegen eine Transaktion ist und der Nutzer gerade was gekauft hat.

Dominik

Du kannst das ja in der Datenbank kurz wegschreiben oder so.

Dominik

Du kannst ja sagen, du schreibst es direkt weg in die Datenbank, gibst du Nutzer die Antwort und hängst es dann in die Queue und dass er aus der Datenbank das dann nimmt.

Dominik

Und wenn das dann abstürzt, der Prozessquest, dann hast du ja an der Datenbank noch die Sachen stehen.

Dominik

Du kannst ja einen Fleck dran machen, ist dann fertig oder nicht.

Janis

Ja, ja, aber irgendwie hacky gefühlt.

Janis

Also ich weiß nicht, ob man damit wirklich das Problem löst, aber erstmal wird es dann so sein, dass der Prozess weg ist.

Wenn du es weggeschrieben

Dominik

hast, dann hast du das da noch nicht die Queue durch, aber du hast halt den Datenschafter gekommen ist und hast halt so.

Janis

Aber das macht natürlich den Prozess dann minimal langsamer, weil ich erst was in der Datenbank schreiben muss.

Janis

Das dauert nicht lang.

Janis

Ja, aber vielleicht doch zu lang.

Dominik

Na, glaube ich.

Dominik

Also wenn du irgendwie lange Sekundenweiter irgendwas

Janis

anderes wartet.

Dominik

Ja gut, aber das soll da nicht so lange dauern.

Janis

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 Informationen nicht verliere, wenn ich sie denn nicht verlieren muss.

Janis

Und da hilft dann natürlich irgendwie so.

Jochen

Also ja, ich meine, ich würde ja sagen, man kann das ja auch machen, aber ich meine, ja, also ja.

Jochen

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 in Kafka verwendet oder Rabbiting Queue oder nochmal was anderes, ist ja letztlich.

Janis

Fand ich einfach nur interessant gerade.

Janis

Also, wie gesagt, das war mir jetzt neu.

Janis

Ich meine, da tun sich viele Fragen auf, die mit dem eigentlichen Thema nichts zu tun haben.

Janis

Also, wie gehe ich mit Exception um?

Janis

Azure Service Pass hat zum Beispiel eine Exception Dead Letter Cue.

Janis

Das muss ich mir natürlich relativ umständlich dann da reinbauen.

Janis

Also ich brauche ein vergleichsweise umständlicheres Fehlerhandling, wenn ich das dann auch irgendwie über diese Ques abbauen möchte.

Janis

Das kann ich mir natürlich anders mitbauen.

Dominik

Du brauchst ja für jeden Microservice eigentlich so ein eigenes Fehlerhandling auch, ne?

Janis

Ja, also wenn du, wenn du, ja, oder ein Standard, wie man es dann am Ende sieht.

Janis

Also klar, das bringt einen dann wieder zurück zu den Microservices und wieder zu einem generellen Problem.

Janis

Und das Fehlerhandling entscheidet dann der Service selbst oder das Team in dem Fall.

Dominik

Also ich meine, ja, okay, beim Konsumenten meinte ich jetzt in einem.

Dominik

Ja, wenn du eh die Dependency hast, dass du irgendjemanden hast, der das konsumieren will und dann halt Sachen macht.

Dominik

Na gut, das Fehlerhändler brauchst du sogar so, je nachdem, was da drin steckt, aber du hast natürlich, meiner Meinung nach, wenn du Microservices hast, eine größere Anzahl an Fehlerquellen.

Jochen

Es wird halt viel komplizierter, du musst dir halt über all diese Dinge Gedanken machen im einzelnen Prozess, musst du das nicht.

Jochen

Da hast du alles egal.

Jochen

Da machst du halt ganz normales Exception Handling und da brauchst du all diese Dinge nicht.

Jochen

Wie was du hast?

Dominik

Was passiert denn mit Retry und gucken, genau, was da und lebst du noch und war der nur kurz weg, war die Verbindung weg, war der Server weg.

Janis

Ja, aber das, ich meine, wenn sich darum jeder Service selbst kümmern muss, dann ist es natürlich auch wieder nicht so kompliziert.

Janis

Also wenn ich immer nur auf meinen Punkt gucke und ich schaue, welche Möglichkeiten gibt es.

Janis

Also im gesamten Prozess gibt es immer mehr Fehlerpunkte als.

Dominik

Also du glaubst einfach dem, was dann da in deiner Que steht.

Beispielsweise.

Janis

Ja, das muss natürlich validiert werden, und wenn da was Falsches drinsteht, dann weiß ich, dass irgendwas vorher falsch war.

Janis

Klar, dass diese A von D-Balgen, die ist schon super schwer.

Dominik

Weißt du das, dass da irgendwas Falsches drinsteht?

Okay.

Janis

Also weiß ich nicht, wenn wir jetzt zum Beispiel, wir erwarten jetzt ein bestimmtes JSON in deiner Que.

Janis

Ja, und dieses JSON entspricht nicht dem richtigen Format, dann weiß ich, dass da vorher irgendwas falsch war.

Dominik

Okay, dann ist aber gar nicht passieren dürfen, dass es da reinkriegen wird.

Janis

Genau, das ist jetzt so ein sehr, sehr einfacher Fehler.

Janis

Es kann natürlich sein, dass ein falscher Nutzer irgendwie in deinem Datensatz drin steht und dein Service kann das nicht überprüfen.

Janis

Aber da sind wir dann wieder bei der Herausforderung des Datenmanagements.

Janis

Also wie gestalte ich das richtig, wie gestalte ich das gut, wie kann ich solche Sachen vermeiden, wie sünke ich vielleicht meine verschiedenen Datenbanken?

Janis

Oder ist dann wieder so ein eigenes Problemchen?

Janis

Oder großes Problem.

Dominik

Ja, aber das sind wieder bei Dependencies, ne?

Janis

Ja, man, man, irgendwann, wie Sachen so schön, irgendein Tod muss man sterben.

Janis

Also das ist halt leider so.

Dominik

Ja, nein, aber die Frage ist halt, ne, ich glaube, das hat halt so ein Overhead, wenn man mit vielen Microsoft arbeitet und den muss man irgendwie handeln können und den tradeoffen gegen den Overhead von ist es jetzt kompliziert oder die Sachen weiterzubauen in diesem Monolithen, weil halt dann es schwierig wird, das zu beherrschen.

Dominik

Und das ist vielleicht so ein bisschen.

Janis

Ja, es ist immer so ein bisschen trickreich.

Janis

Aber vielleicht, ja, ich frage mich immer, ob das jetzt wirklich schlimm ist.

Janis

Klar, als Unternehmen möchte ich natürlich so viel wie möglich wissen, aber als einzelner Entwickler, wie ich es einer bin, interessiert mich das eigentlich gar nicht so.

Janis

Also es ist mir eigentlich relativ egal, ob ich jetzt in einen Monolithen entwickel oder in einem Microservice.

Janis

Das ist auch so das, was meine persönliche Erfahrung ist.

Janis

Ich komme in ein Projekt rein, wo meinetwegen Microservices drin sind und dann bin ich damit total fein.

Janis

Dann gucke ich auf meine Sachen.

Janis

Klar, ich habe mehr Abstimmungen mit anderen Leuten, aber am Ende ist das, und das kann ich jetzt, ist jetzt auch nur eine gefühlte Sache, um die sozusagen, so kompliziert wie wir hier gerade reden, ist das in der Realität gar nicht.

Janis

Also wenn du jetzt überlegst, ich will jetzt zu Microservices rüber migrieren, ich habe einen funktionierenden Monolith, dann will ich das eigentlich klar, für dich ist das super kompliziert.

Janis

Aber für mich, der jetzt 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.

Janis

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.

Janis

Wie zum Beispiel Logging, wie zum Beispiel Metrikmonitoring, wie zum Beispiel.

Jochen

Ja, aber das kann auch wieder eine Gefahr sein.

Ja, das ist ein

Jochen

technischen Appiel, aber für den Kunden bringt das ja jetzt erstmal nichts.

Jochen

Aber gut, ja, ja, ich verstehe schon.

Janis

Also das, was ich vielleicht finde, ist, dass wir relativ kompliziert wurden, hatte ich so das Gefühl.

Janis

Aber der Sachverhalt an sich, der ist gefühlt gar nicht so komplex.

Janis

Und die Probleme, die wir aufgezählt haben, die sind schon da, aber die müssen nicht immer ein Problem sein.

Dominik

Ich bin aber tatsächlich doch ein bisschen dem, was Jochen gesagt hat.

Dominik

Die Frage ist, wann braucht man das überhaupt?

Dominik

Also du brauchst halt wirklich einen Fall, wo du dich auskennst und ein wirklich weißes Paustest, das kannst du nicht anders lösen, bevor du überhaupt die Entscheidung treffen würdest, machen wir jetzt einen Microservice draus, weil ich glaube, vorher muss man erstmal andere Sachen korrigieren

Jochen

oder so.

Jochen

Ja, also ich meine, das klingt jetzt alles schrecklich oder klingt jetzt, wenn ich alter Sack.

Jochen

Ich habe immer früher, wenn Leute sowas gesagt haben, so ja, ja.

Jochen

Aber tatsächlich, so Erfahrungen zu, also oft ist es irgendwie, also ich habe das Gefühl, dass das Problem in der Praxis ist oft Kompetenz.

Jochen

Oder weiß ich nicht, ob Leute das irgendwie hinkriegen oder nicht.

Dominik

Bataban, kann man das essen?

Jochen

Und die Sachen selber sind gar nicht so kompliziert, das da würde ich vollkommen recht geben.

Jochen

Ich würde es ausdrücken, es gibt einen nicht unerheblichen handwerklichen Teil bei dieser ganzen Geschichte.

Jochen

Und der ist gar nicht so gut in theoretischer, also das ist aber so, das ist halt nicht so viel, da ist gar nicht so viel Theorie.

Jochen

Also genau ich, ich weiß nicht, das ist vielleicht die falsche Analogie.

Jochen

Ich versuch's einfach mal, wenn man sagt irgendwie, ja, man möchte gerne irgendwie ein Bart schön gefliest haben oder so, dann das Buch zur Fliesenlegt-Theorie ist jetzt gar nicht so dick, vielleicht.

Jochen

Das heißt aber nicht, dass es ein einfaches Problem ist, ja.

Jochen

Wenn man das selber versucht, dann wird man feststellt, sieht nicht so aus, wie ich mir das vorgestellt habe, blöd.

Jochen

Und tatsächlich braucht man möglicherweise lange und muss lange üben und viele Badder gefließt haben, müssen man das richtig kann.

Jochen

Und das ist halt leider beim Programmieren manchmal auch irgendwie so.

Jochen

Und ja, das ist halt ein Problem, mit dem Organisationen dann auch oft konfrontiert sind und das nicht so richtig gelöst kriegt, irgendwie.

Jochen

Und dann probiert man das halt mit so komplizierten Geschichten irgendwie.

Jochen

Also ja, okay, aber eigentlich, und das Dumme ist, da gibt es halt auch keinen einfachen Weg raus.

Jochen

Seite der 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.

Jochen

Und dass es halt dann vielleicht so ein Zeithorizont mehrere Jahre oder so.

Jochen

So, das kann man ja, und dann ist noch nicht mal sichergestellt, dass es dann hinterher wirklich funktioniert.

Jochen

Sondern da kann man nur die Hoffnung drauf haben, dass es dann vielleicht funktioniert.

Jochen

Das ist ja da, das ist ja ganz schrecklich, ja.

Jochen

Wenn ich jetzt ein Projekt habe, wo meine Karriere dann hängt, ob das jetzt gut wird oder nicht.

Jochen

Das kann man ja niemandem mal zählen.

Jochen

Und dann versucht man halt irgendwie andere Sachen um das.

Jochen

Aber das ist halt alles nur, ja.

Dominik

Also ich glaube, ohne zu der Bartanalogie zurückzukommen, dann hast du halt entweder eine Mosaikwand oder du klebst halt alles mit einem Kleber drüber.

Dominik

Dann hast du eine glatte Wand.

Das ist auch, glaube ich, modisch gerade.

Dominik

Und ich glaube, das ist nicht so schlimm.

Jochen

Ja, ich weiß nicht.

Dominik

Wichtig ist, was kannst du in dem Bart machen?

Dominik

Kannst du da dich duschen zum Beispiel?

Jochen

Ja, ja, aber ich glaube, das ist halt tatsächlich gar nicht so einfach, das hinzukriegen, dass es wirklich gut funktioniert.

Jochen

Das ist halt irgendwie schwierig.

Ja, okay.

Dominik

Die Handwerkskunde ist natürlich schon sehr wichtig.

Jochen

Ja, oder ich weiß nicht, vielleicht ist das auch ein blödes Beispiel oder ein Musikinstrument spielen.

Jochen

Das ist vielleicht auch theoretisch gar nicht so.

Jochen

Gitarre gibt nicht so viele Seiten, aber trotzdem irgendwie muss man lange üben, bevor das irgendwie funktioniert.

Jochen

Und manche Bereiche, vielleicht nicht alle, aber manche Bereiche beim Programmieren sind halt auch so.

Jochen

Also dieser Modularisierungsbereich, da habe ich das Gefühl.

Musik ist gut, das ist irgendwie.

Dominik

Deine Kinder können relativ viel Krach machen und in das Musik.

Naja.

Dominik

Okay.

Dominik

Haben wir eine Quintessenz gefunden damit?

Janis

Es kommt drauf an.

Jochen

Genau.

Jochen

Das gibt es aber auch, da hat jemand schön, dass die Lösung aller IT-Probleme, irgendwie so ein O'Reilly-Buch, wo drauf steht, it depends.

Absolut.

Janis

Ich bleib dabei, es ist prinzipiell cool erstmal.

Janis

Das muss man halt sagen.

Janis

Es klingt natürlich cooler, auch wenn das natürlich niemals ein Entscheidungspunkt sein sollte.

Janis

Und auch sehr, sehr subjektiv ist.

Janis

Aber ich glaube, am Ende kommt es immer einfach drauf an, ob man es haben will, dass man es braucht.

Janis

Da haben wir wieder, es ist ein gutes Sales-Argument.

Janis

Wir machen Microservices, ist wunderbar.

Janis

Das klingt erstmal immer gut.

Dominik

Ja, okay.

Dominik

Ja, das ist auf jeden Fall ein gutes Argument, wenn man Geld für mich vergehen kann.

Ja, ja.

Janis

Rein technisch natürlich immer schwer.

Dominik

Da sind wir wieder bei den Finger, wo die Infra sagt, da bewegen wir uns gar nicht, sagt dann halt Consulting, ja, wir müssen ja nichts Neues drauf treiben, wieder ein bisschen Sales Marketing machen kann.

Jochen

Ja, aber das ist halt so ein bisschen, das ist halt auch das gleiche Problem wie, also ich glaube, ich versuche mal das noch auf den Punkt zu kriegen, ich krieg's nicht so richtig gut formuliert.

Jochen

Das ist halt so Probleme, die schwer lösbar sind, die produzieren im Grunde irgendwie so Scheinlösungen.

Jochen

So, weiß ich nicht, Gesundheit ist schwierig, ja, irgendwie, wenn man irgendwie eine schwere Krankheit bekommt oder so, dann hat man ein Problem, das sehr schwer lösbar ist, wo man nicht viel machen kann.

Jochen

So, das produziert halt irgendwie den ganzen Markt von irgendwie so Pseudo-Snack Oil, weiß ich nicht, Quacksalwann.

Jochen

Irgendwie Computersicher halt ein schwieriges Problem, ja, irgendwie dann auch da entsteht so eine Branche von irgendwie mehr so etwas halbwegs vielichtigen, weiß ich nicht genau.

Jochen

Vielleicht manche sind gut, manche sind nicht

so gut.

Dominik

Also da habe ich schon gesagt, dass ihr eine Firma betreiben, bei der bei Organ Energie auf Telefon anrufen kannst und ich schicke dir dann positive Energie durch das Universum zurück.

Jochen

Ja, also jetzt muss ja nur noch das entsprechende Problem suchen, was die Leute gerne löst haben.

Dominik

Oder halt so eine 009-Hänger-Nummer oder sowas.

Ja.

Dominik

Sorry, wir schweifen schon wieder ab.

Jochen

Aber 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.

Jochen

Also es ist halt, das ist halt wie, ich weiß nicht, es gibt die ganze Big Data, Blockchain, weiß ich nicht.

Jochen

Und Microsoft 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.

Jochen

Aber ich will gar nicht sagen, dass das jetzt irgendwie Unsinn wäre oder so, sondern nee, also es ist schon, es gibt da schon durchaus Abflussfall und das ist auch vielleicht eine gute Idee.

Janis

Sie machen nicht immer alles leichter, sie machen manchmal auch Sachen schwerer, aber sie machen dabei andere Sachen leichter.

Janis

Aber nicht alles.

Janis

Man hat einfach wirklich diesen, also das ist, ich glaube, das ist auch immer ganz wichtig zu sagen dabei.

Janis

Man hat halt wirklich ein Trade-off und der ist nicht ohne.

Janis

Der ist niemals ohne Mann.

Dominik

Ja, vielleicht wollte man jemanden fragen, der sich damit auskennt, bevor man Erinnerung macht.

Genau.

Jochen

Ja, keine Ahnung.

Jochen

Wir hätten, also ich hätte auch noch Pics, also wir können auch noch, ich weiß nicht genau, wie es aussieht.

Jochen

Wollen wir noch irgendwie, äh, gibt es noch irgendwie Themen oder haben wir schon alles gesagt, was wir sagen?

Dominik

Haben wir alles gesagt zu Microservices?

Janis

Bestimmt nicht.

Janis

Stimmt nicht, ja.

Dominik

Ja, ich habe noch eine andere Frage, aber das hat nichts mit den Pics zu tun, aber es ist dann Jochen.

Dominik

Aber haben wir noch irgendwas zu Microservices?

Dominik

Sonst würden wir das Thema einfach zumachen.

Machen wir es so.

Dominik

Du hast irgendwas mit File-Benchmarks gemacht, irgendwas war anders.

Jochen

Ah, okay.

Jochen

Ja, um, also das ist etwas, das mich ja auch schon eine ganze Zeit lang umtreibt.

Dominik

Sollen wir das beim nächsten Mal sonst erzählen?

Jochen

Nö, wir können das gerne, wir können das gerne, äh, wir können da gerne kurz drauf eingehen.

Jochen

Ja, also meine, die Frage, die mich beschäftigt hat, ist, weil ich würde ja gern, ich würde ja gern ins Hostin-Geschäft einsteigen.

Dominik

Ja, also ganz dick.

Jochen

Ja, genau.

Jochen

Und eine Frage, die mich da beschäftigt hat, also gerade Podcast-Hosting, ja, ich meine, wir betreiben unsere eigenen, wir sind ja unser eigener Podcast-Hoster tatsächlich.

Jochen

Und da sind das, das sind etwas spezielle Anforderungen, die Files sind groß.

Dominik

Ja, File-Serven, schnell File-Serven.

Genau, und die Frage ist jetzt, okay, mich ärgert, dass wir da so eine Abhängigkeit haben.

Jochen

Wir machen das über ein CDN, über Cloudfront und das ist auch teuer irgendwie.

Jochen

Erstaunlich teuer.

Jochen

Und die Frage wäre, kann man das nicht selber machen, weil wenn man irgendwie so ein, ich miete ja sowieso Server, auf denen ich Ding haben, deploye und da ist der Traffic frei.

Jochen

Warum kann man da nicht die Server, äh, die Files auch mit ausliefern?

Dominik

So mit einem Menü oder sowas.

Jochen

Ja, oder einfach im einfachsten Fall ein statischer Webserver.

Jochen

Das geht natürlich.

Jochen

Das Problem dabei ist halt, naja, also solche Dinge wie Authentifizierung und sowas ist halt schwierig.

Jochen

Wie ist das denn halt?

Jochen

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.

Jochen

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.

Jochen

Also nur wenn man authentifiziert ist.

Jochen

Wie macht man das dann denn?

Jochen

Das geht ja quasi gar nicht, wenn ich das auf dem statischen File-Server hätte, dann sobald die Files verfügbar sind.

Dominik

Wenn man den das kennt von dem Link dann, ja.

Jochen

Ist jetzt ein Detailproblem eigentlich, aber mir geht es, also wie wäre das denn, wenn ich das für andere machen wollen würde?

Jochen

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.

Jochen

Also, wie soll denn Authentifizierung funktionieren?

Jochen

Eigentlich gibt es dann halt diese ganzen Geschichten mit, man schickt halt sozusagen einen Request an den File-Server, der 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 er jetzt authentifiziert?

Jochen

Fragt der Microservice-Fall, bitte?

Fragt den Microservice.

Jochen

Ja, genau.

Jochen

Da hätte man dann auch schon so eine Art Microservice oder man hat halt, man schickt halt den Request zum Applikations-Server.

Jochen

Der Applikationsserver schickt aber nicht die File-Response zurück, sondern der 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 und so.

Und den X macht?

Jochen

Ja, genau, das gibt's, wie heißt das?

Jochen

X-Send-File oder ich war irgendwie so.

Ja, genau.

Jochen

Und also das gibt es alles, alles sehr hässlich und funktioniert auch alles nicht so richtig gut.

Jochen

Und deswegen wäre es auch viel schöner, wenn man das direkt über einen Applikationsserver ausliefern würde.

Jochen

Und ich dachte eigentlich, oh, geht doch.

Dominik

Dann Ustatic-Files quasi.

Jochen

Ja, da gibt's, das gibt's, also wenn die Assets gemeint sind, also sowas wie CSS und JavaScript und so Zeugs, da gibt es schon was für.

Dominik

Nicht die Assets, sondern wirklich dann halt mit Einzel Single Permission on File.

Jochen

Genau, da gibt es nichts.

Jochen

Und das wäre aber interessant.

Jochen

Und eigentlich dachte ich irgendwie, das müsste mit Python auch gehen.

Jochen

Python-Isync AO, da gibt es ja auch alles irgendwie.

Jochen

Und Juve-Loop ist ja auch sehr schnell und so.

Jochen

Und das müsste man doch eigentlich machen können und es geht auch.

Dominik

Dein Benchmark hat festgestellt, Caddy ist viel schneller.

Jochen

Ja, genau.

Jochen

Dann habe ich irgendwie jetzt ein anderes, weil ich interessiere mich für Kochen und so und habe so einen Rezeptmanager, Melee.

Ja, hab ich mal eingekauft.

Jochen

Kann man sich auch mal angucken, ist ja nett.

Jochen

Und das habe ich dann irgendwie auf meiner Infrastruktur deployed und da gibt es auch viele Bilder und so.

Jochen

Und dann dachte ich, ah, das mache ich bei Juvicorn, weil wozu haben die da noch extra einen Caddy laufen?

Jochen

Und dann habe ich dann auch in der Discord-Bescheid gesagt, so, ja, warum macht ihr denn da nochmal Caddy irgendwie zusätzlich?

Jochen

Das ist Quatsch, irgendwie mach das doch einfach über den Juvicorn.

Jochen

Und dann so, ja, aber wir haben die Erfahrung, macht es dann irgendwie schneller und irgendwie sonst ist langsam.

Jochen

Das kann gar nicht sein.

Jochen

Dann muss ich beim Benchmark machen.

Jochen

Habe ich ein Menschmark gemacht und gesehen, stimmt doch, sie haben recht, ich lieg falsch.

Jochen

Auf jeden Fall tatsächlich Nginx Caddy viel schneller als Juvicorn, beziehungsweise die File-Response von Sarlet, was halt unter Fast API auch drunter liegt.

Jochen

Und das ist halt fast IPR-Backend.

Jochen

Ja, keine Ahnung, woran es liegt.

Jochen

Ich weiß es nicht.

Jochen

Also sagen wir so, es ist immer noch schnell genug für Gigabit-Ithernet-Interface.

Jochen

Aber wenn es, äh, also 10 Gigabit schafft man damit nicht.

Jochen

Und ein Caddy und Nginx schaffen das schon.

Jochen

Also irgendwas ist da nicht richtig.

Jochen

Ich weiß aber nicht was.

Jochen

Kommen wir wieder zu, Juvicorn macht das Ganze ja, oder Juve-Loop ist halt Seiten vor allen Dingen und denkt man, das kompiliert ja nach C, das muss doch eigentlich schnell sein.

Jochen

Keine Ahnung.

Jochen

Also eine mögliche Grundführung, warum das so ist, den ich wo ich denke, das könnte sein, ist, es liegt daran, dass irgendwie CADI und NGIX irgendeine Art von Zero-Copy-TCP verwenden, wo es halt nicht nochmal durch den User-Space kopiert werden muss, die Daten.

Jochen

Und das macht die ReCorn halt nicht.

Jochen

Sondern, weil das kann es halt noch nicht.

Jochen

Also es gibt da einen Pull-Request, das ist aber noch nicht durch.

Jochen

Das heißt, da wird immer alles nochmal kopiert.

Jochen

Also es wird vom Fallsystemen im Hauptsprecher von der Anwendung kopiert und dann nochmal in den Netzwerkspeicher und dann erst raus.

Jochen

Das ist natürlich viel ineffizienter, als wenn man es halt, als wenn der Permine.

Dominik

Interessant wäre, wenn man den Pool-Request kann, man mal Cherry-picken und mal gucken, ob es dann ein bisschen.

Jochen

Muss man sich vielleicht mal ein bisschen angucken.

Jochen

Also das könnte noch ein Unterschied sein.

Jochen

Das wäre dann halt relativ langweiliger Grund.

Jochen

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 Fall-System liegen hat, sondern halt irgendwo anders, was man ja vielleicht will heutzutage.

Jochen

Dann geht es vielleicht alles nicht mehr.

Jochen

Aber dann ging es auch mit Nginx und so nicht mehr, weil, auch mit Kelly nicht, weil, ja, dann, weil die könnte man nicht sein File einfach verwenden.

Jochen

Das geht halt nicht.

Jochen

Das geht halt nur, wenn es ein tatsächlich ein File- und Fall-System ist, glaube ich.

Jochen

Auch da wäre interessant, wenn sich das jemand, wenn ihm jemand Bescheid sagen könnte, der sich damit auskennt, ob das so ist oder nicht.

Dominik

Anware Python-Podcast.

Jochen

Genau.

Jochen

Ja, genau.

Jochen

Damit habe ich mich so ein bisschen beschäftigt.

Jochen

Und ja, auf jeden Fall scheint es so zu sein, dass Caddy viel effizienter ist als Juvicorn oder Juve Loop beim Server Statischen Files und ich weiß nicht warum.

Jochen

Keine Ahnung.

Jochen

Aber es ist doch interessant.

Jochen

Mal gucken, ob ich das irgendwie rauskriege.

Dominik

Werden wir euch weiter informieren, irgendwann am Ende von irgendeiner weiteren Zugnoten-Folge.

Dominik

Also hört alle unsere Folgen ja bis ganz zum Ende durch, wenn es langweilig wird, nicht schlafen.

Dominik

Ja.

Dominik

Dann pick der Woche Jochen.

Jochen

Genau.

Jochen

Pick picken würde ich diesmal tatsächlich wo habe ich das gesehen?

Jochen

Ich weiß gar nicht mehr genau.

Jochen

Das Ding nennt sich BPyTop.

Ja.

Jochen

Ah, da, ich habe es hier laufen.

Oh, das ist hübsch.

Jochen

Das ist ziemlich hübsch, ne?

Jochen

Ich weiß nicht, ob das Textual verwendet oder Rich oder irgendwas in der Richtung, aber genau.

Dominik

Hostes oder so?

Rich.

Jochen

Ja, das gibt einem so ein bisschen Daten zu den, zu, also es ist halt top.

BPyTop?

Jochen

Ja.

Jochen

Es gibt da so ähnliche Sachen, Glences gibt es auch.

Dominik

Ja, Glances gibt es noch.

Also G-Top, Hardtop.

Ja.

Jochen

Aber das ist mir so letztens über den Weg gelaufen und fand ich sieht echt ziemlich gut aus.

Jochen

Ist jetzt hier langweilig, der Rechner macht überhaupt nichts.

Dominik

Ja, das hat keine Last drauf.

Dominik

Ich picke iJSON.

Dominik

Ah, okay.

Dominik

Da habe ich auch noch nicht so viel von benutzt, aber es macht so große JSON-Objekte irgendwie vernünftig.

Dominik

Hast du noch einen Picker, Janis?

Janis

Was genau soll ich denn picken?

Janis

Muss das in der beiden Kontext haben?

Jochen

Irgendwas Cooles, was halt irgendwie, was man vielleicht noch nicht kennt.

Aha okay.

Janis

Ich weiß nicht, ob man es heute gehört hat.

Janis

Ich habe so eine gewisse Präferenz zu Kafka.

Janis

Das, was ich da picken würde, ist Kafka Connect tatsächlich.

Janis

Kann man mal nachgoogeln.

Janis

Das sorgt letztlich dafür, dass man sich Sachen automatisch aus Datenbanken holen kann, wenn sie reingeschrieben wurden.

Janis

Also zum Beispiel Write-Only-Prozesse und die werden dann ganz, ganz automatisch in einen Topic reingeschoben.

Janis

Das nennt sich dann Source Connector ohne Code.

Dominik

Quasi so eine Duplikation von der Realität in der Datenbank in das Kafka.

Janis

Ja, wir haben ja über Datenkonsistenzen heute geredet.

Janis

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 einen Topic schreiben kannst und über einen Sync-Connector in andere Datenbanken reinschreiben kannst.

Janis

Und das wirklich cool an der Sache ist, es gibt Konnektoren für alle möglichen Datenbanken.

Janis

Also Postgres, Elasticsearch, Neo4j.

Janis

Das ist relativ interessant, kann man sich mal angucken.

Jochen

Ja, das klingt gut.

Dominik

Also Next Level Kafka nimmt.

Dominik

Okay, cool.

Dominik

Ja, vielen Dank, Janis, dass du hier warst heute und uns sehr gerne an Microservice, dass du geredet hast.

Dominik

Ich hoffe, es hat dir ein bisschen Spaß gemacht, genau so viel wie uns.

Dominik

Bleibt uns gewogen.

Schalte uns wieder ein.

Wie auch immer, Montag, nachtags.

Für die Aufmerksamkeit.

Dominik

Abendstags, genau.

Dann bis demnächst.

Jochen

Bis dann.

Tschüss.

Tschüss.