Transcript: Microservices

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Dominik

Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, Episode Nummer 41.

Dominik

Heute unterhalten wir uns über Microservices. Schön, dass ihr wieder eingeschaltet habt.

Dominik

Hallo Dominik.

Dominik

Und wir haben einen Gast dabei.

Dominik

Guten Abend.

Dominik

Hi Janis.

Dominik

Ja, das bin ich.

Dominik

Hallo Janis.

Dominik

Ich bin der Dominik.

Dominik

Ich bin der Janis.

Dominik

Ja, dann Janis, würdest du dich mal kurz vorstellen vielleicht direkt?

Janis

Ja, das geht schnell. Ich bin der Janis, noch 29 Jahre alt, jung, aus Wuppertal.

Janis

Ich entwickle mit Python viel und oft und gerne.

Janis

Bereich Data Engineering, Data Science, 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.

Dominik

Ja, genau, machen wir das wie immer.

Dominik

Was hast du denn?

Jochen

Ja, ich weiß nicht, so ein bisschen wild gemischt ist auch nicht nur Python,

Jochen

aber ich dachte irgendwie, gut, das hat schon eine gewisse Relevanz,

Jochen

weil, ich weiß ja nicht, aber vielleicht gibt es

Jochen

ja auch sogar Leute hier in der, zuhören

Jochen

oder dabei sind gerade, die irgendwie davon betroffen

Jochen

sind. Es gab da so eine Sicherheitsschwankung

Jochen

bei Okta. Ja.

Dominik

Ich weiß nicht, wen du meinst, den Betroffenen immer.

Dominik

Keine Ahnung. Ja.

Jochen

Ja, also das

Jochen

ja, fand ich, war mal

Dominik

wieder so ein... Also Okta ist so ein Multi-Login-Service,

Dominik

Single-Sign-On.

Dominik

Ja, genau. Und viele

Jochen

Kunden, viele Konzerne sind da Kunden und so

Jochen

und eigentlich war

Jochen

war sozusagen die Marketing

Jochen

Story dabei, halt irgendwie

Jochen

ja, du musst irgendwie keinem

Jochen

vertrauen und das funktioniert einfach so und das

Jochen

löst das Problem für dich und jetzt mussten die Leute, die das

Jochen

irgendwie, die diese Dienstleistung

Jochen

in Anspruch genommen haben, feststellen, dass sie doch jemandem

Jochen

vertrauen mussten.

Jochen

Und dass sie dem eigentlich nicht wirklich vertrauen können,

Jochen

weil die Kommunikation war halt so, dass sie irgendwie nur

Jochen

so scheibchenweise zugegeben haben, was da eigentlich passiert ist.

Jochen

Tja. Und das ist natürlich

Jochen

schlecht.

Dominik

Ja, das ist also, ich würde auch sagen,

Dominik

ziemlich beschädigt jetzt.

Jochen

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

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

Dominik

Und dieses Single-Sign-On, da kann man dann, glaube ich,

Dominik

die Policies vielleicht ein bisschen besser einhalten

Dominik

und die Leute dazu zwingen, dass sie so ein bisschen mehr darüber nachdenken,

Jochen

was sie tun. Ja, gut, Single-Sign-On

Jochen

verstehe ich auch irgendwie, aber ich verstehe nicht so richtig, warum man

Jochen

dann... Ja, wenn man da keine Kapazität hat.

Jochen

Stimmt, wenn man das selber machen muss, dann ist es auch wieder

Jochen

schwierig.

Jochen

Ja, also das war auf jeden Fall, denke ich,

Jochen

ein großes Ding, was irgendwie in der letzten Zeit passiert ist.

Dominik

Ja, ich habe auch für Okta tatsächlich so ein Dango-Modul

Dominik

geschrieben, mit dem das dann doch irgendwie geht, aber

Dominik

das ist halt auch nützlich, wenn Okta kaputt ist.

Dominik

Ja.

Dominik

Ja, doof.

Dominik

Ja. Menus.

Dominik

Dann, ah, oh,

Dominik

gibt's einen,

Jochen

wir hatten ja schon mal diesen Tiobe

Jochen

Programmiersprachen.

Jochen

Ach, der spannende große Index.

Jochen

Index, ja, der immer so zitiert wird.

Jochen

Wo man dann irgendwie, wenn man genauer drauf schaut,

Jochen

sehen muss, oh, die gucken nur, wie die

Jochen

Menge der Suchergebnisse bei so ein paar Suchanfragen aussieht.

Jochen

Und das ist ja alles irgendwie,

Jochen

wie viel das so sagt, keine Ahnung.

Jochen

Es gibt einen anderen, der macht sowas ähnliches.

Jochen

Der heißt Peipel, Pippel?

Jochen

Ich weiß gar nicht, wie der heißt.

Jochen

Jedenfalls da ist Python auch momentan die

Jochen

beliebteste Programmiersprache.

Jochen

Insofern kann man sagen, es ist halt jetzt nicht nur

Jochen

ein Service, der das halt sagt, sondern es gibt

Jochen

mehrere,

Jochen

die das halt unabhängig voneinander rausfinden.

Jochen

Insofern gibt das ein bisschen mehr

Jochen

Glaubwürdigkeit, dass da irgendwie was dran

Jochen

sein könnte. Ja, es ist auf jeden Fall

Jochen

Python sehr populär zur Zeit.

Jochen

Sogar Meta hat

Dominik

einen großen Beitrag an die

Dominik

Python Software Foundation gespendet, habe ich mitbekommen.

Jochen

in letzter Zeit? Ja, das sind

Jochen

tatsächlich sehr gute Neuigkeiten.

Jochen

Das ist ja eigentlich noch nicht so lange her, dass tatsächlich

Jochen

die, also Python Software Foundation

Jochen

irgendwie hatte bisher immer alles mögliche

Jochen

um die Marke

Jochen

drumherum gemacht

Jochen

und so und

Jochen

Rechtsbeistand und

Jochen

solche Sachen für Leute, die das verletzen

Jochen

und so, aber

Jochen

sie haben halt eigentlich keine Entwicklung bezahlt

Jochen

oder niemanden gehabt, der halt, es gab niemanden,

Jochen

der sich Vollzeit irgendwie bezahlt, um

Jochen

Python gekümmert

Jochen

hätte. Und klar, es gab

Jochen

Leute, die bei Firmen gearbeitet haben und dann zumindest einen Teil

Jochen

der Zeit irgendwie dafür zur Verfügung hatten,

Jochen

sich damit zu beschäftigen. Aber

Jochen

jetzt gibt es seit,

Jochen

ich weiß nicht, das ist jetzt schon seit zwei Jahren, glaube ich.

Jochen

Wird auch verlängert.

Jochen

Developer in Residence sozusagen. Und zuerst

Jochen

hat Google den bezahlt. Und das ist ja

Jochen

Lukas Schlanger. Macht das

Jochen

sehr gut. Schreibt auch immer wieder

Jochen

Blogposts, was er so tut.

Jochen

Und jetzt quasi damit

Jochen

bezahlt das jetzt erstmals auch Facebook,

Jochen

was natürlich super ist. Und ja, vielleicht werden

Jochen

ist ja nochmal irgendwann mehr Leute, also auf jeden Fall

Jochen

wird es irgendwie mehr Geld, das ist ja schon mal toll.

Jochen

Voll gut.

Jochen

Also ich meine, eigentlich denke ich,

Jochen

dass große Konzerne das ja eigentlich fast wie eine Art

Jochen

Versicherung sehen können, weil

Jochen

sollte man denken, dass sie das so betrachten,

Jochen

weil wenn das

Jochen

irgendwie nicht mehr funktioniert, dann haben die ein großes Problem,

Jochen

was sie sehr teuer zu stehen kommen.

Dominik

Das ist halt schwierig, so was zu vermitteln, dass du halt irgendwie

Dominik

Dinge bezahlen musst, die in der Zukunft

Dominik

eventuell einen Return on Invest geben und

Jochen

oder halt auch nur ein Risiko abwenden.

Jochen

Ja, aber dass das gerade

Dominik

bei Open-Source, die kriegt man ja immer so umsonst.

Dominik

Das reduziert ja meistens immer nur irgendwie die Kosten

Dominik

auf einer Kostenstelle.

Dominik

Ja, ja.

Dominik

Ja, ja, das, genau.

Dominik

Aber irgendwie geht's

Dominik

da voran, das ist voll gut.

Jochen

Was hat man noch? Oh, genau.

Jochen

BugsPython.org,

Jochen

das weiß ich auch, das ist auch schon seit Jahren.

Jochen

Versuchen wir da irgendwie zu migrieren auf GitHub.

Jochen

Ist aber noch nicht, nein, wir haben es verschoben.

Dominik

Ach so, dachte ich, wir sind durch.

Jochen

8. April, also quasi

Jochen

bald, nicht übermorgen,

Jochen

aber in ein paar Tagen.

Jochen

Und zwar auf Wunsch von GitHub, weil die gesagt haben,

Jochen

oh, wir haben Schwierigkeiten,

Jochen

wir wissen nicht, ob das funktionieren wird,

Jochen

wenn wir als alle so eine Menge Issues erzeugen und so.

Jochen

Wartet lieber noch mal ein bisschen.

Jochen

Okay, ja gut, das ist jetzt nicht mehr so lange hin.

Dominik

Also ist jetzt quasi, wenn ihr es hört,

Dominik

vielleicht schon migriert.

Dominik

Oder kurz davor.

Jochen

Und gestern am 4.4. ist tatsächlich

Jochen

das Zeitentrack 20 Jahre geworden.

Jochen

Das ist auch ein richtiger Meilenstein.

Jochen

Hätte ich jetzt auch nicht gedacht,

Jochen

aber das ist natürlich alles

Jochen

irgendwie,

Jochen

ja, Zeitgefühl, komische Sache.

Dominik

Schon ein bisschen abgehangen, wie man alt wird.

Jochen

Ja, aber Sighten ist total wichtig, super, also immer wenn man sich fragt,

Jochen

okay,

Jochen

ja, Python selber langsam, aber

Jochen

macht trotzdem Dinge schnell und so,

Jochen

wie geht denn das eigentlich? Ja, da ist meistens Sighten

Jochen

daran beteiligt und

Jochen

ja, tolles Projekt,

Jochen

irgendwie man schreibt so eine Python-ähnliche

Jochen

Syntax und das wird

Jochen

dann halt in C

Jochen

Cross-Compile sozusagen. Man kann auch C-Funktionen

Jochen

Direkt laden, glaube ich, wenn man das möchte.

Jochen

Ja, genau. Und dann kann man es wieder einbinden

Jochen

als Python-Modul. Und dann gibt es sogar

Jochen

sowas wie ein Cellmagic

Jochen

in Jupyter Notebooks oder JupyterLab.

Jochen

Und da kann man einfach sagen,

Jochen

Prozent, Prozent, Zeiten. Und dann

Jochen

wird das halt, wird eine Funktion

Jochen

einfach so wieder reimportiert.

Jochen

Und dann wird die halt tausendmal schneller oder so.

Jochen

Das ist halt sehr schick.

Jochen

Ja.

Dominik

Ja, okay. Also apropos, kennst du

Dominik

V, die Language?

Dominik

V-Lang? V? Ja.

Dominik

bin ich irgendwie letztens drüber gestolpert, weil ein Kollege

Dominik

mich draufbrachte und

Dominik

habe ich mal geguckt, kannte ich noch nicht, ist nur noch in so einer Beta-Version.

Dominik

Sieht irgendwie witzig aus, so eine

Dominik

Kombination von Rust

Dominik

und Go irgendwie.

Jochen

Ja, momentan ist auch wieder so die Zeit

Jochen

für neue Programmiersprachen. Letztens

Jochen

habe ich gehört von SICK.

Jochen

SICK? Das ist auch so ein

Dominik

toller, lustiger Name, dass das wieder so irgendwann drüber fällt,

Dominik

aber den Namen direkt so.

Dominik

Ja, das

Jochen

sieht auch so ein bisschen aus wie eine Kreuzung aus Go

Jochen

und JavaScript und

Jochen

irgendwie Rust und

Jochen

weiß nicht, ganz vielen Dingen.

Dominik

Also ich habe es noch nicht reingeguckt, also falls ihr darüber was wisst,

Dominik

das könnte auch interessant sein. Also wie lang

Dominik

I.O.? Okay, muss ich mir auch mal

Dominik

angucken.

Dominik

Komplett auch zu zäh, deswegen kam ich

Dominik

gerade drauf. Ach so,

Dominik

okay, das ist auch interessant.

Dominik

Ja.

Dominik

War witzig.

Dominik

Ja.

Dominik

Ja. Okay.

Dominik

Dann sind wir eigentlich schon fast,

Dominik

das war diesmal schnell. Ja, wir haben

Jochen

Ja, dann sind wir damit eigentlich durch.

Dominik

Achso, haben wir eigentlich

Dominik

Veranstaltungshinweise oder sowas?

Dominik

Ja, das sollten wir. Achso, du wolltest

Dominik

zur PyCon, bist du da?

Jochen

Momentan sieht es nicht danach aus.

Jochen

Ich hätte jetzt zufällig, also

Jochen

zuerst hatte ich gedacht,

Jochen

das schaffe ich

Jochen

irgendwie nicht, beziehungsweise ich habe gar nicht so richtig mitbekommen,

Jochen

dass das überhaupt stattfindet, also vor Ort,

Jochen

weil das wäre für mich interessant geworden, aber

Jochen

nicht vor Ort halt eher nicht so richtig,

Jochen

weil das schaffe ich eben, das habe ich auch schon mal

Jochen

probiert, wie Remote aufkommt.

Jochen

Aber es funktioniert einfach nicht.

Dominik

Du warst so eine halbe Stunde da und dann so, pa, pa.

Dominik

Ja, genau. Und dann ist es halt vorbei.

Jochen

Und das funktioniert einfach nicht.

Jochen

Also, wenn das funktionieren soll, muss ich da irgendwo hin

Jochen

und getrennt sein von irgendwie

Jochen

anderweitigen Verpflichtungen.

Jochen

Und da habe ich das halt nicht so mitgekriegt,

Jochen

dass das tatsächlich vor Ort sein sollte.

Jochen

Und dann habe ich es mitgekriegt und dann waren aber schon

Jochen

Tickets. Und dann dachte ich, ich hätte gerne Zeit.

Jochen

Und dann habe ich dann gemerkt, oh, ich habe vielleicht doch Zeit.

Jochen

Und dann waren aber keine Tickets mehr da.

Jochen

Also insofern, ja.

Jochen

Na gut, wenn es darin lag. Aber vielleicht machen wir auch

Jochen

nochmal eine Sendung oder so dazu, wie

Jochen

das da gewesen ist, von Finden noch Leute, die da

Jochen

waren und dann davon erzählen können. Ja, das wollen die mal fragen oder so?

Jochen

Vielleicht sind die ja da. Genau, den habe ich schon gefragt.

Jochen

Er hat sich auch schon gemeldet und weiter eigentlich auch.

Jochen

Okay, cool. Also gibt es doch irgendwann

Dominik

eine Pike und Folge. Ja. Ja, im Sommer

Dominik

EuroPython-Tickets sind auch gerade draußen. Da gibt es

Dominik

sogar noch welche von, glaube ich. Das war noch nicht so super

Dominik

angelaufen, der Vorverkauf, obwohl die so schnell

Dominik

immer weg waren sonst. Genau, da

Dominik

in Dublin, also wenn ihr mit mir abends

Dominik

in Dublin ein Bierchen trinken wollt. Da könnte

Jochen

es auch gut sein, dass ich damit

Jochen

würde ich gerne machen.

Jochen

Ich bin gespannt. Und dann gibt es noch

Jochen

die, also gut, dass es jetzt nicht mehr so

Dominik

gemeint hat. Das Conference Center in Dublin ist

Dominik

relativ nah an der Brewdog-Außenstelle.

Dominik

Das ist ja kritisch.

Dominik

Ja, genau.

Dominik

Das Angenehme mit dem Nützlichen.

Dominik

Ja, super Verbindung.

Jochen

Genau, und im Herbst, irgendwann

Jochen

September, gibt es die DjangoCon EU,

Jochen

diesmal auch tatsächlich vor Ort und in

Jochen

Porto. Die sollte ja eigentlich letzten beiden Jahren in Porto

Jochen

stattfinden, aber hat es ja nicht.

Jochen

Und genau da denke ich

Jochen

ja wahrscheinlich leider nicht, weil

Jochen

irgendwie so viele Konferenzen...

Jochen

Ist Johannes da?

Jochen

Habe ich noch nicht gefragt. Aber wer auf jeden Fall da ist,

Jochen

ist Ronny. Ronny ist da, stimmt.

Jochen

Das ganze Team ist da. Das ist natürlich ein bisschen schade.

Jochen

Das wäre natürlich nett. Das wäre schön, ja.

Jochen

Ja.

Dominik

Naja. Ja, jetzt haben wir doch noch ein bisschen

Dominik

News gemacht. Okay.

Dominik

Gut. Dann kommt jetzt wieder der obligatorische

Dominik

Werbeblock. Habt ihr das schon gehört?

Dominik

Und diesmal ist Janis dran. Janis darf Werbeblock.

Janis

Ich darf Werbung machen, als Neuling.

Janis

Ja, wofür mache ich Werbung?

Janis

Ich mache Werbung für meinen Arbeitgeber.

Janis

Ich arbeite bei Elio.

Janis

Wir machen Consulting mit Fokus auf künstliche Intelligenz

Janis

und den Weg dahin, alles, was dazugehört.

Janis

Und ihr sucht neue Leute?

Janis

Wir suchen neue Leute, genau.

Janis

Wie hieß die Domain nochmal?

Janis

Ich versuche die gerade, Elio?

Janis

Elio.de, A-I-L-I-O.de.

Janis

Quasi AI im Namen, als Programm, wenn man so möchte.

Janis

Genau und wir suchen neue Leute, immer. Also es ist wahrscheinlich sogar ziemlich egal, wann du die Folge hörst. Wir suchen dich.

Janis

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

Janis

Wir haben einen Fokus auf künstliche Intelligenz, also Data Science, Machine Learning, Deep Learning, NLP. Das ist natürlich super interessant, wenn man sich damit schon mal auseinandergesetzt hat.

Janis

Aber auch ganz, ganz normale Backend-Tools, sage 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 Lieblings-Tool ist, ist das vielleicht auch interessant?

Dominik

Welches Tool?

Dominik

Pandas.

Dominik

Pandas, ja klar.

Janis

Sicher, ist ja Data Science, ne?

Jochen

Ja, Data Science und Python passt natürlich eigentlich schon ziemlich gut zusammen.

Jochen

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

Jochen

Eigentlich sitzt ihr im Bielefeld, sehe ich gerade.

Jochen

Genau, wir sitzen im Bielefeld.

Janis

Remote-Arbeit. Ich arbeite

Janis

sehr viel remote. Wir haben immer

Janis

so einen Stammtisch irgendwie, damit man sich doch auch mal

Janis

in Person sieht. Aber rein

Janis

optional, sage ich jetzt mal.

Janis

Insofern

Janis

sind wir gespannt. Das klingt gut. Also falls

Janis

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

Janis

Ich würde mich freuen. Klingt, als wären es nette Jungs

Janis

und Kollegen. Mindestens einer.

Janis

Mindestens.

Janis

Ja, vielleicht auch mehr.

Dominik

Ich habe davon gehört. Du musst jetzt noch persönliche

Dominik

Coachings und Benefits anbieten von dir

Dominik

aus, damit das dann... Ja, würde ich natürlich

Janis

machen. Also wenn du Hörer der

Janis

Folge bist und so begeistert

Dominik

von mir bist. Genau, dann gibt es einen Aktionskurs

Dominik

Jan.

Dominik

Schreibe mich an.

Janis

Genau, eine E-Mail-Adresse und eine Internetseite

Janis

gibt es auch, ljo.de, business.ljo.de

Janis

da könnt ihr euch gerne hinbewerben.

Janis

Ansonsten gibt es bestimmt auch irgendwo so einen

Janis

Text, wo man sowas verlinken kann bei euch im Podcast.

Jochen

Ja, und vielleicht genau, wenn man sich meldet, dann

Jochen

dazu sagen, dass das über

Jochen

Python-Podcast, dass man sich da das

Jochen

gehört hat, weil dann kann man das vielleicht so ein bisschen

Jochen

irgendwie

Jochen

verfolgen. Da habt ihr auf jeden Fall bessere Chancen,

Dominik

da wissen wir auch, dass ihr interessiert seid.

Dominik

Keine Ahnung,

Dominik

ob das irgendjemand hört,

Dominik

der auf der Suche ist.

Janis

Ich glaube tatsächlich, das hat einen Wert. Also ich wurde mal

Janis

gefragt in einem Interview,

Janis

welche Bücher und Podcasts ich so empfehlen kann.

Janis

Das war ganz lustig.

Janis

Python-Podcast ist mir vielleicht in den

Janis

Sinn gekommen, vielleicht auch nicht.

Dominik

Ich wurde tatsächlich auch im Arbeitskontest

Dominik

von jemandem angesprochen.

Dominik

Also ein Projektmanager war, der für ein

Dominik

größeres Projekt irgendwie gehört hatte,

Dominik

was da so gibt und der einen Danko-Podcast von uns gehört hat

Dominik

und dachte so, oh cool, da warst du nicht der Typ mit dem Podcast.

Dominik

Ja, interessant.

Janis

Das hilft manchmal, ne? Also das ist schon cool.

Janis

Genau. Ja, schick. Okay. Super.

Dominik

Hört mal rein. Ja. Wenn ihr was sucht,

Dominik

wisst ihr jetzt wo. Oder nichts sucht

Janis

und doch zu uns wollen, ne?

Janis

Man weiß ja nie.

Janis

Ja. Okay, genau.

Janis

Dann, ja, Thema diesmal

Janis

Microservices.

Dominik

Ja, also ich habe ja wie immer keine Ahnung

Dominik

und will erst mal, was ist denn überhaupt so ein Microservice?

Dominik

Ja, was ist das denn? Wer soll das

Dominik

dann erklären? Ja, keine Ahnung.

Janis

Möchtest du anfangen oder so? Ich kann gerne anfangen.

Janis

Also es gibt relativ harte Definitionen

Janis

darüber. Ich bin da kein Freund von.

Janis

Also im Prinzip ist ein Microservice erst mal

Janis

etwas, was wenig Sachen macht,

Janis

aber dafür sehr gut. So würde ich es beschreiben.

Janis

Man stellt es ja ganz gerne

Janis

mal so einem Monolithen gegenüber und wir

Janis

haben schon vorrangig überlegt,

Janis

wollen wir jetzt so ein Versus-Ding machen oder nicht?

Janis

Schauen wir mal, was das wird. Aber ich weiß nicht, vielleicht, wenn man Selbstentwickler ist, man kennt das ja, man hat irgendwie tausend Funktionen, die man gerne in einer Anwendung hat. Und dann überlegt man halt häufig, wie man das gestaltet. Und der Microservice-Ansatz ist eben, dass man viele einzelne Funktionen in verschiedene Codebasen auslagert mit eigenen Tech-Stacks und ganz wild und ganz toll und hoch skalierbar. Und erstmal ist alles cool in Microservices.

Janis

Okay.

Janis

Das ist die Meinung von Janis.

Janis

Ja, okay.

Jochen

Da haben wir schon die Seiten geklärt.

Jochen

Ja, ganz so ist es nicht.

Jochen

Das ist ein bisschen plakativ.

Janis

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

Janis

Ja, aber das ist doch genau spannend jetzt.

Dominik

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

Dominik

Genau.

Dominik

Wenn ich jetzt eine Anwendung habe.

Dominik

Wir tun jetzt mal so, als wäre es eine Web-Anwendung.

Dominik

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, würdest du sagen, das ist eine gute Idee?

Janis

Es gibt verschiedene Ansätze, das ist Thema Best Practice, sag ich jetzt mal, 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

Janis

und alle einzeln anfragen.

Janis

Das ist, würde ich sagen, aber keine gute Idee.

Janis

Da gibt es dann meistens API-Gateways

Janis

beziehungsweise eine Schnittstelle, die man anfragt,

Janis

die verschiedene Endpunkte sammeln.

Dominik

Genau, darüber hatte ich eben auch schon mal, glaube ich,

Dominik

ganz kurz mit Jochen gesprochen, weil es ja genau darum geht,

Dominik

also wer ist dann die Spinne im Netz?

Dominik

Wovon bekommt man das, wenn man jetzt ein Frontend hat?

Dominik

Sollte das Frontend die einsammeln einzeln

Dominik

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,

Jochen

dann müsste man ja auch im Frontend das sozusagen

Jochen

Mikrofrontends

Jochen

müsste man machen.

Jochen

Da muss ich halt

Jochen

ehrlich sagen, ich mach kein Frontend.

Jochen

Wer liefert denn das Mikrofrontend aus?

Dominik

Also wenn man zum Beispiel in HTMLX das ausliefert,

Dominik

dann wäre ein Django ein sogenannter Spinne

Dominik

oder so ein Aggregator, ein Gabi-Gateway,

Dominik

wo ich jetzt das Wording da immer nicht ganz

Dominik

treffen würde, ehrlich gesagt.

Jochen

Das spielt dann letztlich ja

Jochen

keine große Rolle mehr,

Jochen

weil du musst ja dann, das wäre nur noch eine statische

Dominik

Seite. Also was ich mir jetzt halt da kompliziert

Dominik

darin vorstelle, ist, wenn ich so ganz viele verschiedene Zeug habe,

Dominik

aber ich habe ja eigentlich nur eine Anwendung, warum mache ich das

Dominik

nicht in der einen Anwendung direkt und habe dann diesen

Dominik

ganzen Gefummel mit dem ganzen

Dominik

drumherum nicht? Darüber wollen

Dominik

wir ja reden, ne? Ja. Also

Dominik

das ist ja das Ziel der Folge, eine kurze Folge, wenn wir das jetzt

Dominik

so einfach und so schnell machen. Ein Satz fertig, ja,

Dominik

danke schön, ja, heute haben wir euch nicht so lange.

Janis

Nee, ganz so ist es natürlich nicht. Man muss halt

Janis

auch immer sehen, welche verschiedenen Funktionalitäten

Janis

man haben möchte, ne? Wir sind jetzt im Bereich

Janis

Web unterwegs, ne, von deinem Beispiel.

Janis

Das klingt erstmal sehr, sehr einfach,

Janis

Ich meine, so eine Standard-Firmen-Webseite meinetwegen mit einem Kontaktformular, da braucht man keine Microservices für, das stimmt schon. Aber wenn wir jetzt zum Beispiel mal eine Kurs-Webseite meinetwegen sehen, wo wir 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 und da muss man natürlich überlegen, wie gestalte ich das designtechnisch, wie gestalte ich die Suchfunktion und so weiter und so fort 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.

Jochen

Also genau, vielleicht einfach hake ich an der Stelle mal ein

Jochen

und sage mal so etwas, was ich denken würde,

Jochen

was Microservice ist.

Jochen

Und ich würde denken, der entscheidende Punkt dabei ist eben

Jochen

die Einheit, wie deployed man das.

Jochen

Also alles, was man,

Jochen

wenn man es insgesamt, wenn man es halt getrennt

Jochen

deployt, dann ist es halt ein Microservice, würde ich

Jochen

jetzt mal so sagen.

Jochen

Oder getrennt deployen kann

Jochen

und also wenn es halt irgendwie,

Jochen

wenn die gesamte Applikation

Jochen

etwas ist, was man insgesamt deployt, dann ist es halt

Jochen

irgendwie eher Monolith.

Jochen

Und eben, Microservice hat halt den Vorteil, du kannst halt da

Jochen

unterschiedliche Technologien ausprobieren, du kannst halt

Jochen

unterschiedliche Sprachen verwenden, man sagt mal auch immer, man sollte

Jochen

das halt so machen, dass man da quasi

Jochen

unterschiedliche Sprachen verwenden kann,

Jochen

dass sie halt möglichst irgendwie

Jochen

ja, ihre eigene Datenhaltung

Jochen

irgendwie haben oder zumindest ihre eigene Sicht

Jochen

auf die Daten und da ist man dann halt schon

Jochen

so ein bisschen bei dem, ich weiß nicht, diesen

Jochen

Domain-Driven-Design-Ansatz, da gibt es

Jochen

immer diesen Begriff

Jochen

Bounded Context und das ist halt immer so das, was man

Jochen

so, ja, das ist klassischerweise

Jochen

Bounded Context.

Dominik

Jetzt musst du wieder erklären, was Bounded Context ist.

Jochen

Ja, das ist quasi so Dinge, die halt irgendwie so zusammengehören und nur gemeinsam verändert werden sollen. Ich glaube, das Standardbeispiel auch eben aus dem Designbuch ist halt sowas wie eine Bestellung und die Punkte, die einzelnen Positionen auf einer Bestellung oder so will man vielleicht, das Ding will man immer zusammen verändern.

Jochen

Das heißt, man holt das insgesamt aus der Datenbank, macht irgendwelche Änderungen und streibt es halt in einer Transaktion wieder irgendwie in die Datenbank rein oder so. Und das ist halt sozusagen ein Baune-Kontext eben.

Dominik

Ja, das ist aber eine spannende Frage. Also was gehört halt dazu oder nicht? Also bei einer Bestellung und deren Position geht es vielleicht noch. Aber wenn du jetzt an den zuständigen Sachbearbeiter beispielsweise denkst, der irgendwie im Innen- oder Außendienst hängt, ist die Frage, gehört das dann zum Baune-Kontext da dazu oder holt man das aus einem CRM?

Jochen

Ich glaube auch, dass der Grund,

Jochen

vielleicht der Name, das kommt daher, dass es halt

Jochen

unterschiedliche Dinge in unterschiedlichen Kontexten

Jochen

bedeuten kann. Also zum Beispiel User ist halt

Jochen

was anderes, wenn du dich auf einer Webseite einloggen

Jochen

möchtest oder kann halt was anderes sein

Jochen

als User oder

Jochen

Personen, an die irgendwas geschickt wird

Jochen

im Kontext einer

Jochen

irgendwas Bestellung oder

Jochen

so. Und in dem einen Fall hat man halt da

Jochen

komplizierte Adressgeschichten und weiß der Teufel

Jochen

irgendwie Zeugs und im anderen Fall braucht man das gar nicht, weil

Jochen

da muss man nur überprüfen, stimmt der Passwort

Jochen

Hash oder so und

Jochen

ja, je nachdem, welchem

Jochen

Kontext man unterwegs ist, ist

Jochen

das halt unterschiedlich und man erlaubt

Jochen

dann halt auch unterschiedlichen Kontexten

Jochen

die Daten unterschiedlich zu halten und unterschiedliche

Jochen

Sachen zu speichern und so. Okay, interessant, also

Dominik

Bounded-Kontext abstrahiert das so ein bisschen.

Dominik

Was aber jetzt dafür sprechen würde, in dem Beispiel, was du gesagt hast,

Dominik

braucht man ja irgendwie eine

Dominik

Wahrheit der Daten, wenn das

Jochen

ja, das ist dann glaube ich,

Jochen

dann wird es ein bisschen schwieriger.

Jochen

Single Point of Truth,

Janis

das ist eine Herausforderung.

Janis

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

Janis

wer leistet man den in Microservices?

Janis

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

Janis

Entschuldigung, dass ich euch gerade direkt einhabe,

Dominik

aber was heißt Datenmanagement?

Janis

Ein Microservice beziehungsweise Microservices allgemein

Janis

zeichnen sich ja dadurch aus, dass das isolierte Systeme sind.

Janis

Also im Idealfall hält jeder Microservice genau die Daten,

Janis

die er braucht oder eben nicht.

Janis

Und wenn er die Daten nicht hält,

Janis

muss er natürlich überlegen, woher

Janis

kriege ich meine Daten eigentlich? Und wie kriege ich sie?

Janis

Und dann gibt es eben

Janis

verschiedene Möglichkeiten, damit umzugehen.

Janis

Ich könnte zum Beispiel mal irgendwie hier AP-Request

Janis

gegen irgendeinen anderen Microservice machen,

Janis

meinetwegen, und hole von da meine Daten.

Janis

Habe dann aber den Nachteil, okay, das ist langsam

Janis

und irgendwie kopple ich meine Microservices dann wieder zusammen.

Dominik

Genau, wenn es hinterher dieselben Datenbanken

Dominik

liegt, dann ist da die Frage, warum

Dominik

macht man da eine unterrichtliche Architektur?

Dominik

Aber vielleicht kann auch das so machen, wenn ich halt irgendwie hingehe

Dominik

und möchte aus derselben Datenbank

Dominik

Dinge erzeugen mit unterschiedlichen Sprachen

Dominik

und die dann... Ja, nicht dieselbe Datenbank.

Jochen

Genau, und dieselbe Datenbank wird schwierig,

Jochen

weil dann kannst du es halt nicht mehr getrennt voneinander deployen.

Jochen

Also wenn du jetzt zum Beispiel auf der, wenn du es in gemeinsamen

Jochen

Datenbank hast und du änderst die jetzt...

Dominik

Na gut, er kann ja einfach den Datenbank-Link deployen.

Dominik

Also die Datenbank kann ja noch ein dritter Punkt sein,

Dominik

der ganz unabhängig von den Services läuft.

Jochen

Ja, aber da kannst du es nicht mehr unabhängig

Jochen

deployen, weil wenn du jetzt die Datenbank änderst,

Jochen

dann hat das ja Auswirkungen auf den anderen.

Jochen

Hat das ja auch Auswirkungen auf die anderen Services.

Janis

Ja, und es ist ein Single-Pointer-Failure.

Janis

Also da rede ich aus ganz, ganz schmerzhafter Erfahrung.

Janis

Wenn verschiedene Services an einer Datenbank hängen,

Janis

verschiedene Microservices, und die Datenbank kippt um,

Janis

dann kippen dir die Microservices auch um,

Janis

weil irgendjemand Stoß 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,

Janis

weil es einfach einfacher ist.

Janis

Aber wenn man wirklich Microservices macht und sie wirklich braucht,

Janis

dann ist das eigentlich mal eine relativ schlechte Idee,

Janis

wenn man sich da doch, wie gesagt, den Single-Point-of-Fail reinholt.

Janis

Aber ja, eigentlich hat jeder Service seine eigene Daten,

Janis

seine eigene Datenbank.

Janis

Und du musst halt überlegen, okay,

Janis

will ich jetzt mehrfach die gleichen Daten

Janis

in verschiedenen Microservices verteilen?

Janis

Oder will ich dafür sorgen, dass sich die einzelnen Microservices

Janis

die Daten von anderen Microservices holen

Janis

und erzeuge damit eine Kopplung

Janis

und mache die Sache vielleicht ein bisschen unübersichtlicher,

Janis

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 es so schön sagt, extrem schwierig.

Dominik

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

Dominik

Also wo kommen die Daten überhaupt her?

Dominik

Und wo sollen die hin?

Dominik

Und dann, ja, also die Frage ist,

Dominik

ist das eine Architekturentscheidung, wenn du jetzt sagst,

Dominik

Design, Domain-Driven-Design?

Dominik

Was würde denn da...

Jochen

Damit sind noch keine Architekturentscheidungen gefallen quasi.

Jochen

Damit ist es halt einfach nur so ein Konzept,

Jochen

wie man Dinge angehen könnte.

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

Das ist halt die Frage, ob man, tja, also in der Vorbereitung habe ich jetzt mal so einen Podcast auch gehört, da gibt es irgendwie ein Buch, das immer empfohlen wird zu Microsoft, von Simon Newman.

Jochen

Und der ist auch in diversen Podcasts schon zu Gast gewesen und der sagte dann dazu quasi so, naja, das mit den Datenbanken ist ja so eine Sache, also wenn das funktioniert, wenn man halt eine Datenbank haben kann und so, 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 nicht kann, gut, weil man halt Microsoft das machen muss, dann okay, da muss man sich halt was überlegen, dann wird es halt schwierig.

Jochen

Und dann derjenige, der in den Interview hatte, fragte dann halt auch so, ja, kann man denn dann irgendwie was tun, um Datenbanken schon darauf auszulegen, dass man die dann vielleicht trennen kann?

Jochen

Oder kann man das irgendwie Architektur, ja, das kann man, warum sollte man das tun? Muss der Datenbank schreckliche Dinge antun, damit das geht? Also es muss einem halt klar sein.

Jochen

Also, ja, also es geht schon,

Jochen

aber es ist halt, die Frage wäre,

Jochen

würde man so anfangen wollen?

Jochen

Und da denke ich, ja,

Jochen

warum nicht einfach mit einem ganz normalen Datenbankschema anfangen?

Dominik

Genau, ja, aber das würde ja nicht für Microsoft versprechen,

Dominik

sondern für einen Monolithen 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,

Jochen

warum man das macht.

Dominik

Also, das heißt, ich würde das auch so intuitiv sagen,

Dominik

du baust halt jetzt einmal dein Deployment

Dominik

für ein Tool, für eine Web-Anwendung

Dominik

und hast halt dann eine Datenbank dahinter

Dominik

und arbeitest dann damit und erweiterst sie halt.

Dominik

Und die Frage ist halt, wann komme ich denn überhaupt in diese Sphäre,

Dominik

dass ich sage, Microsoft wäre jetzt eine gute Idee

Dominik

oder das behilft mir irgendwo bei?

Janis

Das ist unterschiedlich.

Janis

Vielleicht erst mal eingehakt,

Janis

noch bei diesem Datenbank-Auseinanderschneiden,

Janis

das stelle ich mir sehr, sehr kompliziert vor.

Janis

Das, was wesentlich einfacher ist, sich vorzustellen,

Janis

ist, dass jeder Service tatsächlich seine eigene, echte Datenbank hat.

Janis

Und man verteilt die Daten dann quasi auf verschiedene Microservices

Janis

in ganz normalen Datenbanken.

Janis

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

Jochen

Nee, gut, aber du hast ja dann das Problem.

Jochen

Du hast ja eine verteilte

Jochen

Datenhaltung, wo du nicht einfach einen Join

Jochen

machen kannst, sondern du musst dann halt...

Janis

Ja, klar. Also das Datenmanagement selbst,

Janis

das ist wesentlich komplizierter geworden.

Janis

Aber die Datenhaltung pro Service, die ist immer noch

Janis

relativ einfach. Und das muss man

Janis

halt ganz klar sagen. Also die einzelnen

Janis

Microservices in sich, die sind unglaublich

Janis

einfach. Wenn du zum Beispiel

Janis

Monolithen hast, und da kommen wir direkt zu deiner

Janis

Frage, die du gestellt hast. Ein Monolith, der wird sehr schnell

Janis

sehr kompliziert. Also gerade dann, wenn du viele

Janis

Leute an einer Codebasis arbeiten hast, mit

Janis

vielen verschiedenen Services da drin,

Janis

die sich vielleicht auch gegenseitig affektieren.

Janis

Also du bindest ja unter Umständen einzelne Services aneinander

Janis

und du hast dann auf einmal teamübergreifende Bugs,

Janis

meinetwegen, weil du eine gemeinsame Code-Basis hast.

Janis

Dann denkt man schon relativ schnell bei Microservices nach.

Janis

Okay, aber das klingt jetzt so,

Dominik

als wären die Apps jetzt nicht so gut getestet im Staging oder sowas

Dominik

und als würden jetzt Dinge, die halt eine Seite kaputt machen,

Dominik

andere Apps kaputt machen.

Dominik

wenn man jetzt beispielsweise in Django-Apps jetzt

Dominik

denkt, ja, wenn man das parallel

Dominik

entwickelt, dann könnte man die ja voneinander

Dominik

trennen, also. Im besten Fall

Dominik

tut man das, ja, das ist dann.

Dominik

Also wenn die sich gegenseitig differenzieren, kommt man natürlich in

Dominik

so ein Dependency-Problem vielleicht,

Jochen

aber. Ja, ja, ich glaube, also

Jochen

ich meine, das ist auch

Jochen

immer was, wo

Jochen

es geht eigentlich im Grunde, das zentrale

Jochen

Problem irgendwie bei der Softwareentwicklung ist eben dieses

Jochen

Modularisierungsproblem, das ist halt irgendwie so

Jochen

das Ding, was jeder hat und was irgendwie

Jochen

ganz einfach aussieht, wo alle sagen, ah, dann

Jochen

sondern halt ein bisschen modularisieren, kein Problem.

Jochen

Das ist aber tatsächlich sehr schwierig.

Dominik

Ja, User musst du sehr oft importieren.

Dominik

Das heißt, dass zum Beispiel, wenn da irgendwas kaputt geht,

Dominik

das ist schon doof dann wahrscheinlich.

Jochen

Ja, aber du kannst ja trotzdem sozusagen die Dinge irgendwie auseinanderhalten,

Jochen

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 man kann da schon was tun und man kann das richtig und falsch machen.

Jochen

Und meistens machen sie es total falsch.

Jochen

Und das, die allerschlimmsten

Jochen

Geschichten sind dann halt, oder wenn man es halt

Jochen

verteilt falsch macht, das ist halt

Jochen

ja, insofern, ich bin

Jochen

auch so ein bisschen immer

Jochen

also vorsichtig,

Jochen

weil häufig, was ich

Jochen

halt schon häufiger gesehen habe, ist,

Jochen

dass Leute dann sagen, also sie haben halt dieses

Jochen

Problem, das Standardproblem irgendwie, das

Jochen

alle haben in der Softwareentwicklung irgendwie, sie kriegen

Jochen

ihren Kram halt nicht organisiert,

Jochen

so richtig und richtig strukturiert

Jochen

und nicht modularisiert und

Jochen

dann nehmen sie halt

Jochen

irgendwie Teile, die kompliziert sind und machen daraus

Jochen

Mikroservices, weil sie sagen, ja, dann haben wir das

Jochen

irgendwie modularisiert. Aber das ist ja nicht so, sondern

Jochen

dann hat man es einfach nur verteilt. Das heißt, man hat ein Ding,

Jochen

was man nicht modularisiert hatte, verteilt und dann hat man

Jochen

halt einen verteilten Monolithen und das ist halt

Jochen

und das passiert leider

Jochen

sehr oft.

Jochen

Ja, insofern, genau.

Jochen

Aber ich glaube, dem kann man so ein bisschen entgehen,

Jochen

wenn man sich überlegt am Anfang so, wofür will ich das

Jochen

eigentlich bauen und warum mache ich das?

Jochen

Und dann geht das wahrscheinlich schon besser.

Jochen

Die Frage ist auch immer,

Janis

ob man es besser oder schlimmer macht oder ob man überhaupt was am Zustand ändert.

Janis

Ich meine, wenn man innerhalb seiner Architektur

Janis

beziehungsweise innerhalb seines Codes Referenzen hat,

Janis

dann hat man die ja automatisch nicht mehr nur,

Janis

wenn man auf einmal Microsofts verwendet.

Janis

Man verlagert das Problem.

Janis

Aber ich sage jetzt mal, man macht die Sache halt,

Janis

die Code-Basis selbst wesentlich einfacher

Janis

und manchmal läuft man auch einfach in eine Situation,

Janis

wo man feststellt, okay, die Funktion, die ich jetzt hier machen möchte,

Janis

die ist...

Janis

In dem Umfeld, in dem ich mich gerade bewege, einfach super schwierig zu implementieren. Das heißt, ich finde gar keinen geeigneten technischen Ansatz, da mal ein wenig was einzubauen. Vielleicht ein ganz, ganz einfaches Beispiel. Wir haben jetzt eine Django-Anwendung und wir haben jetzt irgendwo, weiß ich nicht, RabbitMQ, Kafka, irgendwas rumliegen, irgendeine Queue, irgendein Topic und das will ich konsumieren.

Janis

Und dann muss ich mal überlegen, gut, wie baue ich das möglichst elegant in eine Django-Anwendung ein? Dann habe ich da irgendwie permanent etwas Parallellaufendes, kann man machen. 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 Socke-Verbindung aufmachen zu einem Kafka oder einer anderen Q?

Janis

Ich würde es gar nicht mal so ausdrücken. Ich würde einfach mal den Sachverhalt an sich in den Raum stellen, dass ich einen Umstand habe, der sich einfach nicht natürlich fühlt, in die aktuelle Anwendung einzubinden und die man dann reinhackt unter Umständen oder wo man meinetwegen sagt, okay, ich finde jetzt in meiner jetzigen Architektur einfach allgemein keinen schönen Ansatz für das, was ich vorhabe.

Janis

Weiß ich nicht. Es kann auch andere Gründe haben. Du hast einen riesen Monolithen Django und du hast meinetwegen einen Java-Entwickler, der eine andere Funktion in Java super cool machen kann, findet sich aber nicht im Django zurecht und überlegst, okay, macht es Sinn für den jetzt einen eigenen Service aufzumachen oder nicht?

Janis

Und vielleicht geht das mehr so in die Richtung politische Entscheidung oder auch nicht. Aber manchmal ist auch so das Skillset der Mitarbeiter, die du gerade hast, verleiten dich einfach dazu, zu sagen, okay, ich kann nicht alles in dieser einen Codebase lösen, ich kann nicht alles mit diesem einen Deployment lösen. Vielleicht lagern wir das aus und vielleicht ziehen wir dadurch wirklich unsere Vorteile.

Dominik

Ja, also was ich halt da wieder an Problemen sehe, ist halt, wenn ich das jetzt tue, dann habe ich ja irgendwo den Hut nicht auf. Oder ich muss den Hut an einer Stelle aufsetzen und muss das dann wieder aggregieren, wo du das vom API-Gateway sprachst. Also wenn ich diese Spinne im Netz sein will, die halt die Informationshoheit hat, die die Single Source of Truth irgendwie bereitstellen möchte.

Janis

Aber das ist ja kein API-Gateway.

Janis

Nein, gut, aber du hast halt

Dominik

andere Services, andere Teile der Applikation

Dominik

arbeiten irgendwo auf einer ganz anderen

Dominik

Maschine, mit einem ganz anderen

Dominik

Deployment und die liefern mir irgendwas.

Dominik

Ja.

Dominik

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

Dominik

Also wenn ich das aus meiner Seite, das muss halt eigentlich

Dominik

auf deren Seite dann getestet sein. Das heißt, ich

Dominik

gebe quasi die ganze Verantwortung

Janis

auch weg. Ja, du hast natürlich

Janis

sehr viel, du hast wahrscheinlich wesentlich mehr Integration-Tests

Janis

erst mal, als du in einem Monolithen hättest.

Janis

Auf der anderen Seite sagt man ja, die einzelnen Services, die sind entkoppelt voneinander. Das heißt, wenn deiner läuft, hast du deinen Job gemacht und das ist erstmal alles gut und der andere muss dafür sorgen, dass sein Microservice läuft. Das heißt, man verlässt sich irgendwie aufeinander und ich habe so ein bisschen das Gefühl, dass das Problem, worauf du dich so ein bisschen einschießt, ist das größte Problem in Microservices allgemein.

Janis

Das ist immer so eine Sache, die kann man unglaublich gut machen oder unglaublich schlecht machen. Oder man macht es einfach, wie man es macht. Also man bewegt sich irgendwo in der Mitte und mal funktioniert es richtig gut und mal nicht. Also das ist eine Riesenherausforderung, worüber du sprichst beim Single Point of Truth, beziehungsweise auch das ganze Monitoring. Das ist ja wesentlich komplizierter in der Microservice-Welt.

Dominik

Ja, also wenn das meine eigene Organisation ist, die die Microservices macht, dann muss ich ja irgendwo dann trotzdem irgendeine Form von Infrastruktur einziehen jeweils, die dann irgendwie aggregiert bei mir halt, wie du sagst, Monitoring macht und da halt irgendwie die Logfiles rauspasst oder irgendwie.

Jochen

Du musst überhaupt mit sowas erstmal anfangen und wir haben das

Jochen

möglicherweise eben noch nicht. Das ist auch

Jochen

das erste Projekt, was er vorschlägt,

Jochen

wenn man sich dann tatsächlich doch mal dazu durchgeguckt hat,

Jochen

das dann zu machen.

Jochen

Ein gutes Startprojekt ist halt zu sagen, okay, da machen

Jochen

wir doch mal irgendwie

Jochen

als ersten Microservice irgendwie

Jochen

zentrales

Jochen

Logmanagement.

Jochen

Weil das ist halt relativ

Jochen

einfach. Das ist eigentlich nicht so schwierig.

Jochen

Aber man muss halt trotzdem

Jochen

irgendwie Sachen

Jochen

irgendwo hindeployen können und man hat unterschiedliche

Jochen

Sprachen, man muss es irgendwie

Jochen

konfigurieren und diese ganzen

Jochen

unterschiedlichen Aspekte

Jochen

irgendwie müssen alle zusammen funktionieren,

Jochen

sonst geht es halt nicht und wenn man da schon feststellt, okay,

Jochen

das ist mit der Organisation, weil das

Jochen

oft hat man ja so Organisationsproblem,

Jochen

schwierig zu machen, dann weiß man halt, okay,

Jochen

alles andere, danach wird noch viel schwieriger, daher sollte

Jochen

man vielleicht nochmal überlegen, wie man das

Jochen

organisatorisch löst.

Jochen

Aber ja, genau, genau,

Jochen

das ist eigentlich, du brauchst dann halt irgendwas, wo

Jochen

du dann halt zentral deinen Log-File sehen kannst

Jochen

und gucken kannst, was passiert ist, über

Jochen

deine unterschiedlichen Services hinweg.

Jochen

Und das musstest du vorher vielleicht nicht.

Dominik

Also das meinte ich mit dem Hut auf Farben,

Dominik

ich musste halt immer irgendwie so ein Admin haben oder so.

Jochen

Naja, also ich meine, du hast dann

Jochen

ein Ding für Log-Geschichten, du hast aber

Jochen

vielleicht auch ein anderes Ding für Monitoring, du hast

Jochen

wieder ein anderes Ding für, weiß ich nicht,

Jochen

dein Live-Dashboard

Jochen

oder so, das müsste ja jetzt nicht alles das

Jochen

gleiche sein.

Dominik

Aber das Problem, was ich jetzt habe, ist dann

Dominik

wahrscheinlich niemand den Hut über alle diese Dinge auf hat.

Dominik

Und es dann schwerfällt, die halt

Dominik

in der Bar getragen werden.

Dominik

Ich meine, am Ende,

Janis

ich meine, das, worauf der Jochen

Janis

hingewiesen hat, wir haben ja unsere Tools.

Janis

Also der Elk-Stack für Logging, meinetwegen

Janis

Sentry für Fehlermeldungen, dann hast du vielleicht

Janis

noch Grafana, Prometheus für Metric-Monitoring.

Janis

Das sind ja alles standardisierte

Janis

Ansätze, die du relativ einfach in deiner

Janis

Services einbauen kannst. Also File-Bit-Logging

Janis

geht zum Elk-Stack. Und das ist halt

Janis

etwas, wo man sich auch in einem Monolithen durchaus

Janis

Gedanken drüber machen muss, um da einen einfachen Zugang zu seinen

Janis

Logs zu kriegen zum Beispiel.

Janis

Gerade dann, wenn du in einem Team bist,

Janis

dann finde ich schon, dass man sich relativ früh

Janis

die Gedanken über genau diese Fragestellungen

Janis

machen sollte, damit einfach jedes Teammitglied

Janis

ohne Serverzugriff oder irgendwas

Janis

anderes komisches eben an seine Logs

Janis

kommt und diese möglichst schön filtern kann.

Janis

Elk-Stack ist auch wunderbar.

Janis

Das heißt, diesen Stack, den hast du

Janis

unter Umständen auch in einer guten monolithischen

Dominik

Struktur schon. Vielleicht könnt ihr ja mal noch kurz den Elk-Stack

Dominik

beschreiben, weil den hatten wir, glaube ich, noch nicht.

Dominik

Das ist einfach nur, ich weiß

Jochen

jetzt gar nicht, ob ich das richtig, ich habe mit dem

Jochen

gar nicht so viel, das ist irgendwie Elasticsearch

Jochen

halt, um die Logfiles durchs Ufer zu machen.

Jochen

Das ist halt Kibana

Jochen

Dashboard.

Jochen

Genau, und

Jochen

was gehört da noch dazu?

Jochen

Logstash.

Janis

Vielleicht auch, um das zu beschreiben,

Janis

du kannst in Python zum Beispiel, schreibst du

Janis

deine Logfiles in Files und dann kannst du dir die mit

Janis

Filebeat Richtung Logstash

Janis

schicken. Das ist einfach nur ein weiterer Service.

Janis

Der sorgt dann letztlich

Janis

einfach nur dafür, dass die Logs, die du

Janis

schreibst, Richtung Elasticsearch gehen.

Janis

und entweder du hast da noch ein Logs-Dash vor oder nicht,

Janis

dann kannst du die vielleicht noch ein bisschen schöner formatieren,

Janis

um sie ein bisschen schöner JSON-tauglicher zu machen

Janis

und durchsuchbarer zu machen, einzelne Felder zu indizieren.

Janis

Und dann wird das eben auf Elasticsearch gespeichert

Janis

und mit Kibana durchsuchst du es einfach.

Janis

Dann kriegst du so ein Dashboard,

Janis

dann kannst du relativ nutzerfreundlich

Janis

mit schön viel Clicky-Bunty deine Logs durchsuchen

Janis

und dann hast du deine Graphen, kannst dir auch Dashboards bauen.

Janis

Ja, Kibana ist super.

Janis

Freitext-Suche, das ist sehr schön.

Janis

Ja.

Janis

Macht Spaß.

Jochen

Okay. Ja, ich sehe es auch tatsächlich, also wenn du sagst, in der Organisation irgendwie muss doch jemand, ich denke, das ist halt eines der Ziele bei dieser ganzen Geschichte, gerade wenn man es bei größeren Organisationen sich anschaut, die haben oft das Problem, also wenn man sich jetzt anguckt, was machen denn Firmen vorher oder was machen die normalerweise anders, wenn sie nicht Microsoft machen, dann machen sie meistens so eine, also ich würde sagen, Microsoft versucht das ganze Problem,

Jochen

die Problemdomäne irgendwie vertikal aufzutrennen

Jochen

und was man klassischerweise

Jochen

vielleicht eher macht, sind Sachen horizontal

Jochen

aufzuteilen. Das heißt, du teilst

Jochen

normalerweise, sag ich mal, eben dann vielleicht

Jochen

eher auf in Frontend

Jochen

irgendwie so Service Layer und Backend

Jochen

und Datenhaltung

Jochen

und sozusagen bei Microservices

Jochen

halt eher vertikal, das heißt pro Projekt irgendwie

Jochen

oder pro

Jochen

eine Organisationsstruktur halt.

Jochen

Und das Problem bei dem horizontalen

Jochen

Ding, weshalb man da vielleicht weg möchte

Jochen

von, ist halt, dass

Jochen

du halt, wenn du jetzt

Jochen

viele Leute hast, die daran arbeiten,

Jochen

an deinem Produkt, dann, genau, dann stehen

Jochen

sie halt gegenseitig auf den Füßen unter Umständen.

Jochen

Also du hast dann vielleicht halt eben schon

Jochen

ein

Jochen

Datenbank-Team

Jochen

oder so, wo sich die Leute sehr, sehr gut

Jochen

mit Datenbanken auskennen, aber

Jochen

und du brauchst sie halt auch,

Jochen

deswegen, weil du halt eventuell fiese Datenbankprobleme

Jochen

hast, wo Leute irgendwie Queries optimieren

Jochen

müssen oder sich überlegen müssen, wie sie da

Jochen

halt irgendwie möglichst schnell neue

Jochen

irgendwie Replikas

Jochen

von irgendwelchen Datenmarken hochziehen können und die Daten

Jochen

da und so weiter.

Jochen

Dieses ganze Zeugs, was man

Jochen

halt so machen muss.

Jochen

Und das sind dann halt so die

Jochen

Sachen, für die du tatsächlich Spezialisten brauchst, aber

Jochen

du hast halt oft auch das Problem, du willst

Jochen

jetzt, hast jetzt irgendwie ein Projekt und da muss halt

Jochen

irgendwie jetzt eine Spalte zusätzlich irgendwo

Jochen

in der Tabelle. Und da ist jetzt eigentlich

Jochen

nichts, was so sonderlich schwierig ist. Vielleicht

Jochen

sollte man sich überlegen, ob man das dann machen will oder nicht oder keine Ahnung,

Jochen

aber letztlich das zu tun ist gar nicht so schwer

Jochen

und dein Datenbank-Team ist

Jochen

jetzt zum Beispiel gerade mit irgendeinem anderen Projekt beschäftigt

Jochen

oder so. Und dann kommst du nicht weiter

Jochen

mit deinem eigentlich Projekt,

Jochen

das nur da eine blöde Spalte zusätzlich haben

Jochen

muss. Es gibt halt eine Menge Anforderungen, die sehr

Jochen

einfach sind. Also entweder du

Jochen

beschäftigst dann halt deine teuren Spezialexperten

Jochen

irgendwie mit sehr simplen Geschichten

Jochen

oder

Jochen

du kannst die nicht auslasten,

Jochen

weil

Jochen

die halt

Jochen

oder du kannst halt

Jochen

mit deinen Projekten nicht weiter, weil die halt mit

Jochen

irgendwelchen anderen Kram ausgelastet sind.

Jochen

Und das blockiert sich halt gegenseitig.

Jochen

Du hast halt sehr viel Handoffs, zwischendurch viel Kommunikation,

Jochen

weil viele Leute miteinander

Jochen

reden müssen, damit irgendwas am Schluss

Jochen

deployed werden kann. Und wenn du es jetzt anders

Jochen

machst und machst es halt vertikal und sagst, ein Team ist

Jochen

im Grunde dafür zuständig, das komplett zu deployen

Jochen

in ein Produkt, Projekt,

Jochen

Microservice,

Jochen

dann, und die anderen sind halt bloß,

Jochen

die beraten dich

Jochen

dann halt, wenn es irgendwie

Jochen

kompliziert wird oder so und

Jochen

enablen, dich halt irgendwie da

Jochen

eine Lösung zu finden, dann kannst du halt sehr viel

Jochen

schneller halt Sachen tatsächlich

Jochen

raus aus der Tür kriegen

Jochen

und du machst

Jochen

bestimmte Teile deiner Organisation halt auch

Jochen

handlungsfähig,

Jochen

ohne dass sie halt sich mit allen anderen abstimmen müssen.

Jochen

Und dann, also das sind vor allen Dingen

Jochen

zwei Teile, die da halt ein Problem

Jochen

sind, das ist halt einmal die Infrastruktur ganz unten,

Jochen

das sind halt Datenbank und so und

Jochen

IT-Geschichten und dann oben halt aber UI

Jochen

und UX ist auch immer problematisch, deswegen

Jochen

eben gerade schon mit dem Mikrofon jetzt so ein bisschen,

Jochen

weil das Problem ist, wie stellst du Konsistenz

Jochen

gegen, quasi

Jochen

sicher, wenn halt du nicht mehr ein

Jochen

UI-Team hast, das halt alles

Jochen

auf allem irgendwie zu einem Ja sagen

Jochen

muss, dass das jetzt so funktioniert. Die könnten dann sagen,

Jochen

ja, nee, das muss konsistent sein, das können wir so nicht machen.

Jochen

Aber wenn jetzt die Teams das einzeln machen sollen,

Jochen

dann kann es natürlich inkonsistent werden. Ja, dann müssen ja

Dominik

irgendwie komische Style-Guides folgen oder so.

Jochen

Ja, aber ob sie das dann tun oder nicht, weil das Team

Jochen

muss dann ja verantwortlich sein. Die müssen ja sagen können,

Jochen

nee, wir releasen, das ist uns wichtiger und dann,

Jochen

oder wir deployen jetzt und dann machen sie das halt einfach.

Jochen

Das wäre Kraut und Rüben.

Jochen

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

Jochen

Und ich finde, in einer Firma

Jochen

gibt es das auch sehr schön,

Jochen

sowohl was das an Vorteilen bringen kann,

Jochen

sieht man da, und auch was an Nachteilen, nämlich bei Amazon.

Jochen

Die haben ja eigentlich früher schon angefangen mit

Jochen

Service-Oriented Architecture, was vielleicht

Jochen

auch so ein bisschen Vorläufer ist von Microservices.

Jochen

Und auf der Amazon-Shopping-Seite,

Jochen

da funktioniert das, finde ich, ganz gut.

Jochen

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

Jochen

und altbacken und so.

Jochen

Aber das geht irgendwie. Also man kann

Jochen

einkaufen und meistens funktioniert es sogar besser als

Jochen

anderswo vom Prozess her.

Jochen

Aber, also das geht.

Jochen

Das ist zwar nicht so komplett konsistent, aber das

Jochen

funktioniert insgesamt. Und wo ich

Jochen

finde, wo es eine ziemliche Katastrophe ist, ist halt

Jochen

sowas wie AWS oder so. Wo man auch sieht, dass

Jochen

jedes einzelne Team, also einmal es gibt hunderte

Jochen

und dann jedes Team macht das halt

Jochen

irgendwie anders, so wie sie es halt denken.

Jochen

Und das macht es für mich als Benutzer halt total schwierig

Jochen

irgendwie das zu

Jochen

bedienen, weil ich nie Sachen

Jochen

finde und immer

Jochen

suchen muss nach Sachen und so.

Dominik

Naja, also auch die Konfiguration, wenn man das irgendwie automatisiert,

Dominik

ist ja jedes Mal total anders und das ist ein bisschen

Jochen

nervig auch. Ja, also ich meine, es geht schon, aber es ist halt

Jochen

schon, das macht es echt, da an der Stelle

Jochen

macht die fehlende Konsistenz einem das Leben halt echt schwer.

Jochen

Und ja, aber

Jochen

ich glaube, das sind halt so Trade-offs, da muss man

Jochen

sich entscheiden, ist einem die Konsistenz wichtiger oder die Geschwindigkeit?

Jochen

Ja.

Jochen

Ja.

Jochen

Naja, naja.

Jochen

Wenig Begeisterung für Microservices

Janis

habe ich das Gefühl. Ja, ich weiß nicht, also

Dominik

Ich habe noch nicht so rausgefunden, wofür ich

Dominik

dann jetzt ein Microsoft gut

Dominik

einsetzen könnte. Also wenn ich mir jetzt vorstelle, ich möchte

Dominik

jetzt irgendwie so ein Projekt implementieren,

Dominik

irgendwie so eine gewisse Größe und dann

Dominik

muss ich

Dominik

ja, wie du, Jörg, so schön

Dominik

sagst, enablen die Leute, dass

Dominik

sie selber klarkommen mit den ganzen

Dominik

Regeln, die ich irgendwie haben

Janis

will. Ich glaube, das ist noch viel zu

Janis

kompliziert. Ich glaube, erst mal

Janis

muss man überlegen, brauche ich das überhaupt? Also macht das

Janis

für mich überhaupt Sinn? Habe ich die Größe? Wie viele

Janis

Mitarbeiter habe ich? Bin ich jetzt zu fünf, dann mache ich kein

Janis

Microservices auf. Aber habe ich meinetwegen

Janis

20, 30, 40 Mitarbeiter,

Janis

das macht schon super viel Sinn, da über Microservices

Janis

nachzudenken, weil ich kann jetzt

Janis

eigene Teams machen, diese Teams haben

Janis

verschiedene Verantwortlichkeiten und

Janis

natürlich habe ich hinterher den Trade-off

Janis

mit Konsistenz meinetwegen

Janis

im Frontend. Frontend

Janis

ist halt immer so, ich bin nicht im Frontend

Janis

drin, ich persönlich. Also ich halte mich

Janis

davon so weit fern wie nur möglich

Janis

und so Backend-Prozesse,

Janis

da sind so Guidelines total egal.

Dominik

Nein, aber ich versuche jetzt wirklich nochmal von diesem Management-Layer von oben das mir anzugucken, weil du hast natürlich recht, wenn ich jetzt ein Konzern habe mit 100.000 Mitarbeitern, dann macht das vielleicht Sinn, die Teams zu verteilen auf ihre einzelnen Kompetenzen, die sie haben, die in unterschiedlichen Ländern so sitzen, 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. Ja, dann habe ich wieder das Problem des Brandings oder wie auch immer. Oder halt, ich möchte eine Nutzbarmachung der einzelnen Services für alle sicherstellen.

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, das steht halt noch drin.

Dominik

Genau, aber ist die Frage, erschlage ich das dann mit irgendwelchen Prozessen? Weiß ich nicht, das macht es ja nicht besser. Dann habe ich den Vorteil von Microsoft, das habe ich dann nicht mehr, weil dann muss ich durch so ein Prozess-Gateway durchkommen und habe dann einen Doorkeeper nach dem anderen.

Janis

Ja gut, aber auch um auf deine Frage zu kommen, die Frage ist dann am Ende auch, wie schlimm ist das? Also wenn ich jetzt zum Beispiel in Tokio das eine Team habe und in Berlin das andere, die backen beide ihren eigenen Kuchen, dann ist es 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 und umgekehrt natürlich auch, weil Microservice-Teams, die stehen ja für sich alleine. Das heißt, wir haben ein Team, das arbeitet an einer Sache, das deployed ein Service für sich alleine und der muss natürlich integrativ mit den anderen irgendwie funktionieren.

Jochen

Ja, ich würde auch denken, dass das Problem eher tatsächlich andersrum ist. Also das, was dann tatsächlich auftritt. Also ich meine, ja, es kann auch sein, dass es schwierig ist, das zu koordinieren. Keine Ahnung. Kann man sich ja vielleicht irgendwas überlegen. Aber das habe ich jetzt noch gar nicht so gehört, als dass es ein Riesenproblem ist.

Jochen

Was aber schon ein Riesenproblem ist,

Jochen

wenn du jetzt

Jochen

so etwas hast,

Jochen

ich weiß jetzt nicht, was das Beispiel war,

Jochen

du hast halt irgendwie

Jochen

einen Konzern, der hat halt hunderte

Jochen

Marken und jede Marke hat irgendwie

Jochen

eigene Dienste, die sie

Jochen

irgendwie anbieten

Jochen

und die sind alle in unterschiedlichen

Jochen

Teams und so und auch weltweit verteilt und so.

Jochen

Wie stellst du denn sicher, dass du irgendwas

Jochen

über einen bestimmten Kunden weißt zentral?

Jochen

Das kriegst du halt dann nicht mehr hin.

Dominik

Oder halt über die Produktion, wenn du derjenige bist,

Dominik

das produziert und das dann verteilt an Unternehmern.

Dominik

Das ist genau das, was ich meine.

Jochen

Ja, das ist der Nachteil, das geht halt nicht mehr.

Jochen

Aber das ist ja das, was

Dominik

ich zentral, das sind wir vielleicht wieder,

Dominik

was man bei Single Point of Truth irgendwie

Dominik

überschreiben kann. Das ist eine Herausforderung.

Dominik

Ich muss halt irgendwie sicherstellen, dass die Wahrheit,

Dominik

ich will die Wahrheit haben, damit ich das menschen kann,

Dominik

damit ich die Entscheidung richtig treffen kann, damit ich

Dominik

die Steuerung...

Jochen

Es ist halt die Frage, also es geht halt manchmal,

Jochen

ich meine, ich kenne es halt zum Beispiel

Jochen

als zweitgrößte E-Commerce-Konzer

Jochen

in der Welt. Wisst ihr, wer das ist?

Jochen

Hm? Nach Amazon?

Jochen

Otto?

Jochen

Ja, das ist Otto.

Jochen

Aber tatsächlich, ich weiß nicht mehr, ob das

Jochen

noch stimmt. Es kann sein, dass

Jochen

AliExpress oder so

Jochen

größer ist.

Jochen

Oder Alibaba.

Jochen

Aber Otto auf jeden Fall sehr, sehr

Jochen

groß. Und damals,

Jochen

das ist jetzt aber auch schon wieder lange her,

Jochen

hatten sie sich das auf die Fahnen

Jochen

auch geschrieben, irgendwie der Zeitgröße nach Amazon zu sein.

Jochen

Und die haben halt zum Beispiel genau

Jochen

dieses Problem, weil es gibt ja nicht

Jochen

die eine Seite, auf der dann alle irgendwie

Jochen

Zeugs einkaufen, sondern die haben halt hunderte

Jochen

Shops. Also jeder dritte

Jochen

Shop, auf dem du irgendwie landest, ist halt letztlich

Jochen

gehört zum Autokonzern. Du weißt es aber gar nicht, weil

Jochen

das steht da ja auch nicht dran.

Jochen

Die haben jetzt genau dieses Problem.

Jochen

Jeder einzelne Shop hält

Jochen

halt User-Daten und

Jochen

genau, wie machst du das denn jetzt

Jochen

eigentlich, wenn du quasi irgendwie

Jochen

Dinge wissen willst über deine User?

Dominik

Also wie kriegen die ganzen Microservices wieder alle zusammen?

Jochen

Ja, und die Antwort ist eigentlich

Jochen

gar nicht.

Dominik

Ich glaube, da kommen so Leute auf die Idee wie

Dominik

Data Lake wird dann eher Data Swamp oder so.

Dominik

Irgendwas zu sichern.

Dominik

Das schlimmste Problem

Jochen

ist gar nicht unbedingt die technische Lösung,

Jochen

sondern das schlimmste Problem sind halt die

Jochen

politischen Geschichten, die du halt auch kriegst automatisch.

Jochen

Dass halt Leute sagen so,

Jochen

wir haben hier gerade

Jochen

einen Vorteil, die sind ja untereinander im Wettbewerb,

Jochen

wir haben hier gerade einen Vorteil, weil

Jochen

wir irgendwas wissen, was die anderen

Jochen

nicht wissen und jetzt sollen wir die Daten,

Jochen

das, was uns dazu verhilft,

Jochen

dass wir irgendwie besser sein können, als

Jochen

wie unsere interne Konkurrenz, da sollen wir

Jochen

den jetzt irgendwie freiwillig zur Verfügung stellen?

Jochen

Dann haben wir halt irgendwie einen leichten

Jochen

kaputten Export, wo die Daten so ein bisschen...

Dominik

Ja, aber mit der Konzernbrille, die du dann aufhast,

Dominik

dann musst du da hingehen, musst den gordischen Knoten dann kaputt hauen.

Dominik

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

Dominik

Ja, schwierig. Sehr schwierig.

Dominik

Also, ja.

Janis

Aber auch da, ich meine,

Janis

das ist jetzt ein sehr, sehr schönes Beispiel, aber als

Janis

Konzern muss man sich natürlich die Frage stellen, was will ich

Janis

eigentlich? Will ich jetzt ein möglichst großes Franchise

Janis

so schnell wie möglich aufbauen? Habe ich die

Janis

Kapazität, um das aus

Janis

innerer Kraft herauszuschaffen oder

Janis

muss ich dafür sorgen, dass die Leute

Janis

in weiß nicht wo das alles selbst entwickeln

Janis

können, dann machen sie halt ihren eigenen Service und dann

Janis

habe ich das Problem mit den Daten, dass ich nicht unbedingt alle

Janis

Nutzer auf einmal kenne, aber das

Janis

ist dann eine Sache, die man

Janis

lösen muss im Nachhinein. Und was hilft mir jetzt

Janis

mehr? Hilft es mir mehr, da einen Shop hochzuziehen

Janis

und irgendwie

Janis

mein Geld über das Franchise reinzuziehen

Janis

oder wie auch immer? Oder will ich jetzt

Janis

einfach alles wissen und will ich die totale Kontrolle

Dominik

haben? Ja, das ist halt genau das klassische Problem

Dominik

eigentlich. Machst du halt irgendwie Diversifizierung

Dominik

oder machst du Fusionierung

Dominik

irgendwie. Das ist

Dominik

in der Software-Seite und die Frage,

Dominik

die irgendwie die Consultants immer geben, ist immer genau das Gegenteil

Dominik

von dem, was gerade da ist.

Dominik

Dann kannst du halt so ein Projekt consulten, kannst damit Geld verdienen

Dominik

und dann geht es halt immer aus und zusammen.

Dominik

Ich meine, das macht natürlich auch Sinn. Also wenn du irgendwas

Dominik

hast, was total verfilzt ist, dann musst du das

Dominik

erstmal auseinanderspalten, dann hast du kleine

Dominik

einzelne Services, die untereinander

Dominik

so ein bisschen Wettbewerb haben. Die guten Sachen

Dominik

musst du dann irgendwie wieder konsolidieren und zentralisieren,

Dominik

um dann wieder den guten Benefit rauszubekommen.

Dominik

bis du dann wieder merkst, das ist wieder doof, dann fängst du wieder an, das auseinander

Dominik

zu dröseln. Das ist ja genau wie bei den Ländern.

Dominik

Mal sind Länder werden zusammengefasst, dann werden die

Dominik

auseinander. Ja, aber das ist ja

Dominik

vielleicht auch dieser natürliche

Dominik

Zyklus, Lebenszyklus von so

Dominik

einem Ding.

Dominik

Und ja, also wenn

Dominik

ich jetzt zum Beispiel hingehe, dieses Otto-Beispiel

Dominik

nehme und ich möchte diese User-Daten haben.

Dominik

Ich würde jetzt als Otto hingehen und sagen, ich will wissen, wer sind

Dominik

meine Kunden, wie viele Kunden sind das überhaupt irgendwo.

Dominik

Dann muss ich hingehen und sagen, gebt mir alle eure Daten.

Dominik

Dann baue ich einen zentralen Service dann zusätzlich,

Dominik

der halt von allen die Daten abholt. Dann kann es sein,

Dominik

dass ich jeden einzelnen dieser Shops einzeln integrieren muss,

Dominik

kann irgendwie sein, dass das relativ viel Aufwand macht,

Dominik

aber dann hole ich mir die alle irgendwann ab

Dominik

und dann weiß ich, okay, zumindest

Dominik

in der Historie gesehen ist das vielleicht ein Tag alt

Dominik

oder so oder eine Woche, ist ja egal, aber da sind

Dominik

die Daten sind einigermaßen echt und da habe ich

Dominik

einen Vollüberblick über, was da meine Leute sind

Dominik

und da kann ich dann bestimmte Analysen

Dominik

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

Dominik

dafür machen wir jetzt wieder so kleine Services, weil dann

Janis

vielleicht, oder du kannst auch überlegen,

Janis

ob du nicht schon im Vorfeld einen

Janis

einen gewissen Standard etablierst, wo du sagst,

Janis

da sind wir wieder beim Standard natürlich.

Janis

Und bei den Gateways.

Janis

Nicht nur bei den Gateways. Ich bin

Janis

im Backend. Ich interessiere mich nicht so für die...

Dominik

Ja, doch, auch. Ja, mein Problem ist da bei der

Dominik

Gatekeeper. Ich musste gerade, weil du gesagt hast Standards,

Dominik

musste ich an Infrastrukturstandards denken.

Dominik

Und auch daran, das ist ja unheimlich

Dominik

schwierig, wenn du die gleichen

Dominik

Standards einführst für Teams, die

Dominik

auf der Welt irgendwo sitzen. Ja, damit verlierst

Jochen

du die Vorteile von Microsoft. Ja. Eigentlich sofort.

Jochen

Genau. Die Frage ist halt, was

Janis

der Standard ist. Möchte ich jetzt einfach so ein Plugin

Janis

auf jedem Shop haben, welches meinetwegen

Janis

in verschiedenen Programmiersprachen

Janis

vorhanden ist, damit die Shops autonom

Janis

sind, ist es für mich ein vertretbarer

Janis

Aufwand, das zu gewährleisten, meinetwegen.

Dominik

Das fängt ja schon bei anderen Sachen an,

Dominik

wie, keine Ahnung, jeder Dev kriegt ein Windows-Laptop

Dominik

mit AD zugefroren.

Dominik

Aber das hast du ja nicht.

Dominik

Genau, das willst du nicht machen.

Dominik

Das ist nämlich der Punkt, weil wenn du Microsoft was machst, musst du erkennen,

Dominik

dass das unabhängig sein muss

Dominik

von dem Rest und du kannst das da nicht zentralisieren.

Dominik

Und wenn du das machst, ist es halt

Dominik

kontraproduktiv, weil dann hast du den Monolithen

Dominik

irgendwo dazwischen sitzen, der wie eine Krake

Dominik

versucht, seine einzelnen Sachen doch festzuhalten

Dominik

und dann ist das völlig absurd.

Janis

Wie gesagt, also für mich muss man

Janis

da so ein bisschen von loslassen,

Janis

dass man die Kontrolle, die totale

Janis

Kontrolle haben will. Und wenn man das

Janis

kann und wenn man dann die Vorteile

Janis

für die Flexibilität sieht,

Janis

die man dabei gewinnt, dann

Janis

sind Microservices schon sehr vorteilhaft.

Dominik

Ja, genau, aber das ist genau der Punkt, weil

Dominik

wenn ich jetzt sage, ich möchte den Hut aufhaben, wird das

Dominik

so nicht funktionieren. Sonst wird nur dann funktionieren,

Dominik

wenn ich Verantwortung abgeben kann.

Dominik

Ja, dann nimmst du einen Microservice.

Janis

Aber da hast du ja schon eine Antwort.

Janis

Also willst du den Hut aufhaben, wie du es so schön sagst,

Janis

dann mach keinen Microservice.

Janis

Oder überleg dir halt sehr, sehr gut, wie du das gewährleisten kannst.

Janis

Wie viel willst du wachsen?

Janis

Vielleicht geht das ja sogar in Microservices, wer weiß.

Janis

Oder willst du die Verantwortung abgeben,

Janis

dann kannst du einen Microservice nehmen.

Janis

Die Frage am Ende ist, wenn du einen riesen Konzern hast,

Janis

hat da überhaupt noch jemand den Hut auf?

Janis

Egal, welchen Ansatz du nimmst.

Janis

Die Frage im Konzern ist dann ganz einfach.

Janis

Auf welcher Kostenstelle wird denn das gebucht?

Janis

Und wer hält dann dann wo die Hand auf?

Janis

Ja, aber ich glaube

Jochen

also, wenn man nochmal

Jochen

einen Schritt mehr Richtung

Jochen

Organisation oder allgemein oder abstraktes Problem geht,

Jochen

ich denke, also ich würde irgendwie

Jochen

diesen Trend zu Microservices halt so verorten

Jochen

in einem

Jochen

in einer Reihe von Trends, die halt alle

Jochen

in eine ähnliche Richtung laufen. Ich glaube, DevOps ist auch

Jochen

so ein Ding, was in eine ähnliche Richtung läuft, weil

Jochen

bei all diesen Dingen geht es

Jochen

im Grunde darum,

Jochen

dass man halt in

Jochen

so einer klassischen Organisation,

Jochen

dass da die Incentives irgendwie pervers

Jochen

sind, so ein bisschen.

Jochen

Und das sind alles Versuche, das zu

Jochen

lösen, dieses Problem, dass die Incentives

Jochen

eigentlich nicht korrekt sind. Also was ich

Jochen

damit meine, ist einfach nur, ist eigentlich ein total simples

Jochen

Problem. Nehmen wir an, du hast halt irgendwie

Jochen

früher, du hast halt

Jochen

Entwicklung und

Jochen

Betrieb oder

Jochen

IT und Operations oder weiß ich nicht

Jochen

und dann auf der anderen Seite Entwicklung. Und das ist vielleicht auf

Jochen

unterschiedlichen Seiten deiner Bilanz

Jochen

auch. Das eine sind dann halt

Jochen

Kosten und das andere sind halt Investitionen.

Jochen

Ja, so dann hast

Jochen

du halt irgendwie, siehst du halt

Jochen

wenn da Features entwickelt werden, siehst du das als Investition

Jochen

und denkst halt, je mehr Features

Jochen

entwickeln werden, voll gut, gibt mir in der Zukunft

Jochen

mehr Einnahmen, total super.

Jochen

So, das heißt

Jochen

irgendwie deine Entwicklung misst du daran,

Jochen

wie viele Features kriegen die eigentlich pro Quartal irgendwie raus

Jochen

oder keine Ahnung, irgendwie sowas.

Jochen

Dann geht das Ganze in den Betrieb.

Jochen

Woran misst du deinen Betrieb?

Jochen

Den misst du an den Kosten und daran,

Jochen

dass es halt funktioniert. Aber

Jochen

sozusagen die

Jochen

Leute, die da arbeiten, die haben nichts

Jochen

davon, dass da mehr Features

Jochen

rausgehen. Die werden

Jochen

nicht, kriegen nicht mehr Geld dafür,

Jochen

dass sie halt dafür

Jochen

sorgen, dass die Entwickler mehr Features veröffentlicht werden.

Jochen

Was ist deren

Jochen

rational

Jochen

beste Strategie in diesem

Jochen

Setting? Ist halt tatsächlich zu sagen,

Jochen

never change a running system.

Jochen

Ja, irgendwie.

Jochen

Ich werde nicht belohnt dafür.

Jochen

Ich bin ein Kostenfaktor. Ich werde nur bestraft,

Jochen

irgendwas nicht geht. Ja, solange das Wasser läuft

Jochen

und der Strom an ist, alles gut.

Jochen

Sobald der Strom ausfällt, kriege ich

Jochen

ein Problem.

Jochen

Das heißt, mein Ding ist

Jochen

also, ich meine, klar, irgendwie eine Änderung kann sein,

Jochen

dass sie gut ist für andere, ja, aber ich habe ja nichts davon.

Jochen

Oder sie ist schlecht, dann

Jochen

trifft mich das. Das heißt,

Jochen

ich versuche, möglichst Änderungen zu verhindern.

Jochen

Dann, das ist sozusagen für mich

Jochen

am besten, weil dann kann ich sicherstellen,

Jochen

dass möglichst wenig kaputt geht. Und

Jochen

na gut, für die anderen ist das halt nicht so toll, dass sie halt nicht so

Jochen

viele Features rauskriegen, aber ist ja ehrlich gesagt nicht mein Problem.

Jochen

Ja, so und dann, das ist halt etwas, in das Unternehmen dann halt früher oder später irgendwann reinlaufen und überlegen sie sich, wie sie damit irgendwie umgehen, dass das jetzt irgendwie problematisch ist und das halt irgendwie, das ist halt ein Maß dafür, ja, man sich fragt so, also dann macht man dann ein Kostenstellen und keine Ahnung und dann sagt man intern so und dann kostet das unfassbare Beträge, irgendwas sehr simples zu tun, dann fragt man sich, ja, wie kommt denn das zustande, dass das plötzlich so wahnsinnig viel kostet?

Jochen

Ein Server 50.000 Euro?

Jochen

Ja, irgendwie sowas.

Jochen

Und die Antwort ist einfach so,

Jochen

ja, das ist halt deswegen,

Jochen

damit du das nicht machst,

Jochen

damit du nichts änderst.

Jochen

Ja, das ist der Grund.

Jochen

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

Jochen

Dass jemand sagt so,

Jochen

irgendwie ich gehe ja für dich das Risiko,

Jochen

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,

Jochen

also die Lösung dafür ist halt dann sozusagen

Jochen

die Verantwortung für diese Dinge halt auch

Jochen

mit in den Bereich zu packen,

Jochen

der halt davon profitiert,

Jochen

wenn was deployed wird. Ja, mit in den agilen Sprint

Jochen

das zu packen. Genau, genau,

Jochen

Agile, auch so ein Ding, wo man sagt, okay,

Jochen

genau, packen wir das alles

Jochen

zusammen. Ja, oder

Jochen

halt eben DevOps, wo man sagt, okay,

Jochen

die Leute, die das deployed

Jochen

haben wollen, deployen es dann halt auch selber und betreiben es auch selber.

Jochen

Der DevSecOps jetzt, ne?

Jochen

Okay.

Jochen

Fullstack-Microservice

Jochen

DevOps

Jochen

im agilen Prozess,

Jochen

ja, die haben wir alle zusammen, glaube ich,

Jochen

weiß nicht, aber ja,

Jochen

Es geht halt darum,

Jochen

dass einzelne Teams halt möglichst autark

Jochen

Dinge machen können.

Jochen

Dass man halt sozusagen da, wo man investiert,

Jochen

auch tatsächlich, dass die auch dann

Jochen

die Möglichkeit haben,

Jochen

das umzusetzen. Aber

Jochen

das kommt halt mit dem Preis. Das ist halt Trade-Off.

Jochen

Es ist halt nicht so, dass das dann insgesamt automatisch

Jochen

super viel besser ist, wenn man das so macht, sondern

Jochen

man wird dann halt schneller und so, aber man wird

Jochen

eigentlich automatisch halt inkonsistenter dabei.

Dominik

Ja, das Problem ist, wenn die Leute aneinander ziehen, wenn es halt dann so einen PM-Layer dazwischen gibt, der dann in verschiedenen Schrauben zieht, also auch politisch zieht, weil es um Kostenstellen 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, Microservice ist ganz groß geschrieben, du willst ganz viel Microservice machen, aber hast eigentlich da die ganze Zeit diese Krake, die das festhält. Und das funktioniert, glaube ich, überhaupt nicht gut.

Jochen

Äh, weiß ich gar nicht.

Jochen

Also ich meine, das Problem,

Jochen

also vielleicht kann man das ja

Jochen

an einzelnen Projekten irgendwie, also

Jochen

ich würde ja auch denken, dass eine schlaue Art

Jochen

irgendwie, wenn man jetzt migrieren wollte

Jochen

von Modulit auf Microsoft, wäre halt,

Jochen

man fängt halt klein mit kleineren Teilen an

Jochen

und macht das da und man macht nicht alles auf einmal.

Jochen

Weil das wird wahrscheinlich nicht gut

Jochen

funktionieren.

Dominik

Warum im Haupt? Also ich verstehe es immer noch nicht.

Dominik

Also irgendwie denke ich immer noch so, ja,

Dominik

warum hält man das dann nicht an einer Stelle fest

Dominik

und sorgt dann dafür, dass die Devs alle dann an eine Stelle kommen,

Dominik

dass sie sich alle gut verstehen,

Dominik

dass sie alle dieselbe Tech-Sec benutzen,

Dominik

dass sie die Infrastruktur standardisiert benutzen,

Dominik

dass sie nur die standardisierte Infrastruktur benutzen, keine andere.

Dominik

Und dass halt dieses ganze Distributed-Quatsch, Entschuldigung,

Dominik

dass alles weg ist.

Dominik

Ich kann ja von mir verschiedene Rechenzentren

Dominik

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

Dominik

von mir aus schwieriger,

Dominik

so ein bisschen zu managen, weil ich habe halt

Dominik

das Problem, wie Jochen gerade sagte, dass

Dominik

hochspezialisierte, hochgutbezahlte

Dominik

Spezialkräfte sich teilweise um trivialen

Dominik

Tries kümmern müssen, bis die Sachen

Dominik

halt mal integriert sind.

Dominik

Aber dafür könnte man ja einen Service schreiben,

Dominik

also keinen Microservice, sondern

Dominik

einen, der halt in den Monolithen drin hängt.

Dominik

Ja.

Dominik

Also ich, ganz grundsätzlich,

Janis

ich habe so ein bisschen das Gefühl, du bist so ein bisschen

Janis

biased.

Janis

Das ist mir eine spontane Meinung.

Janis

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 überall zu finden für alles.

Janis

Wenn du eine große Firma bist, dann hast du vielleicht irgendwie einen Java-Entwickler,

Janis

der ist Querensteiger in Python oder C-Sharp in C++, was weiß ich.

Janis

Sowas gibt es.

Janis

Und dann verlangst du halt von dem einen Entwickler, dass er seinen Stack zum Beispiel umstellt.

Janis

Das willst du ja auch nicht unbedingt.

Janis

Also du hast halt grundsätzlich erstmal verschiedene Kompetenzen, dann ist die Frage, brauche ich diesen einen globalen Tech-Stack überhaupt, will ich den überhaupt haben, bringt er mir überhaupt was.

Dominik

Ich sag mal so, also es gibt halt so wenig gute Leute, dass man wahrscheinlich schon Tech-Stack multiplexen muss, damit man überhaupt genug Leute findet.

Janis

Ah, siehste, also Microservice, nein.

Janis

Aber grundsätzlich musst du dir ja auch die Frage stellen erstmal.

Janis

mal vielleicht, um von dieser Ebene

Janis

mal ein bisschen zurück zum Code zu kommen.

Janis

Ein Monolith, der hat natürlich eine riesen

Janis

Code-Basis, die unter Umständen relativ komplex ist.

Janis

Das heißt, du musst viel Aufwand in den

Janis

Deployment-Prozess an sich stecken.

Janis

Also bist du ein einzelnes

Janis

Feature, ein neues Feature deployst oder ein Bug

Janis

fixt, musst du dich mit relativ vielen Leuten, wie der

Janis

Jochen schon gesagt hat, abgesprochen haben. Du bist insgesamt

Janis

ein bisschen langsamer und vor allem

Janis

auch fehleranfälliger insgesamt.

Dominik

Wenn irgendein Integration-Test irgendwie fehl geht

Dominik

und der irgendwie den Produktionen durchrutscht, dann ist

Dominik

im Zweifel raussteigend ganz das System ab und hat eine Daumentime.

Janis

Genau, der Monolith ist so ein klassisches Beispiel für Single Point of Failure, auch das kannst du irgendwie umgehen, du hast ein Backup-System, du hast das parallelisiert, was weiß ich, also du kannst die Chance minimalisieren, dass du genau an solche Punkte läufst, mit Rollback, mit AB-Tests und so weiter, also du hast eine Möglichkeit, aber auch das musst du dir halt erstmal aufbauen.

Janis

Das heißt, du musst dir mit der Zeit erstmal aufbauen, mit dieser Komplexität umzugehen und am Ende stellt sich die Frage, wie gut gehst du eigentlich gerade mit der Komplexität um und kann das mein Team zum Beispiel sehr, sehr gut? Und bin ich mit der Geschwindigkeit so zufrieden, weil ich habe die Erfahrung gemacht, dass sich bei einem Monolithen irgendwann viele Entwickler darüber beschweren, dass das Deployment zu langsam ist insgesamt, dass die Features teilweise zu lang rumliegen, weil zu viele Leute…

Dominik

Acht, neun Stunden dauern, dann denken die natürlich so, hm, wenn ich so zwei, drei am Tag rausschrauben will, dann ist das schon ein bisschen doof.

Janis

Ja, nicht nur, wir reden ja nicht über Stunden, wir reden teilweise über Tagen, Wochen. Also das ist schon nicht so einfach. Und dann kippt auf einmal was um. Du musst das irgendwie organisieren, dass du einzelne Sachen deployst. Und dann ist es natürlich schon cooler, wenn du einen einzelnen Microservice hast. Und wenn der mal umkippt, dann ist es nicht so schlimm für die Gesamtanwendung. 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. Du musst es natürlich auch erstmal gut machen. Aber du kannst gewisse bürokratische Randeffekte dadurch durchaus vermeiden erstmal. Also das wäre zum Beispiel ein Grund zu sagen, ich will das jetzt aufsplitten.

Janis

Ein anderer Grund ist, dass wir reden über große Code-Basen. Also das muss man halt immer erwähnen. Wir reden über große Teams. Und niemand kennt den ganzen Code. Also was bringt dir ein einheitlicher Text-Deck, wenn du dich eh nicht mit Sachen in den Core-Geschichten auseinandergesetzt hast?

Janis

Weil du, meinetwegen, weiß ich nicht, im krassesten Beispiel, du bist Frontend-Entwickler in einer Django-Anwendung und du nutzt jetzt kein Vue.js oder sowas, sondern du schreibst irgendwie dein Frontend-Code in die Django-Anwendung rein als JavaScript-Entwickler, hast du auch nichts mit Python am Hut.

Janis

Da macht es schon Sinn, dass du sagst, okay gut, ich baue jetzt mein eigenes Frontend irgendwo anders. Ist jetzt nicht wirklich ein Microservice, aber das verhandelt natürlich das Problem so ein bisschen, dass dieser Entwickler nicht den ganzen Stack kennt und auch überhaupt nicht kennen muss.

Dominik

Ich freu mich halt, ob das

Dominik

einen Unterschied macht.

Dominik

Also ist ja egal, ob jetzt jemand an seinem Feature-Branch

Dominik

irgendwie eine App baut.

Dominik

Süßer, wenn es keinen Unterschied macht,

Dominik

ist es doch doppelt egal.

Dominik

Nein, aber das ist ja dann

Dominik

trotzdem im Monolithen.

Janis

Ja gut, aber mindestens

Janis

habe ich Komplexität raus.

Janis

Sowohl im Code, Microservices ist ein kleinerer Code,

Janis

der ist ein bisschen leichter zu lesen, du kannst dich ein bisschen schneller einarbeiten,

Janis

weil du nicht vor einer Wand aus Code stehst.

Janis

Du stehst von der Wand aus Guidelines und Jira-Pages und was weiß ich.

Janis

Der gute Jira.

Janis

Genau, aber du steigst nicht irgendwie komponententief in den Code rein, musst du auch gar nicht.

Janis

Du kommst gar nicht erst in die Versuchung.

Janis

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

Janis

So durch Microsoft und vielleicht auch durch Deployment-Ebene.

Janis

Und du hast das Risiko erstmal minimiert, dass du es verhaust.

Janis

Und du behinderst niemand anderen damit.

Janis

Also du deployst halt in einem Monolithen immer nacheinander,

Janis

wenn du verschiedene Teams hast.

Janis

Dann deployst du erst Team A, Team B.

Janis

Dann musst du die Reihenfolge festlegen.

Janis

Auch das hast du in Microservices,

Janis

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.

Dominik

In meinem Kopf, da ploppt gerade wieder aus,

Dominik

wenn ich das dann warten möchte und wenn ich das ausbauen möchte,

Dominik

wenn das Team weg ist, was diese Microservices entwickelt hat,

Dominik

dann muss ich ja wieder Experten suchen,

Dominik

sich dann mit dem anderen Tech-Stack auskennen,

Dominik

den ich jetzt gar nicht kenne.

Dominik

Vielleicht ja nicht.

Janis

der Microservice an sich, der soll relativ schnell

Janis

entwickelt sein. Ich meine, das ist jetzt auch wieder

Janis

Theorie, aber rein theoretisch soll auch

Janis

ein Microservice austauschbar sein.

Janis

Ja, okay. Das heißt,

Dominik

das ist ein Wegwerfding. Das heißt, wenn es nicht mehr läuft,

Dominik

dann würde ich halt jemand aus einem anderen TechSec den gleichen

Dominik

Microservice neu bauen irgendwie und das dann günstiger

Dominik

hat, den anderen neu zu warten.

Dominik

Ja, okay.

Jochen

Ja, könntest du natürlich machen.

Jochen

Aber ja, ich meine, ja, ehrlich gesagt,

Jochen

ich bin da, also ich meine, ich würde schon

Jochen

sagen, natürlich, das ist klar, dass Situationen

Jochen

in den Microservices halt voll gut sind.

Jochen

würde ich jetzt gar nicht bestreiten

Jochen

wollen, aber auch, also

Jochen

würde man damit anfangen wollen, wenn man jetzt

Jochen

noch nichts gebaut hat, da wäre ich auch eher

Jochen

skeptisch, glaube ich, aber

Jochen

also genau, also ich meine, das ist halt hier die

Jochen

Frage, gibt es irgendwie einen Grund, warum man das machen

Jochen

sollte, der

Jochen

was ich dann, was der

Jochen

der Autor von dem Buch da meinte, ist

Jochen

naja, eigentlich eher so, Microsoft

Jochen

das macht man halt dann, wenn sonst nichts mehr

Jochen

funktioniert, also wenn halt sozusagen

Jochen

wenn alle anderen Ansätze halt nicht

Jochen

funktionieren, dann muss man halt

Jochen

irgendwie, ne, aber

Jochen

ja, also

Jochen

und der sagt halt, der Hauptgrund,

Jochen

der wichtigste Grund, der tatsächlich irgendwie valide

Jochen

ist, ist halt, dass man Teile der Organisation

Jochen

halt unabhängig machen will vom Rest

Jochen

eben dadurch, dass sie halt selber

Jochen

deployen können und

Jochen

genau, wenn das halt anders

Jochen

nicht geht, dann muss man das halt so machen.

Jochen

Aber, und ja, das kann halt

Jochen

natürlich sein, wenn du halt einen großen Monolithen hast, den du schlecht

Jochen

deployen kannst und dann halt einzelne Teams halt

Jochen

sagen so, wir würden gerne, aber wir kommen, es wird nicht

Jochen

live, das, was wir machen, dann

Jochen

geht es halt vielleicht nicht anders.

Janis

Wir können vielleicht auch sogar

Janis

in Richtung Use Cases gehen. Ich meine, wir hatten

Janis

ja schon Beispiele, Bestellservice meinetwegen oder

Janis

IoT wäre auch noch so ein Bereich, wo es

Janis

prinzipiell durchaus auch

Janis

natürlich wirken kann, Microservices zu etablieren.

Janis

Ich meine, nehmen wir jetzt mal an,

Janis

wir haben einen sehr, sehr großen Datendurchsatz. Also wir

Janis

haben irgendwo eine Nutzerplattform, da machen Nutzer irgendwelche

Janis

Sachen und parallel davon kommen meinetwegen

Janis

aus dem IoT-Bereich irgendwelche

Janis

Temperaturdaten von Heizung rein

Janis

oder Geodaten vom Auto, was weiß

Janis

ich. Also du schreibst ja viele

Janis

Daten, dann willst du natürlich

Janis

dafür sorgen, dass dieser Schreibprozess,

Janis

der die ganze Zeit irgendwo hinschreibt,

Janis

von deinem

Janis

User-Dashboard irgendwie entkoppelt ist.

Janis

Du hast ja keinen Bock, dass die Datenbank dadurch

Janis

langsamer wird. Unter Umständen ist die

Janis

Datenbank da auch gar nicht die Richtige für, um diese Art

Janis

von Daten da reinzuschreiben. Das heißt,

Janis

wir haben auf einmal mit diesem Beispiel einen Kontext

Janis

geschaffen, wo wir sagen müssen, okay, wir

Janis

haben zwei komplett unterschiedliche Anforderungen

Janis

geschaffen. Wir haben einmal irgendein Dashboard,

Janis

das ist so klassisch HTML,

Janis

kannst eine SQL-Datenbank hinterhängen,

Janis

ist alles toll. Und wir haben auf einmal

Janis

irgendwie, meinetwegen IoT-Daten,

Janis

Geodaten, irgendwas, die in

Janis

hoher Frequenz geschrieben werden.

Janis

Da müssen wir uns überlegen, gut, wie verwalten wir den ganzen

Janis

Spaß eigentlich? Eignet sich da für meine...

Dominik

Aber ich habe es jetzt nicht genau verstanden.

Dominik

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

Dominik

du sagst nicht beispielsweise, du hast eine SQL-Datenbank,

Dominik

da kommen die Sachen von der IoT-Sache

Dominik

einfach rein und der User liest halt aus der...

Janis

Ja, ich fülle das

Janis

erstmal weiter aus noch. Also ich kann überlegen,

Janis

schreibe ich das jetzt gleichzeitig damit rein.

Janis

Aber irgendwann stelle ich halt fest, okay,

Janis

zu Lastzeiten wird auf einmal meine

Janis

Internetseite langsamer, weil ich auf einmal

Janis

zu viele Daten schreibe von diesem IoT-Prozess.

Janis

Und die User, die kriegen

Janis

eine schlechte Nutzererfahrung dadurch.

Janis

Also die Schreiblast,

Janis

die steigt, dadurch wird die Internetseite

Janis

unter Umständen langsamer, weil ich

Janis

alles ineinander verwurschtelt habe. Und da muss ich

Janis

überlegen, gut, wie gehe ich jetzt damit um?

Janis

Also

Dominik

normalerweise sollte

Dominik

das gar nicht so viel langsamer werden, oder?

Dominik

Weil du kannst ja eigentlich...

Jochen

wenn du schreibst, klar.

Jochen

Aber gut, oder ich meine...

Dominik

Also zum Beispiel Postgres lockt jetzt dann nur

Dominik

die Zeile, wenn du schreibst. Und wenn du jetzt ein neues

Dominik

IoT hast, dann hat der eine neue Zeile drauf. Das heißt,

Dominik

der Nutzer, der kann ja alle anderen Zeilen zum Beispiel lesen.

Dominik

Ja,

Dominik

also ich meine, das kann

Jochen

natürlich schon passieren. Das kann natürlich schon passieren, dass

Jochen

Schreibtlast irgendwann irgendwie

Jochen

dein System langsam macht.

Jochen

Aber meine Frage wäre halt ja, wie häufig kommt

Jochen

das denn vor, dass man so skalierbar...

Jochen

Also ich würde sagen, ja, es gibt einen validen Grund,

Jochen

Microservices aus Skalierbarkeitsgründen

Jochen

einzusetzen, aber wie häufig kommt denn das vor?

Dominik

Es kommt vor.

Dominik

Was wäre denn jetzt die Lösung davon?

Dominik

Dann habe ich Sachen, die IoT schreibt in eine Datenbank

Dominik

rein und dann habe ich ja

Dominik

den Flaschenhals bei dem Prozess,

Dominik

der von der einen Datenbank in die andere Datenbank

Dominik

das übertragen muss. Dann ist ja der Stand

Dominik

alt beispielsweise, weil die Verbindung...

Janis

Ja, die Frage ist, ob wir das überhaupt

Janis

übertragen müssen. Also

Janis

Microservices.

Janis

Als erstes stelle ich fest, okay,

Janis

das passt jetzt nicht irgendwie in die SQL-Datenbank.

Janis

Die wächst mir zu schnell. Das sind

Janis

Zeitreihen zum Beispiel

Janis

und dann schreibe ich das in eine Datenbank,

Janis

die extra dafür vorgesehen ist.

Janis

Prometheus ist auch eine,

Janis

aber die ist eher so für Metrikdaten.

Janis

Dann schreibe ich das da rein, dann überlege ich gut,

Janis

wie ziehe ich mir die jetzt in dieses monolithische Ding,

Janis

aber es macht für mich erstmal überhaupt keinen Sinn,

Janis

diese Art von Daten in die SQL-Datenbank vielleicht zu schreiben.

Janis

Das heißt, ich habe diesen Prozess mal getrennt

Janis

und auf einmal habe ich

Janis

Möglichkeiten.

Janis

Auf einmal habe ich es geschafft,

Janis

diesen Prozess zu trennen und jetzt kann ich überlegen, gut,

Janis

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,

Janis

ich habe jetzt eingesehen, okay, ich habe einen getrennten Schreibprozess von diesem Dashboard-Prozess.

Janis

Jetzt kann ich anfangen, den Schreibprozess zu optimieren und meinetwegen,

Janis

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

Janis

Also von diesem Ticketsystem kann ich mir dann meinetwegen 10 Minuten verzögert Nachrichten rausziehen

Janis

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

Wo er generell hochskalieren muss.

Janis

Ja, aber gut,

Jochen

da wäre halt die Frage, was ist

Jochen

ja, also ja, ist alles

Jochen

valide,

Jochen

aber was ist teurer, irgendwie

Jochen

die Architektur aufzuteilen

Jochen

oder irgendwie einen von dickeren Server zu kaufen?

Jochen

Ja, aber auch

Janis

da gibt es so sehr, sehr schöne Graphen,

Janis

das ist natürlich

Janis

ein Monolith ist sehr, sehr lange

Janis

günstiger als Microsoft, das stimmt, aber

Janis

irgendwann, irgendwann kann man

Janis

zu diesem Punkt kommen, wo es

Janis

überproportional teurer wird,

Janis

sich größere Hardware zu kaufen.

Janis

Also erstmal steigt das irgendwie sehr, sehr

Janis

geradlinig.

Janis

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

Janis

Erstmal steigt das

Janis

relativ geradlinig, also irgendwie

Janis

F von X gleich X, kann man sich sehr schön vorstellen.

Janis

Und hinten raus wird es dann auf einmal

Janis

exponentiell.

Janis

Dann explodieren die die Kosten, weil

Janis

die Maschinen dann einfach wirklich

Janis

sehr, sehr

Janis

teuer sein. Also ich finde,

Dominik

das Problem, was du gerade gesprochen hast, müsste man eigentlich noch mal

Dominik

mit Leuten, die noch ein bisschen mehr Spezialwissen

Dominik

in Datenbank haben, sprechen, weil

Dominik

für mich hört sich das nicht so an, als wäre da der Flaschenhals

Dominik

an der richtigen Stelle.

Jochen

Deswegen würde ich sagen, 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

Jochen

aufgibst, ist natürlich die Konsistenz.

Jochen

Ja, das stimmt halt

Dominik

einfach nicht mehr. Und ich habe halt dazwischen noch so ein extra Layer,

Dominik

wenn ich jetzt einen Kafka dazwischen mache. Warum?

Dominik

Also wenn ich jetzt eigentlich direkt aus der Datenbank lesen könnte

Dominik

und die Frage, du sagst halt, die Datenbank wird langsam, das verstehe ich nicht

Dominik

genau, weil

Dominik

wie viele Verbindungen hat die denn dann offen?

Jochen

Nein, aber einfach die Schreib...

Jochen

Zum Beispiel, du

Jochen

hast ja nur eine bestimmte Bandbreite zu deinen

Jochen

Platten, wenn du es wirklich schreiben musst.

Dominik

Wie du denn, ganz ehrlich, die Postgres hängt

Dominik

im Bram.

Jochen

Nee, nee, nee, wenn du was schreibst,

Jochen

nein, nein, das ist ja...

Jochen

Nee, ja, nur beim Lesen,

Jochen

nicht beim Schreiben. Doch, beim Schreiben auch.

Dominik

Doch, das wird dann mit Vakuum

Dominik

reingeschrieben.

Jochen

Nee, also das ist, wenn

Jochen

die Transaktion fertig ist,

Jochen

dann hat Postgres F-Sync hinterher

Jochen

aufgerufen, dann ist das, dann hat die Platte

Jochen

gesagt, ich hab's weggeschrieben.

Jochen

Und das

Jochen

ist, das macht Postgres

Jochen

unfassbar viel langsamer als sowas wie Redis.

Jochen

Aber bei Redis ist halt auch, wenn du

Jochen

dann, wenn du das Ding ausmachst, dann ist

Jochen

die Daten sind halt weg. Bei Postgres

Jochen

nicht, da sind die Daten halt noch da. Das ist der große

Jochen

Unterschied. Ja, aber die Frage ist halt, was

Dominik

halt dann schreiben und so weiter, wann wird das halt überhaupt

Dominik

freigegeben? Also das ist ja egal.

Jochen

Wenn dir der Datenmarkt sagt, deine Transaktion ist durch, dann ist

Dominik

das wirklich in der Platte gelandet. Ja, aber das macht aber die Postgres nicht

Dominik

langsamer, sondern das ist halt nur so, dass das

Dominik

nur schreiben langsamer. Ja, aber das

Dominik

macht die langsamer. Ja, aber das macht schreiben langsamer, aber das heißt

Dominik

nicht, dass das Lesen langsamer wird.

Jochen

Ja doch, weil in der Zeit, wo du was schreibst,

Dominik

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

Jochen

werden. Also du kannst die Sachen nicht lesen, die noch nicht im Hauptschweiger

Jochen

sind, ja? Sagen wir so. Ja, genau. Also die, die noch nicht

Dominik

auf der Platte sind, die kannst du nicht lesen,

Dominik

aber das heißt ja nicht, dass du nicht die Sachen, die vorher drin

Dominik

sind, lesen kannst, weil die Transaktion von den Sachen, die noch nicht geschrieben

Dominik

wenn es noch nicht fertig ist. Das heißt, dass du den

Dominik

Stand der Schreibdachlichkeit, das heißt aber nicht, dass das Lesen

Dominik

langsamer wird.

Dominik

Ja, letztlich schon irgendwann.

Dominik

Nein, das ist ein eigener Prozess.

Dominik

Das ist völlig unabhängig davon.

Dominik

Also wenn irgendwann

Jochen

quasi, wenn du so viel schreibst, dass du

Jochen

nichts anderes mehr machen kannst als schreiben und dann

Jochen

die Bandbreite zu deinen Platten halt

Jochen

oder SSDs heute halt irgendwie

Jochen

ausgefüllt ist mit Schreibvorgängen,

Jochen

dann kannst du nicht mehr viel lesen.

Dominik

Nein, wieso? Also lesen lest du ja eh noch aus dem Speicher.

Dominik

Das ist ja egal.

Dominik

Das I.O. ist ja nur das CPU.

Jochen

Wenn dein Working-Set komplett im Hauptspeicher ist, ja.

Jochen

Ja, das ist sowieso immer im Hauptspeicher.

Dominik

Das ist immer im Hauptspeicher, das ist wirklich so.

Dominik

Und das Einzige, was halt da dein

Dominik

Konzept ist, ist dann die CPU-Kerne, die halt

Dominik

damit beschäftigt sind. Wie viele

Dominik

Prozesse du offen hast, also das heißt, wie viel Gleichzeit

Dominik

in der Verbindung, die auf deiner Datenbank stehen.

Jochen

Ja, also sagen wir mal so,

Jochen

in der Praxis, das, wo dir

Jochen

häufig das System platzt,

Jochen

ich sag mal so, also das ist ja so erfahrungswert aus der Praxis,

Jochen

das, wo du dann merkst, okay,

Jochen

ich hab hier ein Problem, wo ich irgendwie

Jochen

mit der Architektur anfangen musst, was zu machen,

Jochen

ist, dass irgendwann

Jochen

deine Slaves mit der Schreiblast

Jochen

nicht mehr klarkommen. Also deine Replikas.

Jochen

Wenn du das nicht mehr

Jochen

hinkriegst, wenn dein Replikations-Lag

Jochen

immer größer wird, weil du das nicht mehr

Jochen

weggeschrieben bekommst, was du an Schreiblast hast.

Jochen

An dem Moment hast du ein Problem

Jochen

mit deiner Architektur. Da musst du das sowieso

Jochen

aufbrechen, ob du dann Microservice machst oder

Jochen

also sozusagen vertikal auftrennst oder

Jochen

ob du es horizontal auftrennst, indem du dann

Jochen

halt sozusagen das schadest

Jochen

nach irgendeinem Hash oder so, wo du dann halt

Jochen

mehrere Master hast, in die du schreibst.

Jochen

Ja, Master Slave, ja. Genau, das

Jochen

kannst du dir dann überlegen, ist beides schrecklich

Jochen

und macht dein ganzes Datenbankmodell

Jochen

im Grunde kaputt und inkonsistent, ja.

Jochen

Also das, aber das kannst du dir dann nicht mehr aussuchen.

Dominik

Ja, aber du machst das Slave-System mit so einer Postgres,

Dominik

dann hast du dann, wo die darin reinschreiben und dann

Dominik

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.

Jochen

Noch mehr Slaves?

Jochen

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

Jochen

Dann ist es einfach vorbei.

Jochen

an der Stelle, also ich meine, das ist

Jochen

heutzutage, also wer kommt an diese Punkte? Also das ist halt

Jochen

ja, das ist nicht so häufig,

Jochen

denke ich, aber das kann schon

Jochen

passieren und dann musst du schaden.

Dominik

Also wenn man den Rest dann vorher

Dominik

richtig gemacht hat, die Frage wäre halt, wenn du das sowieso

Dominik

nicht schnell genug wegschreiben kannst, dann musst

Dominik

du ja eh warten irgendwo.

Janis

Ja, und da hilft dann noch Kafka. Da hast du die

Janis

Nachrichten schön in einem Topic und holst die später

Janis

nochmal ab. Die Frage ist natürlich, wie langsam

Janis

sie da drin bleiben, aber da brauchst du halt

Janis

genug Worker. Also diesen Prozess, den müsstest du dann

Janis

gewährleisten können, aber auch da hast du Möglichkeiten.

Janis

Dann kannst du sagen, irgendwie bis zu so und so viel Speicher soll vorgehalten werden oder so und so lange und dann kannst du die erst wegschmeißen und du musst auch überlegen, brauche ich alles, brauche ich alles, alles oder.

Janis

Du hast halt eine Latenz dann, ne?

Janis

Ja, nicht nur Latenz, also vielleicht hast du auch einen Datenverlust unter Umständen, aber die Frage ist, kann ich vielleicht Daten verlieren? 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, aber das Problem ist in dem Zeitpunkt schlimm, 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 das Replikations-Lag, wie Jochen sehr schön gesagt hat, das wächst und wächst und dann stoppst du halt eine gewisse Zeit lang mal den Schreibprozess und hast dann meinetwegen ein Consumer-Lag im Kafka, aber das kannst du ja irgendwie so zurechtschrauben, dass es funktioniert, dass es deine Architektur verkraftet.

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. Aber das ist ein Problem, welches man bekämpfen kann.

Dominik

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

Dominik

Keine Ahnung, das muss man schon ganz genau sagen.

Janis

Kommt drauf an, wie du das machst und wie in paar Firmen du am Ende auch arbeitest.

Jochen

Ja, aber letztendlich, also diese Art von Problemen hast du natürlich immer, also Chris Künthopp, der hat das mal irgendwie so schön genannt, es gibt ja im Grunde zwei unterschiedliche Arten von Datenbanken, es gibt halt die OLTP, Online Transaction Processing Datenbanken, das sind halt so die, wenn du jetzt auf einen Kaufen-Button klickst, die dann halt die Kauftransaktionen machen und es gibt halt OLAP, also Online Analytical Processing, das ist halt so dein Data Warehouse irgendwie und er sagte das mal sehr schön,

Jochen

jetzt die Leute irgendwas machen und du schreibst halt

Jochen

Sachen, also OLTP ist zum Schreiben gedacht

Jochen

und OLAP eher zum Lesen.

Jochen

So, wenn die jetzt irgendwie die ganze

Jochen

Zeit irgendwie diese Geschichten generieren,

Jochen

dann, also im Grunde, jede OLTP-Datenbank

Jochen

hat in sich so ein

Jochen

Data-Warehouse, das raus möchte.

Jochen

Irgendwie von einer gewissen Zeit.

Jochen

Das fand ich gerade ein sehr schönes Bild. Ja, das ist halt so.

Jochen

Irgendwann willst du das halt vielleicht da raustrennen.

Jochen

Ja.

Jochen

Aber spannend.

Dominik

Also, dass es dann doch wieder um Datenbank

Dominik

ging am Ende, bei der Frage,

Dominik

ob man Microservices an der Stelle macht oder nicht.

Dominik

Nein, das weiß ich ja gerade gar nicht.

Dominik

Aber es kann doch sein, dass die Datenhaltung,

Dominik

da haben wir ja auch fast mit angefangen, dass das Datenmodell,

Dominik

die Datenhaltung dafür sehr relevant ist.

Janis

Das ist einfach ein Problem, aber das Schöne ist,

Janis

dass du quasi, und das ist vielleicht

Janis

eher der Knackpunkt, das Schöne ist, dass man erkannt hat,

Janis

okay, wir haben jetzt IoT-Daten, die ich vielleicht

Janis

anders behandeln möchte als meine Nutzerdaten,

Janis

die ich vielleicht anders ablegen möchte.

Janis

Und will ich das in einem Monolithen machen

Janis

oder erkenne ich, dass ich vielleicht dafür

Janis

auch einfach ein ganz, ganz anderes Know-how brauche?

Janis

ich habe jetzt meinetwegen eine SQL-Django-Anwendung,

Janis

erkenne aber, dass das kein SQL-Kontext

Janis

ist. Habe ich jetzt die Leute bei mir,

Janis

die sich mit dieser Art von Daten auskennen

Janis

oder brauche ich dafür vielleicht neue Daten?

Janis

Sorry, neue Leute.

Janis

Und kriege ich diese neuen Leute in das bestehende

Janis

Team rein oder baue ich dafür ein

Janis

separates Team mit einem separaten Service auf,

Janis

der da einfach parallel läuft, weil

Janis

es halt besser ist in diesem Moment

Janis

für das Problem, welches ich jetzt gerade versuche

Janis

zu lösen.

Janis

Ich meine, das ist jetzt

Janis

rückt. Sehr, sehr schöne

Janis

Wendung. Aber das ist jetzt wirklich so

Janis

ein Punkt, wo man sieht, okay, jetzt auf einmal

Janis

auf ganz natürliche Weise macht es auf einmal

Janis

Sinn, darüber nachzudenken.

Janis

Ja, das kann

Dominik

cost-efficient sein an der Stelle vielleicht.

Dominik

Das ist halt mehrere Trade-offs.

Dominik

Auch ein anderes Beispiel, nicht

Janis

unbedingt aus IoT, aber meinetwegen, du hast

Janis

eine Java-Anwendung und du

Janis

möchtest auf einmal eine Recommendation-Engine einbauen.

Janis

So, und dann erkennst du, okay,

Janis

das ist im Bereich Machine Learning,

Janis

Das ist in Python mehr

Janis

vertreten. Da hast du in Python eine größere Community.

Janis

Hast du vielleicht auch bessere Lösungen für.

Janis

Dann suchst du dir ein Python-Team aus,

Janis

welches dir dafür ein Model baut, welches dir dafür

Janis

eine API bereitstellt. Kriegst du das

Janis

jetzt unbedingt in deinen Java-Monolithen

Janis

rein oder stellst du deinen Service daneben?

Janis

Nimmst du den hoch

Janis

und versuchst du das vielleicht zu

Janis

integrieren. Das Problem, welches dann natürlich

Janis

aufkommt, wenn du von Monolithen kommst,

Janis

ist, dass du von einer

Janis

konsistenten Struktur unter Umständen in eine

Janis

inkonsistente reinläufst. Ja, du kannst vielleicht

Dominik

gar nicht warten. Du musst halt immer wieder auf das externe Team

Janis

zugreifen. Ja, es muss ja nicht mal ein externes Team sein.

Janis

Das kann ja auch ein neues internes Team sein.

Janis

Oder dann halt intern.

Janis

Klar, dieses Problem hast du dir

Janis

jetzt geschaffen. Das ist irgendwo ein selbst geschaffenes

Janis

Problem. Die Frage ist natürlich, komme ich da drum

Janis

herum? Wie ist der Trade-off? Also man hat

Janis

einfach effektiv immer einen Trade-off.

Janis

Die Frage ist immer, was ist das größere

Janis

Übel am Ende? Und

Janis

was bringt mich jetzt schneller vorwärts?

Janis

Ja, insofern, also

Jochen

würde ich auch so sagen, also ich denke auch,

Jochen

Es gibt gerade, also wenn man halt ganz viele Leute hat und das sehr groß wird, dann wird Microservices immer attraktiver irgendwie. Aber auf der anderen Seite, das ist halt irgendwie jetzt heutzutage oft irgendwie so, das macht man halt so und das ist halt jetzt so ein bisschen, da würde ich mir denken, na ich weiß nicht.

Jochen

Und da gibt es ja auch so einen schönen Begriff von David Hanemeyer-Hansen,

Jochen

den Rule-and-Rates-Menschen, der versuchte, den Monolith-Begriff aufzuwerten,

Jochen

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,

Jochen

dann ist halt das unter Umständen halt deutlich effizienter.

Jochen

auch einfach was bauen willst.

Jochen

Also das ist ja auch

Janis

sehr, sehr bekannt. Also wenn du

Janis

jetzt gerade anfängst, dann fängst du natürlich

Janis

nicht mit Microservices an. Also du ziehst

Janis

jetzt von null auf null ein Code hoch, hast

Janis

ein kleines Team, vielleicht sogar ein großes Team, das ist

Janis

komplett egal. Aber eigentlich

Janis

denkt man da erstmal monolithisch nach.

Janis

Einfach um vorwärts zu kommen, um wenig Komplexität

Janis

erstmal zu haben, weil die Komplexität, die kommt erst mit der Zeit.

Dominik

Dann bist du halt jedes Mal noch einen neuen Klotz ans Bein irgendwie.

Dominik

Oder auch noch weitere Komplexität und weitere

Dominik

Abhängigkeiten und Dependencies, wenn du

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 engem 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 Microservices. Man lagert einzelne Funktionalitäten aus, schaut, wie sie alleine dastehen und dann bekommst du auch wesentlich mehr Möglichkeiten. 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. Du musst es nicht immer unbedingt, aber das ist bei einer großen komplexen Struktur mit vielen verschiedenen States ein bisschen schwieriger und manchmal ist es leichter, wenn du dir dann einzelne Teile da rausnimmst und damit schon mal anfängst, die auszulagern und dann findest du vielleicht so ein Stückchen, wo es sich lohnen würde, das Teil zu parallelisieren.

Janis

Da würdest du dir vielleicht wünschen, okay, ich will meinen Server, jetzt will ich nicht mehr RAM geben. Eigentlich hätte ich lieber einen weiteren dazugebucht für diesen Service, weil es vielleicht günstiger ist, weil es vielleicht leichter zu machen ist. Dann ziehst du einfach parallel noch eine Node hoch. Das wünscht man sich ja auch manchmal. Und das ist zum Beispiel ein Microservice, ist einfach natürlicherweise leichter als ein Monolithen.

Janis

Ja, werden wir ein bisschen

Janis

positiver. Ist auch schön.

Janis

Ja,

Janis

nicht negativ, also es geht halt so ein bisschen

Dominik

darum, wann das der Fall ist, an welcher

Dominik

Use Case dann wirklich dafür

Jochen

sorgt. Also ich denke auch, wenn man das

Jochen

dazu bringen will, dass es

Jochen

also ein

Jochen

Ding, wie das helfen kann, wenn man jetzt

Jochen

drüber nachdenkt, denke ich,

Jochen

ist halt auch so, wenn man

Jochen

einen Microservice aufteilen will, dann ist

Jochen

das ja auch ein sehr schöner Anlass, irgendwie da nochmal

Jochen

drüber nachzudenken, wie sind denn eigentlich die Schnittstellen

Jochen

und so, wie würde man dann modularisieren

Jochen

wollen, also sozusagen

Jochen

eigentlich würde man dann anfangen

Jochen

und sagen, okay, machen wir es doch mal

Jochen

modular, also keine Ahnung, ich habe jetzt irgendwie

Jochen

einen Moduliten und

Jochen

der notifiziert irgendwie User

Jochen

für irgendwas und

Jochen

jetzt möchte ich das da raustrennen,

Jochen

weil irgendwie dieses ganze

Jochen

Handling von unterschiedlichen

Jochen

Wegen, wie ich User notifiziere,

Jochen

ist halt problematisch und

Jochen

ich würde das gerne da raustrennen.

Jochen

Dann wäre halt

Jochen

eine gute, die schlechte Strategie

Jochen

wäre halt irgendwie sozusagen

Jochen

irgendwie den Funktionen, also irgendwie

Jochen

einen JSON- oder HTTP-API irgendwie jetzt

Jochen

vor die Funktionen, die die Notifizierung macht,

Jochen

zu klemmen und das halt auf einen anderen

Jochen

irgendwo anders hinzulegen und dann rufen

Jochen

halt aus einem Monolithen die Sachen halt

Jochen

dann diese JSON-API auf oder so.

Jochen

Das ist leider halt das, was oft gemacht

Jochen

wird und das wird dann halt sehr schrecklich.

Jochen

Aber was man ja durchaus tun könnte, ist halt

Jochen

okay, man versucht das jetzt sauber

Jochen

zu machen, man macht halt irgendwie ein Interface, sagt okay,

Jochen

so sehen die Notifizierungen aus

Jochen

irgendwie und die haben wir

Jochen

das klassische Ding, was halt immer benutzt wird

Jochen

und jetzt machen wir einfach eine neue

Jochen

Implementation, die halt

Jochen

über einen Microservice geht

Jochen

und wir können

Jochen

das halt auch hinterher gucken,

Jochen

dann machen wir das Ganze hinterher in Feature-Flag oder so und sagen,

Jochen

okay, jetzt schicken wir mal 1% des Traffics halt irgendwie

Jochen

über den Microservice, dann gucken wir an, wie sehen

Jochen

die Fehler hinterher aus, sind die irgendwie

Jochen

mehr geworden oder hat das genau das gleiche getan,

Jochen

oder wir schicken es gar nicht raus,

Jochen

wir gucken einfach nur, wir schicken es

Jochen

an beide? Wie verhält sich das

Jochen

denn unter Last und so? Und dann kann man das schön

Jochen

denke ich, machen. Aber

Jochen

die Voraussetzung ist eigentlich, dass man das halt schon

Jochen

ordentlich modularisiert hat, dass man ordentlich Interfaces

Jochen

hat, dass man das irgendwie schon

Jochen

halbwegs gut strukturiert hat.

Jochen

Und ja, dann

Jochen

ja. Und das ist vielleicht auch so eine Möglichkeit

Jochen

dann an der Stelle nochmal irgendwie drüber nachzudenken,

Jochen

wie modularisiert man eigentlich

Jochen

ordentlich? Ja, auf jeden Fall.

Jochen

Ich meine, auch

Janis

um noch eine positive weitere Sache

Janis

aufzugreifen, die mir gerade in den Sinn kommt.

Janis

Und 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. Also die wird von verschiedenen Prozessen genutzt, manchmal transformiert, also die wird sehr, sehr oft durchgereicht.

Janis

Das fiel mir jetzt gerade ein, als er ja auch angesprochen hat. Wenn du das jetzt auf einmal anfängst in Microservices aufzuteilen, dann musst du dir natürlich überlegen, okay, wie gestalte ich jetzt den Weg vom Anfang bis zum Ende durch? 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 und im Prinzip wartet der Client darauf, dass der hinten angekommen ist.

Janis

So wird es halt sehr oft strukturiert 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,

Janis

sondern zum Beispiel auch über Queues und Topics

Janis

und dann schickst du da ein Event hin

Janis

und dann ist das so ein Write-Only-Ding.

Janis

Dann schicke ich diesen einen Datensatz an diesen Endpunkt,

Janis

der schreibt es Richtung Topic

Janis

und von diesem Topic kann das dann

Janis

von verschiedenen Microservices gleichzeitig konsumiert werden,

Janis

ohne dass ich jetzt irgendwie

Janis

ein Async bei mir im Code einbauen musste,

Janis

um das darzustellen.

Janis

Und der Nutzer, der kann sofort weitermachen.

Janis

Der muss nicht unbedingt auf die Antwort warten,

Janis

wenn das ein Write-Only-Prozess ist.

Janis

Auch ein Vorteil.

Janis

Oder auch sehr schön teilweise zu designen.

Jochen

Ja, wobei ich denken würde,

Jochen

also die Voraussetzung wäre, dass man das halt

Jochen

erstmal intern gemacht hat, dass man erstmal intern

Jochen

irgendwie so eine Art Service-Boost hat

Jochen

und

Jochen

dann kann man das halt auch vielleicht nach außen verlagern,

Jochen

aber ja, also ich meine,

Jochen

das ist halt auch sowas,

Jochen

ja,

Jochen

wo man dann vielleicht mal drüber nachdenken kann,

Jochen

wie strukturiert man die

Jochen

Applikationen eigentlich so, dass das halt irgendwie

Jochen

so funktioniert.

Jochen

Ja, weil, ja.

Janis

Es ist halt saukomplex, ne? Also das muss man halt

Janis

einfach sagen. Braucht man diesen

Dominik

Service-Bus oder diesen Message-Queue oder diesen Message-Booker

Dominik

dann halt. Und wenn man den halt hat, raucht man

Dominik

ihn, will man ihn.

Dominik

Also, weil das ist ja auch

Dominik

die Dependency, die musst du ja auch dann wieder

Janis

mitnehmen. Ja, klar. Ist das eine Dependency?

Janis

Du brauchst die Kompetenz, ne? Das ist halt immer so das Ding

Janis

mit der Komplexität. Aber

Janis

Aber der Service auf der anderen Seite, der ist vielleicht auch unter Umständen einfach austauschbarer. Du kannst ihn relativ problemfrei austauschen, ohne dass du den aktiven Anwendungen affektierst oder du kannst ihn leichter deployen, ohne dass der Service darauf warten muss, dass das Deployment abgeschlossen ist zum Beispiel. Also du hast weniger Downtime dadurch. Also klar, du brauchst ihn nicht. Du kannst auch weiterhin synchron denken.

Janis

Wenn wir jetzt nur 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.

Janis

Das verstehe ich nicht genau.

Dominik

Was meinst du mit mehr Möglichkeiten zu kommunizieren?

Janis

Ja, die Service-Bus

Janis

oder die Queues

Janis

beziehungsweise Topics und Queues

Janis

sind natürlich jetzt eine Möglichkeit mehr.

Janis

Die werden einer Anwendung

Dominik

Du kannst ja auch

Dominik

in die Anwendung einbauen.

Dominik

Ja, aber ist das immer so geil?

Jochen

Ja, also ich würde sagen, das ist halt so ein bisschen die Voraussetzung

Jochen

dafür, dass man das überhaupt dann auftrennen kann,

Jochen

weil, oder ich sag mal,

Jochen

ich kenne, ist halt die Frage,

Jochen

also ich kenne das halt so, dass man das intern in der Applikation

Jochen

vor allen Dingen macht, also dass man halt dann aufteilt

Jochen

die Dinge, die man tut, teilt man halt

Jochen

auch in Commands, Events

Jochen

und vielleicht Dokumente gibt es

Jochen

halt auch. Es gibt diese ganzen Enterprise-Service-Bus

Jochen

irgendwie, weiß ich nicht, irgendwas Patterns.

Jochen

Es ist halt die Frage, ob man das braucht. Keine Ahnung.

Jochen

Ich habe letztens mich da so ein bisschen

Jochen

mit beschäftigt, weil ich mich einfach mal interessiert habe,

Jochen

wie man denn sowas baut.

Jochen

Da gibt es ja auch, das Buch erwähne ich irgendwie auch in jeder

Jochen

Episode irgendwie. Oh, hier

Jochen

liegt es rum. Architecture Patterns with Python.

Jochen

Die bauen halt, die fangen halt

Jochen

an und mit irgendwie auch, das ist auch glaube ich

Jochen

ein Allokations,

Jochen

also das, womit die sich beschäftigen, ist halt sozusagen

Jochen

Bestellungen

Jochen

irgendwelchen Lagerbeständen zuordnen,

Jochen

sozusagen. Und die fangen halt an, naiv mit so einer

Jochen

Flask-Applikationen und bauen das dann halt immer weiter um,

Jochen

sodass dann am Schluss bleibt halt auch so

Jochen

ein Service-Bus übrig und

Jochen

das könnte man dann theoretisch auch in

Jochen

Microservices dann halt alles

Jochen

auslagern, was man da so tut.

Jochen

Aber das eigentlich, würde ich

Jochen

sagen, so ein bisschen die Voraussetzung dafür, dass man das überhaupt

Jochen

kann, ist, dass man es intern schon so macht.

Jochen

Also dass man halt intern schon,

Jochen

oder ich weiß es nicht genau, aber wenn man

Jochen

das jetzt von außen dran,

Jochen

aber nochmal zu dem,

Jochen

warum macht man das überhaupt mit diesen Queues und so,

Jochen

denke ich, der Vorteil ist halt einfach, wenn du

Jochen

wenn du HTTP oder JSON-RPs hast,

Jochen

dann machst du halt jedes Mal zum Beispiel so ein TLS-Handshake

Jochen

oder sowas. Das ist natürlich extrem

Jochen

verbraucht in einer CPU.

Jochen

Du kannst ja auch ein Socket aufhaben.

Jochen

Oder so.

Jochen

Wie bei HTTP?

Dominik

Nein, nein. Einfach kein HTTP,

Dominik

sondern du hast halt ein Socket auf irgendwo in der Verbindung.

Dominik

Ja, okay. Und wie sicherst du die

Jochen

irgendwie ab und welchen Standard?

Jochen

Wie machst du das? Keine Ahnung. Also wie WebSocket

Dominik

genau und drunter funktioniert. Aber der hat ja am Anfang

Dominik

beispielsweise auch seinen Handshake, aber der bleibt

Dominik

halt offen, der muss dann nicht jedes Mal den neuen Handshake machen, oder?

Jochen

Ja, bei HTTP geht das nicht.

Jochen

Bei HTTP

Jochen

gibt es immer nur Request-Response, das war auch so.

Dominik

Genau, ja, aber ich kann jetzt einen Token aufmachen, wenn ich jetzt

Dominik

auch so ein Queue-Ding habe, beispielsweise.

Dominik

Genau, das ist der Vorteil bei der Queue,

Jochen

da steht eine Verbindung und die bleibt halt und du kannst

Jochen

halt mehr Sachen drüber schicken, genau. Das ist halt der Riesenvorteil.

Dominik

Ja, genau, aber ich verstehe jetzt nicht, wo der Unterschied ist,

Dominik

also warum brauche ich dafür einen Microservice?

Dominik

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

Dominik

Nee, aber die Frage ist jetzt,

Jochen

wenn du jetzt Microservices hast,

Jochen

wie verbindest du die miteinander?

Jochen

Oder vielleicht habe ich die Frage einfach nicht verstanden.

Jochen

Ich dachte, das wäre die Frage, warum nimmt man denn da so

Jochen

einen Bus oder so eine Queue? Warum nimmt man nicht

Jochen

einfach HTC oder so?

Dominik

Die Frage wäre, also wenn ich jetzt so einen Bus nehme, also warum

Dominik

mache ich das bei Microsoft? Also warum mache ich das nicht trotzdem

Dominik

in meinem Monolithen oder so?

Jochen

Ja, genau, da würde ich anfangen.

Jochen

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

Jochen

dass man das intern benutzen kann.

Jochen

Also meine Meinung ist, es kann halt

Dominik

schon sein, dass man sowas braucht.

Dominik

Die Frage ist, ob man es

Dominik

in einem Monolithen will, ne?

Dominik

Warum nicht?

Janis

Also ich persönlich hatte jetzt noch nicht

Janis

das Anliegen oder das Verlangen, dass ich in einem

Janis

Monolithen mir sowas gewünscht hätte.

Janis

Weil die Wege dort dann natürlicherweise

Janis

kürzer sind.

Dominik

Na gut, also kannst du halt einfach jetzt

Dominik

theoretisch noch einen Container zu deinem Deployment

Dominik

spawnen, wo halt irgendwie so ein Kafka oder

Dominik

ein Redis oder irgendwas läuft.

Dominik

Nee, nee, das

Jochen

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

Jochen

Das ist einfach nur ein Funktionsaufruf. Da ist deine Queue einfach zum Beispiel

Jochen

in Python ist das halt einfach nur eine Queue-Modell.

Jochen

Ja, okay.

Jochen

vom Queue über Queue sozusagen oder so

Jochen

und dann machst du halt, solange irgendwas

Jochen

in der Queue drin ist, machst du halt irgendwie, rufst du Funktionen auf

Jochen

und das war's. Das ist auch nicht, ja.

Jochen

Kann man durchaus machen.

Janis

Habe ich jetzt zum ersten Mal von tatsächlich,

Janis

dass das so ein Python-Ding ist.

Janis

Ja, genau. Queue.

Jochen

Es hat aber nichts mit Netzwerkverbindungen oder so.

Jochen

Nein, nein, nein, genau.

Janis

Ist das dann einfach irgendwie so ein State, der existiert

Janis

global und...

Janis

Ja, genau.

Janis

Cool.

Jochen

Man kann diese Muster ja durchaus auch einfach so...

Jochen

Deswegen meine ich, wie man die Struktur aufteilt

Jochen

und die Architektur von einem Ding baut,

Jochen

das kann man ja auch schon vorher richtig machen quasi.

Jochen

Und dann kann man es halt auch aufteilen.

Jochen

Oder es ist sehr einfach, das aufzuteilen.

Jochen

Während wenn man jetzt einen Monolithen hat,

Jochen

und das ist tatsächlich, ich fürchte,

Jochen

das ist halt das, was ich in der Praxis oft sehe.

Jochen

Dass Leute halt eigentlich in so einer Situation sind,

Jochen

sie haben einen Big Ball of Mud,

Jochen

der halt irgendwie kompliziert und komisch ist

Jochen

und wo sie nicht weiterkommen.

Jochen

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

Jochen

Und dann kommen sie auf Microsoft

Jochen

und dann stürzen sie auf Microsoft und sagen so,

Jochen

das ist die Lösung für mein Problem.

Jochen

Ich hänge weiter vorne.

Janis

Ich will wissen, was passiert denn mit dieser

Janis

Queue, wenn der Service eine Downtime hat?

Janis

Nein, das ist einfach nur ein Prozess.

Janis

Das ist einfach ein Prozess. Also die anderen, die

Janis

funktionieren irgendwie weiter, da ist dann irgendwie, weiß ich nicht,

Janis

läuft in einem separaten Thread, in einem gleichen.

Jochen

Ja, alles in einem Thread, im gleichen Prozess.

Jochen

Das einzige, was das halt sozusagen bringt, ist,

Jochen

ich die Sachen halt sauber voneinander getrennt habe.

Jochen

Ich mache halt auch irgendwie, ich mache halt immer, wenn ich

Jochen

irgendwas schreiben möchte, mache ich halt

Jochen

einen Command und ich habe halt dann meine

Jochen

Event-Händler, die alles mögliche machen.

Jochen

Zum Beispiel habe ich halt einen Event-Händler, der schickt

Jochen

das Event dann auf den Web-Socket raus für

Jochen

irgendeinen Client, einen anderen Event-Händler,

Jochen

der tritt irgendwie

Jochen

einen Prozess los, ein anderer, so.

Jochen

Und das kann ich ja, aber das ist alles

Jochen

nur Funktionsaufrufe, die nacheinander passieren.

Jochen

Das ist aber alles im gleichen Prozess.

Janis

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

Janis

ergibt sich ja dann so die Möglichkeit, dass wir alle

Janis

erkennen, okay, wir brauchen unbedingt Kafka.

Janis

Yay!

Janis

Nein, aber nur

Janis

damit ich das verstehe, nehmen wir jetzt mal an,

Janis

wir sind jetzt in der Django-Anwendung unterwegs

Janis

und wir schicken ein Request rein

Janis

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

Janis

er darauf, dass der Prozess von der Queue komplett

Janis

verarbeitet wurde?

Jochen

Der bekommt sofort, also da ist es so,

Jochen

der bekommt sofort eine Antwort zurück

Jochen

und sozusagen

Jochen

die Event-Händler bearbeiten das dann halt

Jochen

später weiter. Okay, die bearbeiten das später

Janis

weiter, das heißt, wenn jetzt der nächste User kurz

Janis

danach, bevor das alles abgearbeitet wurde,

Janis

wieder ein Request reinsteckt.

Jochen

Was man schon zurückbekommt, ist, dass das

Jochen

Command durchgegangen ist.

Jochen

Also sozusagen man wartet bis, also

Jochen

ein Request kommt rein

Jochen

und dann erzeugt man ein Command,

Jochen

sagt irgendwie Handle Command

Jochen

oder Handle Service Bus

Jochen

Handle und

Jochen

zurückgekommen ist, kann man sicher sein, die Transaktion

Jochen

ist durch, aber dann sind noch nicht alle

Janis

Events bearbeitet worden. Okay, dann sind noch nicht alle Events

Jochen

bearbeitet worden. Und dann schickt man einen User zurück,

Jochen

okay, das ist jetzt durchgegangen. Okay, und jetzt kommt der nächste

Janis

User an, bevor alle Events abgearbeitet wurden.

Janis

Und der kann dann unbekümmert

Janis

das auch reinschicken, weil die Events

Janis

im Hintergrund noch parallel abgearbeitet werden.

Janis

Okay, das heißt, das geht.

Janis

Und was passiert, wenn der Service

Janis

jetzt crasht, bevor alle Events abgearbeitet

Janis

wurden? Wenn das ganze Ding

Janis

crasht, dann ist es vorbei.

Janis

Das ist einfach ein Prozess.

Janis

Dann ist es weg, ja. Das heißt, wir haben jetzt nicht irgendwie, okay. Ja gut, aber wir brauchen irgendwas. Also wenn ich mich jetzt dafür entscheiden würde, dass es unglaublich wichtig ist, weil dieser Prozess vielleicht eine Minute dauert, weil da irgendwie verschiedene Stages durchläuft. Es gibt Gründe. Keine Ahnung, du hast eine unglaublich langsame API irgendwo dranhängen. Die braucht einfach ewig lang zum Antworten, aber der Nutzer, 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,

Janis

jetzt stürzt der Service ab, aber eigentlich will ich

Janis

unbedingt diese Antwort haben, weil das meinetwegen

Janis

eine Transaktion ist und der Nutzer gerade was gekauft hat.

Dominik

Du kannst das ja in der Datenbank kurz wegschreiben

Dominik

oder so. Du kannst ja sagen,

Dominik

du schreibst es direkt weg in die Datenbank,

Dominik

gibst der Nutzer die Antwort und hängst es dann in die Queue

Dominik

und dass der aus der Datenbank das dann nimmt.

Dominik

Und wenn das dann abstürzt, der Prozessquestion,

Dominik

hast du ja in der Datenbank noch die Sachen stehen.

Dominik

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

Dominik

Ja, aber es ist halt irgendwie

Dominik

hacky gefühlt.

Dominik

Also

Janis

ich weiß nicht, ob man damit wirklich das Problem

Janis

löst, aber erstmal wird es

Janis

dann so sein, dass der Prozess weg ist

Janis

und dass man

Janis

dort, wenn man diesen

Janis

Wenn du es weggeschrieben hast, dann hast

Dominik

du zwar noch nicht die Queue durch, aber du hast halt

Dominik

den Daten, dass der gekommen ist. Aber das macht natürlich

Janis

den Prozess dann minimal

Janis

langsamer, weil ich erst was in die Datenbank schreiben

Janis

muss. Da hast du auch nicht lang. Ja, aber vielleicht doch

Janis

zu lang. Na, glaube ich.

Dominik

Also wenn du irgendwie lange, Sekundenweite...

Janis

Ich habe gerade 30 Millionen Nutzer, die da draufschreiben

Janis

und dann... Ja gut, aber

Dominik

das soll da nicht so lange dauern.

Janis

Aber wie gesagt, ich

Janis

fühle mich dabei dann so ein bisschen

Janis

unwohl, dass ich das innerhalb dieses Python-Prozesses

Janis

habe, weil ich eben

Janis

sicher gehen muss, dass

Janis

ich diese Information

Janis

nicht verliere, wenn ich sie denn nicht

Janis

verlieren muss. Und da hilft dann natürlich

Janis

irgendwie so ein...

Jochen

Also, ja,

Jochen

ich würde ja sagen,

Jochen

man kann das ja auch mal, aber ich meine,

Jochen

ja, also

Jochen

ja,

Jochen

Ich würde eher

Jochen

denken, also wie man das dann macht, ist letztlich

Jochen

eigentlich, ist ja dann keine Architekturfrage

Jochen

mehr, ob man dann auch wieder einen Kafka verwendet oder

Jochen

Revit und Q oder nochmal was anderes

Jochen

ist ja letztlich nicht einfach nur

Jochen

interessant gerade.

Janis

Wie gesagt, das war mir

Janis

jetzt neu. Ich meine, da tun sich viele

Janis

Fragen auf, die mit dem eigentlichen Thema nichts zu tun haben.

Janis

Also wie gehe ich mit Exception um?

Janis

Azure Service Bus hat zum Beispiel

Janis

Exception Dead Letter

Janis

Q.

Janis

Das muss ich mir natürlich relativ umständlich

Janis

dann da reinbauen.

Janis

Also ich brauche ein vergleichsweise umständlicheres

Janis

Fehlerhandling, wenn ich das dann auch irgendwie

Janis

über diese Queues abbauen möchte.

Janis

Das kann ich mir natürlich anders ein bisschen leichter machen.

Dominik

Dann brauchst du für jeden Microservice eigentlich so ein eigenes Fehlerhandling auch.

Janis

Ja, also wenn du

Janis

ja, oder ein Standard,

Janis

wie man es dann am Ende

Janis

sieht. Also klar, das bringt

Janis

einen dann wieder zurück zu den Microservices

Janis

und wieder zu einem generellen

Janis

Problem. Und das Fehlerhandling

Janis

entscheidet dann der Service selbst oder das Team

Janis

in dem Fall.

Janis

Beim Konsumenten meinte ich jetzt.

Dominik

Ja, wenn du eh die Dependency

Dominik

hast, dass du irgendwie einen hast, der das konsumieren

Dominik

will und dann halt Sachen macht. Gut, das viele

Dominik

Hände brauchst du so oder so, je nachdem, was da drinsteckt, aber

Dominik

du hast natürlich, meiner Meinung nach,

Dominik

wenn du Microservices hast, eine größere

Dominik

Anzahl an Fehlerquellen.

Jochen

Es wird halt viel komplizierter. Du musst dir halt

Jochen

über all diese Dinge Gedanken machen im einzelnen Prozess.

Jochen

Musst du das nicht. Du hast das alles egal.

Jochen

Machst du halt ganz normales Exception Handling

Jochen

und da brauchst du all diese Dinge nicht.

Dominik

Was passiert denn mit retry und gucken?

Dominik

Das ist auch da und bleibst du noch.

Dominik

War der nur kurz weg? War die Verbindung weg? War der Server weg?

Janis

Ja, aber ich meine, wenn sich darum jeder Service selbst kümmern muss,

Janis

dann ist es natürlich auch wieder nicht so kompliziert.

Janis

Also wenn ich immer nur auf meinen Punkt gucke

Janis

und ich schaue, welche Möglichkeiten gibt es.

Janis

Also im gesamten Prozess gibt es immer mehr Fehlerpunkte.

Dominik

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

Dominik

Ich beispielsweise.

Janis

Ja, das muss natürlich validiert werden.

Janis

Und wenn da was Falsches drinsteht,

Janis

dann weiß ich, dass irgendwas vorher falsch war.

Janis

Klar, diese Art von Debugging, die ist schon super schwer.

Janis

Weiß das, dass da was Falsches drinsteht?

Janis

Okay.

Janis

Also, weiß ich nicht.

Janis

Wenn wir jetzt zum Beispiel,

Janis

wir erwarten jetzt ein bestimmtes JSON in deiner Queue.

Janis

Und dieses JSON entspricht nicht dem richtigen Format,

Janis

dann weiß ich, dass da vorher irgendwas falsch war.

Dominik

Okay, dann kann es nicht passieren dürfen,

Dominik

dass das da reingeschrieben werden kann.

Janis

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

Janis

Es kann natürlich sein,

Janis

dass ein falscher Nutzer irgendwie in deinem Datensatz drinsteht

Janis

und dein Service kann das nicht überprüfen.

Janis

Aber da sind wir dann wieder bei der Herausforderung

Janis

des Datenmanagements.

Janis

Also wie gestalte ich das richtig? Wie gestalte ich das gut?

Janis

Wie kann ich solche Sachen vermeiden?

Janis

Wie synke ich vielleicht meine verschiedenen Datenbanken?

Janis

Aber das ist dann wieder so ein eigenes Problemchen.

Janis

Oder großes Problem.

Janis

Ja, aber das ist wie bei Dependencies.

Janis

Ja, wie sagt man so schön?

Janis

Irgendeinem Tod muss man sterben.

Janis

Also es ist halt leider so.

Janis

Aber die Frage ist halt,

Dominik

ich glaube, das hat halt so ein Overhead,

Dominik

wenn man mit vielen, vielen Microstores arbeitet

Dominik

und den muss man irgendwie handeln können

Dominik

und den trade-offen gegen den

Dominik

Overhead von, ist es jetzt kompliziert

Dominik

oder

Dominik

die Sachen weiterzubauen

Dominik

in diesem Monolithen, weil halt dann es

Dominik

schwierig wird, das zu beherrschen und das ist vielleicht so ein bisschen

Dominik

Ja, es ist immer so ein bisschen

Janis

trickreich, aber

Janis

vielleicht, ja,

Janis

ich frage mich immer, ob das jetzt

Janis

wirklich schlimm ist. Klar, als Unternehmen

Janis

möchte ich natürlich so viel

Janis

wie möglich wissen, aber als einzelner Entwickler,

Janis

wie ich jetzt einer bin, interessiert mich das eigentlich

Janis

gar nicht so. Also es ist mir

Janis

eigentlich relativ egal, ob ich jetzt in einem Monolithen

Janis

entwickle oder in einem Microservice.

Janis

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

Janis

ist.

Janis

Ich komme in ein Projekt rein, wo meinetwegen

Janis

Microservices drin sind und dann bin ich

Janis

damit total fein. Dann gucke ich auf meine Sachen.

Janis

Klar, ich habe mehr Abstimmungen mit anderen Leuten,

Janis

aber am Ende ist das

Janis

auch nur eine gefühlte

Janis

Sache, um die sozusagen

Janis

so kompliziert, wie wir hier gerade

Janis

reden, ist das in der Realität

Janis

gar nicht.

Janis

Also, wenn du

Janis

jetzt überlegst, ich will jetzt zum Microservices

Janis

rüber migrieren, ich habe einen funktionierenden Monolithen,

Janis

will ich das eigentlich, klar, für dich

Janis

ist das super kompliziert.

Janis

Aber für mich,

Janis

der als Neuer vielleicht in ein Projekt reinkommt,

Janis

noch nicht alles kennt, noch nicht weiß,

Janis

wie es zu diesem Punkt kam,

Janis

ist der Umstand Microservice gar nicht

Janis

mal so das große Thema.

Janis

Und

Janis

man lernt halt wirklich

Janis

auch viele Dinge, weil man sich

Janis

mit Sachen intensiver auseinandersetzen

Janis

muss, mit denen man sich vorher nicht so wirklich intensiv

Janis

auseinandergesetzt hat, wie zum Beispiel Logging,

Janis

wie zum Beispiel Metric Monitoring,

Janis

wie zum Beispiel...

Jochen

Ja, aber das kann auch wieder eine Gefahr sein.

Jochen

Ja, okay, komm.

Jochen

Aber für den Kunden bringt das ja jetzt erstmal nichts.

Jochen

Aber gut, ja, ich verstehe schon.

Jochen

Das, was ich

Janis

vielleicht finde, ist, dass wir relativ

Janis

kompliziert wohnen, hatte ich

Janis

so das Gefühl. Aber

Janis

der Sachverhalt an sich, der ist gefühlt

Janis

gar nicht so komplex. Und die

Janis

Probleme, die wir aufgezählt haben, die sind schon da,

Janis

aber die müssen nicht immer ein Problem

Dominik

sein. Ich bin da so ein bisschen neben, was

Dominik

Jochen gesagt hat. Die Frage ist, wann braucht man das überhaupt?

Dominik

Also du brauchst halt wirklich einen Pfeil, wo du dich auskennst

Dominik

und wirklich weißt, das brauchst du jetzt, das kannst du nicht anders lösen,

Dominik

bevor du überhaupt

Dominik

die Entscheidung treffen würdest, da machen wir jetzt ein Microsoft-Ausfall.

Dominik

Ich glaube, vorher muss man

Dominik

erstmal andere Sachen korrigieren oder so.

Jochen

Ja, also ich meine,

Jochen

das klingt jetzt alles schrecklich oder klingt jetzt

Jochen

wenn ich, ähm,

Jochen

alter Sack.

Jochen

Ich habe früher, wenn Leute so etwas gesagt haben,

Jochen

war ich immer so, ja, ja.

Jochen

Aber tatsächlich, so Erfahrungen,

Jochen

oft ist es irgendwie,

Jochen

ich habe das Gefühl,

Jochen

das Problem in der Praxis ist oft

Jochen

Kompetenz.

Jochen

Da weiß ich nicht, ob Leute das irgendwie hinkriegen oder nicht.

Jochen

Kann man das essen?

Jochen

Und die Sachen selber

Jochen

sind gar nicht so kompliziert.

Jochen

Da würde ich vollkommen recht geben.

Jochen

Ich würde es so ausdrücken,

Jochen

Es gibt einen nicht unerheblichen handwerklichen Teil bei dieser ganzen Geschichte und der ist gar nicht so gut in theoretischer, also sagen wir so, das ist halt nicht so viel, da ist gar nicht so viel Theorie.

Jochen

Also genau, ich weiß nicht, das ist vielleicht die falsche Analogie, ich versuche es einfach mal, man sagt irgendwie, ja man möchte gerne irgendwie einen Bart schön gefließt haben oder so, dann das Buch zur Fliesenlegtheorie ist jetzt gar nicht so dick vielleicht.

Jochen

Das heißt aber nicht, dass das ein einfaches Problem ist.

Jochen

Wenn man das selber versucht, dann wird man feststellen,

Jochen

das sieht nicht so aus, wie ich mir das

Jochen

vorgestellt habe, blöd. Und tatsächlich

Jochen

braucht man möglicherweise lange,

Jochen

muss lange üben und viele Better-Gefeest haben,

Jochen

bis man das richtig kann.

Jochen

Und das ist halt leider beim Programmieren manchmal auch irgendwie so.

Jochen

ja,

Jochen

das ist halt ein Problem, mit dem

Jochen

Organisationen dann auch oft konfrontiert

Jochen

sind und

Jochen

das nicht so richtig gelöst kriegen.

Jochen

Und dann probiert man das halt mit so komplizierten

Jochen

Geschichten irgendwie. Also ja,

Jochen

okay, aber eigentlich, und das

Jochen

Dumme ist, da gibt es halt auch keinen einfachen Weg raus.

Jochen

Die Lösung

Jochen

dafür ist halt, weiß ich nicht,

Jochen

Leute schulen oder abwarten, bis sie so gut

Jochen

geworden sind, dass das dann funktioniert oder so viele

Jochen

Sachen kaputt gegangen sind, dass sie dann irgendwann gemerkt haben,

Jochen

wie es richtig funktioniert. Und das ist halt dann

Jochen

vielleicht so ein Zeithorizont mehrere Jahre oder so.

Jochen

Das kann man ja, und

Jochen

dann ist noch nicht mal sichergestellt, dass es dann hinterher wirklich

Jochen

funktioniert, sondern da kann man

Jochen

nur die Hoffnung drauf haben, dass es dann vielleicht funktioniert.

Jochen

Das ist ja ganz schrecklich.

Jochen

wenn ich jetzt ein Projekt habe, wo meine Karriere

Jochen

dann hängt, ob das jetzt gut wird oder nicht.

Jochen

Das kann mir ja niemandem erzählen.

Jochen

Und dann versuchen wir halt irgendwie andere Sachen

Jochen

um das. Aber das ist halt alles nur,

Dominik

ja. Ich glaube, um nochmal zu der

Dominik

Badanalogie zurückzukommen, dann hast du halt entweder

Dominik

eine Mosaikwand oder du klebst halt alles

Dominik

mit einem Kleber drüber.

Dominik

Dann hast du eine glatte Wand, das ist auch, glaube ich,

Dominik

modisch gerade. Ich glaube, das ist nicht

Dominik

so schlimm.

Dominik

Ja, ich weiß nicht. Wichtig ist,

Dominik

was kannst du in dem Bad machen? Kannst du da dich duschen

Dominik

zum Beispiel? Ja, ja, aber

Jochen

ich glaube, das ist halt tatsächlich gar nicht so einfach,

Jochen

das hinzukriegen, dass es wirklich gut funktioniert.

Jochen

Das ist halt irgendwie schwierig.

Jochen

Ja, okay.

Dominik

Die Handwerksgrundsätze sind natürlich schon sehr wichtig.

Jochen

Ja, oder ich weiß nicht, vielleicht ist das auch ein blödes Beispiel,

Jochen

Musikinstrument spielen ist vielleicht auch theoretisch gar nicht so,

Jochen

Gitarre gibt nicht so viele Seiten,

Jochen

aber trotzdem irgendwie muss man lange üben, bevor das

Jochen

irgendwie funktioniert. Und manche Bereiche,

Jochen

vielleicht nicht alle, aber manche Bereiche beim Programmieren sind

Jochen

halt auch so. So dieser Modulisierungsbereich,

Jochen

da habe ich das Gefühl,

Dominik

es gibt schon die kleinen Kinder, die können relativ viel

Dominik

Krach machen und nennen das Musik.

Dominik

naja

Dominik

okay

Dominik

haben wir eine Quintessenz gefunden damit?

Dominik

es kommt drauf an

Dominik

genau, das gibt es auch

Dominik

hat jemand schön

Jochen

die Lösung aller IT-Probleme

Jochen

so ein O'Reilly-Buch, wo drauf steht

Jochen

it depends

Jochen

absolut

Jochen

ich bleib dabei

Jochen

es ist prinzipiell cool erstmal

Janis

das muss man halt sagen, es klingt natürlich

Janis

cooler, auch wenn das natürlich niemals

Janis

ein Entscheidungspunkt sein sollte und auch

Janis

sehr, sehr subjektiv ist. Aber ich glaube,

Janis

am Ende kommt es immer einfach drauf an, ob man es

Janis

haben will, ob man es braucht.

Janis

Da haben wir wieder,

Janis

es ist ein gutes Sales-Argument. Wir machen

Janis

Microservices, das ist wunderbar, das klingt

Janis

erstmal immer gut. Ja, okay.

Dominik

Das ist auf jeden Fall ein gutes Argument, wo man Geld für mich vergeben kann.

Dominik

Ja.

Dominik

Rein technisch natürlich immer schwer.

Dominik

Da sind wir wieder bei den Dingen, wo die

Dominik

Infra sagt, da bewegen wir uns gar nicht, sagt

Dominik

dann halt Consulting, ja, wir müssen ja nichts

Dominik

neu, sau durchs Dorf treiben,

Dominik

wieder ein bisschen Sales und Marketing machen kann, ja.

Jochen

Ja, aber das ist halt so ein bisschen, das ist halt auch das gleiche

Jochen

Problem wie, ich glaube, ich versuche

Jochen

immer das noch auf den Punkt zu kriegen, ich kriege es nicht so richtig gut

Jochen

formuliert, das ist halt so

Jochen

Probleme, die schwer lösbar sind,

Jochen

die produzieren im Grunde irgendwie so

Jochen

Scheinlösungen, so, weiß ich nicht.

Jochen

Lass das mal Edgel machen. Gesundheit

Jochen

ist schwierig, ja, irgendwie,

Jochen

wenn man irgendwie eine schwere Krankheit

Jochen

bekommt oder so, dann hat man ein Problem, das sehr schwer lösbar

Jochen

ist, wo man nicht viel machen kann, so, das produziert

Jochen

halt irgendwie den ganzen Markt von irgendwie so

Jochen

Pseudo-Snack-Oil, weiß ich nicht,

Jochen

Quacksalbern. Computer-Sicherheit,

Jochen

schwieriges Problem,

Jochen

dann auch da

Jochen

entsteht so eine Branche von

Jochen

etwas halbwegs

Jochen

Zwielichtigen, weiß ich nicht genau.

Jochen

Manche sind gut, manche sind nicht so gut.

Dominik

Da habe ich schon gesagt, dass du durch eine Firma betreibst, bei der du bei Organ-Energie

Dominik

auf Telefon anrufen kannst und ich schicke dir dann

Dominik

positive Energie durch das Universum zurück.

Dominik

Ja, also jetzt musst du

Dominik

nur noch das entsprechende Problem

Jochen

suchen, was die Leute gerne löst haben.

Jochen

Ja, einen Stundensatz aufzählen oder halt so eine

Jochen

019er-Nummer oder sowas.

Jochen

Ja.

Jochen

Wir schweifen schon wieder ab.

Jochen

Ja, und

Jochen

da muss man halt, ich meine, ja, und es gibt dann

Jochen

halt so Dinge, die sind so, ja,

Jochen

vielleicht schon sinnvoll, aber man kann sie halt

Jochen

auch so benutzen. Es ist halt, das ist halt wie,

Jochen

weiß ich nicht, es gibt so ganze Big Data

Jochen

Blockchain, weiß ich nicht, und

Jochen

Microservices ist halt auch irgendwie so ein bisschen

Jochen

irgendwie zumindest irgendwie, man hatte

Jochen

so das Gefühl, das wird immer so als Lösung verkauft,

Jochen

für Sachen, die schwer sind.

Jochen

Ja, aber ich will

Jochen

gar nicht sagen, dass das jetzt irgendwie

Jochen

Unsinn wäre oder so, sondern ne, also

Jochen

es gibt da schon durchaus andere Nutzfallen und das ist auch

Jochen

vielleicht eine gute Idee.

Janis

Sie machen nicht immer alles leichter, sie machen manchmal auch

Janis

Sachen schwerer, aber sie machen dabei andere

Janis

Sachen leichter, aber nicht alles.

Janis

Ja, auch wenn es schwerer wird.

Janis

Man hat einfach wirklich diesen, also das ist

Janis

ich glaube, das ist auch immer ganz wichtig zu

Janis

sagen dabei, man hat halt wirklich einen Trade-Off

Janis

und der ist nicht ohne, der ist niemals ohne.

Dominik

Ja, vielleicht wollte man jemanden fragen, der sich damit auskennt, bevor man

Dominik

zum Beispiel mich.

Dominik

Änderung macht.

Dominik

Genau, ja.

Dominik

Ja, keine Ahnung.

Dominik

Wir hätten, also ich hätte auch noch

Jochen

Pics, also wir können auch noch, ich weiß nicht genau,

Jochen

wie es aussieht. Wollen wir noch irgendwie,

Jochen

gibt es noch irgendwie Themen oder haben wir schon alles

Jochen

gesagt, was wir sagen wollen? Haben wir alles gesagt zum Microservices?

Jochen

Fällt euch noch was ein? Bestimmt nicht.

Jochen

Bestimmt nicht, ja.

Dominik

Ja, ich habe noch eine andere Frage, aber das hat nichts mit den Pics

Dominik

zu tun, aber das ist dann Jochen.

Dominik

Aber haben wir noch irgendwas zu Microservices?

Dominik

Sonst würden wir das Thema einfach zumachen.

Dominik

No. Machen wir es so.

Dominik

Du hast irgendwas mit File-Benchmarks gemacht,

Dominik

was war denn das?

Jochen

Okay, ja, also das ist etwas, das mich ja auch schon eine ganze Zeit lang umtreibt.

Jochen

Sollen wir das beim nächsten Mal sonst erzählen?

Jochen

Nö, wir können das gerne kurz darauf eingehen.

Jochen

Ja, also die Frage, die mich beschäftigt hat, ist, weil ich würde ja gern ins Hosting-Geschäft einsteigen.

Jochen

Ja, also ganz dick.

Jochen

Ja, genau. Und eine Frage, die mich da beschäftigt hat, also gerade Podcast-Hosting.

Jochen

Ich meine, wir betreiben unsere eigene,

Jochen

wir sind ja auch unser eigener Podcast-Hauser, tatsächlich.

Jochen

Und da sind das etwas spezielle Anforderungen.

Jochen

Die Files sind groß.

Jochen

Ja, Files surfen, schnell Files surfen.

Jochen

Genau, und die Frage ist jetzt, okay,

Jochen

mit Pfeifen oder nicht?

Jochen

Ja, mich ärgert, dass wir da so eine Abhängigkeit haben.

Jochen

Wir machen das über einen CDN, über CloudFront

Jochen

und das ist auch teuer irgendwie.

Jochen

Erstaunlich teuer.

Jochen

Und die Frage wäre, kann man das nicht selber machen?

Jochen

Weil wenn man irgendwie, ich miete ja sowieso Server,

Jochen

auf den ich den Xamarin deploye und da ist der Traffic

Jochen

frei, also warum kann man

Jochen

dann nicht die Files auch mit ausliefern?

Jochen

Also mit Minio oder sowas?

Jochen

Ja, oder im einfachsten Fall ein statischer Web-Server,

Jochen

das geht natürlich, das Problem dabei ist halt

Jochen

naja, also

Jochen

solche Dinge wie

Jochen

Authentifizierung und so ist halt schwierig, wie ist das denn

Jochen

halt, also ich meine, das ist natürlich

Jochen

viele würden sagen, das ist doch egal,

Jochen

wenn da jemand deine,

Jochen

also mir geht es um den Fall zum Beispiel, man

Jochen

editiert halt irgendwie eine neue

Jochen

Podcast-Episode zum Beispiel und dann

Jochen

Sollte zum Beispiel die Audioinhalte

Jochen

nicht für jeden sofort verfügbar sein, sondern

Jochen

erst, wenn das frei veröffentlicht ist.

Jochen

Also nur, wenn man authentifiziert ist.

Jochen

Wie macht man das denn? Das geht ja

Jochen

quasi gar nicht, wenn ich das auf dem statischen

Jochen

File-Server hätte. Dann, sobald die Files verfügbar sind,

Jochen

kann ich sie da sehen.

Jochen

Ist jetzt

Jochen

ein Detailproblem eigentlich, aber

Jochen

wie wäre das denn, wenn ich das für andere

Jochen

machen wollen würde?

Jochen

Die haben ja eventuell auch noch irgendwie

Jochen

so Anwendungsfälle, wo sie Sachen

Jochen

vielleicht nur nicht öffentlich veröffentlichen

Jochen

wollen, also eine ausgewählte Gruppe

Jochen

von Leuten. Also, wie

Jochen

soll denn eine Authentifizierung funktionieren? Dann gibt es dann halt

Jochen

diese ganzen Geschichten mit, man schickt

Jochen

halt sozusagen

Jochen

ein Request an den File-Server,

Jochen

und da ist dann halt irgendwie ein Cookie gesetzt,

Jochen

oder halt ein Token, oder da ist irgendwas in der URL,

Jochen

was signiert ist, und dann der fragt nochmal

Jochen

einen anderen Service und guckt halt nach, ist der

Jochen

jetzt authentifiziert?

Jochen

Fragt der einen Microservice?

Jochen

Ja, genau, da hat man dann auch schon so eine Art Microservice,

Jochen

oder man schickt halt den

Jochen

den Request zum Applikations-Server. Der Applikations-Server

Jochen

schickt aber nicht die File-Response zurück, sondern

Jochen

er schickt nur eine Response zurück, wo

Jochen

ein Header gesetzt ist, in dem drin steht, ja,

Jochen

dieses File darf ausgeliefert werden. Und dann

Jochen

der Reverse-Proxy vorne dran tauscht dann halt diese

Jochen

Response, die echte File-Response aus.

Jochen

Engine X macht? Ja, genau, das gibt's.

Jochen

Wie heißt das? X-Send-File?

Jochen

Ich weiß nicht. Irgendwie so. Ja, genau.

Jochen

Und

Jochen

also das gibt's alles sehr hässlich

Jochen

und funktioniert auch alles nicht so richtig gut.

Jochen

Und deswegen wäre es auch viel schöner, wenn man das direkt über

Jochen

einen Applikations-Server ausliefern würde. Und ich dachte eigentlich

Dominik

geht doch. Django Static Files quasi.

Dominik

Ja, da gibt's

Jochen

also wenn die Assets

Jochen

gemeint sind, also sowas wie CSS

Jochen

und JavaScript und so Zeugs, da gibt's schon was

Dominik

für. Da gibt's zwei Neues. Nicht die Assets, sondern

Dominik

wirklich dann halt mit Einzel-Single-Permission

Dominik

und File-Offset-Level. Genau, da gibt's

Jochen

nix und das wäre aber interessant

Jochen

und eigentlich dachte ich irgendwie, das müsste

Jochen

mit Python auch gehen, Python-Icing.io, da gibt's ja auch

Jochen

alles irgendwie und

Jochen

UV-Loop

Jochen

ist ja auch sehr schnell

Jochen

und so

Jochen

und das müsste man doch eigentlich

Jochen

machen können und das geht auch.

Dominik

Dein Benchmark hat festgestellt, Caddy ist viel schneller.

Dominik

Ja, genau.

Jochen

Dann habe ich irgendwie jetzt ein anderes,

Jochen

weil ich interessiere mich für Kochen und so und

Jochen

gibt es so einen Rezeptmanager, Mili.

Jochen

Kann man sich auch mal angucken, ist sehr nett.

Jochen

Und das habe ich dann irgendwie auf meiner Infrastruktur deployed

Jochen

und da gibt es auch viele Bilder und so und dann

Jochen

dachte ich, ah, das mache ich bei UV-Corn, weil

Jochen

wozu haben die da noch extra

Jochen

ein Caddy laufen? Und dann

Jochen

habe ich dann auch in deren Discord Bescheid gesagt,

Jochen

so, ja, warum macht ihr denn

Jochen

da nochmal Caddy irgendwie zusätzlich,

Jochen

das ist doch Quatsch, irgendwie macht das doch einfach über den UV-Corn

Jochen

und dann hieß es so, ja, aber wir haben die Erfahrung gemacht,

Jochen

das ist dann irgendwie schneller und irgendwie sonst ist es langsam.

Jochen

Der so, das kann gar nicht sein!

Jochen

Dann muss ich mal einen Benchmark machen.

Jochen

Hab ich einen Benchmark gemacht und gesehen,

Jochen

stimmt doch, sie haben recht, ich liege falsch.

Jochen

Benchmark, ja.

Jochen

Auf jeden Fall

Jochen

tatsächlich Nginx Caddy, viel schneller

Jochen

als UV-Corn

Jochen

beziehungsweise die File-Response kommt von Starlet,

Jochen

was halt unter Fast-DPI

Jochen

darunter liegt.

Jochen

Und das ist auch fast IPA-Backend.

Jochen

Ja, keine Ahnung, wo es liegt.

Jochen

Ich weiß es nicht. Also sagen wir so, es ist immer noch schnell genug

Jochen

für Gigabit-Interface.

Jochen

Aber wenn es

Jochen

also 10 Gigabit schafft man damit nicht.

Jochen

Und Caddy und

Jochen

Nginx schaffen das schon. Also

Jochen

irgendwas ist da nicht richtig. Ich weiß aber nicht was.

Jochen

Kommen wir wieder zu UV-Con macht das

Jochen

ganze Jahr, oder UV-Loop ist halt Zeiten

Jochen

vor allen Dingen. Und denken wir, das kompiliert ja nach C.

Jochen

Das muss doch eigentlich schnell sein. Keine Ahnung.

Jochen

Also eine mögliche

Jochen

Grund dafür, warum das

Jochen

so ist, den ich,

Jochen

wo ich denke, das könnte es sein, ist,

Jochen

es liegt daran, dass

Jochen

irgendwie Caddy und Nginx

Jochen

irgendeine Art von Serial-Copy-TCP verwenden,

Jochen

wo es halt nicht nochmal durch den User-Space

Jochen

kopiert werden muss, die Daten, und

Jochen

das macht Ubiquon halt nicht,

Jochen

sondern, weil das kann es halt noch nicht,

Jochen

also es gibt da ein Pull-Request, das ist aber noch nicht durch,

Jochen

das heißt, da wird immer alles nochmal

Jochen

kopiert, also es wird vom Filesystem, vom Hauptspeicher

Jochen

von der Anwendung kopiert und dann nochmal

Jochen

in den Netzwerkspeicher und dann erst

Jochen

raus. Das ist natürlich viel ineffizienter,

Jochen

als wenn man es halt, als wenn der Kernel direkt...

Dominik

Interessant, wenn man bei den Pool-Requests kann, mal Cherrypicken

Dominik

und mal gucken, ob es dann... Ja, das wollen Sie

Jochen

vielleicht mal ein bisschen angucken. Also das könnte noch ein Unterschied sein.

Jochen

Das wäre dann halt ein relativ langweiliger Grund.

Jochen

Dann muss man sagen, ja gut, und das wäre halt

Jochen

so, ich weiß nicht, ob das dann mit Minio auch einfach so geht,

Jochen

wenn man die Files nicht im Filesystem liegen hat, sondern halt

Jochen

irgendwo anders, was man ja vielleicht will,

Jochen

heutzutage, dann geht es vielleicht alles nicht

Jochen

mehr. Aber dann ging es auch mit

Jochen

Nginx und so nicht mehr, auch mit Kelly

Jochen

nicht, weil

Jochen

die könnten dann nicht sein File einfach verwenden.

Jochen

Das geht halt nicht. Das geht halt nur, wenn es tatsächlich

Jochen

ein File-in-File-System ist, glaube ich.

Jochen

Auch da wäre interessant, wenn sich das jemand,

Jochen

wenn jemand Bescheid sagen könnte, der sich damit auskennt,

Jochen

ob das so ist oder nicht.

Jochen

Genau.

Jochen

Ja, genau.

Jochen

Damit habe ich mich so ein bisschen beschäftigt.

Jochen

Und ja,

Jochen

auf jeden Fall scheint es so zu sein, dass

Jochen

Caddy viel effizienter ist als

Jochen

UV-Con oder UV-Loop

Jochen

beim Serven von städtischen Files.

Jochen

Und ich weiß nicht, warum. Keine Ahnung.

Jochen

Aber es ist doch interessant. Mal gucken, ob ich das

Jochen

irgendwie rauskriege. Ja, das werden

Dominik

wir euch weiter informieren irgendwann am Ende von irgendeiner

Dominik

weiteren Zukunftsfolge. Also hört alle unsere Folgen

Dominik

mal bis ganz zum Ende durch, wenn es

Dominik

langweilig wird und nicht schlafen.

Dominik

Ja.

Dominik

Dann pickt der Woche, Jochen.

Dominik

Genau,

Jochen

picken würde ich diesmal

Jochen

tatsächlich,

Jochen

wo habe ich das gesehen? Ich weiß gar nicht mehr genau.

Jochen

Das Ding nennt sich

Jochen

B-Pi-Top.

Jochen

Ja.

Jochen

Ah, da, ich hab's hier laufen.

Jochen

Oh, das ist hübsch. Das ist ziemlich hübsch, ne?

Jochen

Ich weiß nicht, ob das Textual verwendet oder Rich

Jochen

oder irgendwas in der Richtung, aber

Jochen

genau. Post-its oder so?

Jochen

Rich? Ja, das gibt einem so ein bisschen

Jochen

Daten zu den, zu, also

Jochen

es ist halt Top. B-Pi-Top?

Jochen

Ja.

Jochen

Sehr nettes Ding. Es gibt da so ähnliche

Jochen

Sachen, Glances gibt's auch. Ja, Glances

Jochen

gibt's noch und also T-Top, H-Top.

Jochen

Ja.

Jochen

Aber das ist mir so letztens über den Weg gelaufen

Jochen

und fand ich, sieht echt ziemlich gut aus.

Jochen

Ist jetzt hier langweilig, der Rechner macht überhaupt nichts.

Jochen

Ja, das hat keine Last drauf.

Jochen

Ich picke iJSON.

Jochen

Habe ich auch noch nicht so viel

Dominik

benutzt, aber das macht so große

Dominik

JSON-Objekte irgendwie vernünftig.

Dominik

Hast du auch einen Pick, Janus?

Dominik

Was genau

Janis

soll ich denn picken? Muss das einen breiten Kontext haben?

Janis

Nö.

Jochen

Irgendwas Cooles, was halt irgendwie, was man

Jochen

vielleicht noch nicht kennt.

Janis

Ah, okay. 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,

Janis

dass man sich Sachen automatisch aus Datenbanken holen kann,

Janis

wenn sie reingeschrieben wurden.

Janis

Also zum Beispiel Write-Only-Prozesse.

Janis

Und die werden dann ganz, ganz automatisch

Janis

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

Dominik

in das Kafka.

Janis

Ja, wir haben ja über Datenkonsistenzen

Janis

heute geredet. Und im Prinzip

Janis

ist das so ein Ansatz, wie du dir die Daten

Janis

quasi aus einer Datenbank, ohne

Janis

den Service selbst da

Janis

beeinflussen zu müssen, rausziehen kannst,

Janis

in ein Topic schreiben kannst und über einen

Janis

Sync-Connector in andere Datenbanken reinschreiben

Janis

kannst. Und das wirklich coole an der Sache ist,

Janis

es gibt Konnektoren für alle möglichen Datenbanken.

Janis

Also Postgres,

Janis

Elasticsearch,

Janis

Neo4j. Das ist relativ interessant.

Janis

Kann man sich mal angucken.

Dominik

Das klingt gut. Also Next Level Kafka.

Dominik

mindestens.

Dominik

Okay, cool.

Dominik

Ja, vielen Dank, Janis, dass du hier warst heute.

Dominik

Sehr gerne.

Dominik

Ich hoffe, es hat dir ein bisschen Spaß gemacht,

Dominik

genauso viel wie uns.

Dominik

Bleibt uns gewogen. Schaltet uns wieder ein.

Dominik

Wie auch immer.

Dominik

Vielen Dank.

Dominik

Dann bis demnächst.

Dominik

Tschüss.