WEBVTT

00:00:00.238 --> 00:00:02.905
<v Lucas Dohmen>Willkommen im Maschinenraum. Wir sind heute zu Gast bei Softwarearchitektur

00:00:02.905 --> 00:00:06.995
<v Lucas Dohmen>im Stream und reden über Simple Cloud in der Praxis. Mein Name ist Lucas Domen

00:00:06.995 --> 00:00:08.885
<v Lucas Dohmen>und ich bin Principal Consultant bei SWAGLab.

00:00:09.375 --> 00:00:13.975
<v Lucas Dohmen>Und zu Gast habe ich heute Dirk Breuer. Hallo Dirk, magst du dich mal kurz vorstellen?

00:00:14.785 --> 00:00:20.535
<v Dirk Breuer>Sehr gerne. Ich bin Dirk, ich bin freier Softwareentwickler seit sehr langer Zeit mittlerweile,

00:00:21.465 --> 00:00:24.875
<v Dirk Breuer>und bin vor allen Dingen im Bereich Webentwicklung unterwegs,

00:00:24.875 --> 00:00:28.745
<v Dirk Breuer>mache da so Betriebssachen auch mit und vor allen Dingen mit der Programmiersprache

00:00:28.745 --> 00:00:32.025
<v Dirk Breuer>Ruby on Rails, was ich noch viel länger mache, als dass ich als freiberuflicher

00:00:32.025 --> 00:00:33.065
<v Dirk Breuer>Softwareentwickler unterwegs bin.

00:00:34.825 --> 00:00:38.045
<v Lucas Dohmen>Super. Bevor wir ins eigentliche Thema starten, habe ich dir noch eine Frage

00:00:38.045 --> 00:00:42.525
<v Lucas Dohmen>mitgebracht. Wann hast du eigentlich das letzte Mal Production kaputt gemacht?

00:00:44.145 --> 00:00:47.725
<v Dirk Breuer>Also das genaue Datum kann ich dir jetzt gar nicht genau sagen,

00:00:47.725 --> 00:00:52.115
<v Dirk Breuer>aber allzu lange ist es nicht her und so ganz hart kaputt war es auch nicht,

00:00:52.115 --> 00:00:55.715
<v Dirk Breuer>aber es war auf jeden Fall offline, ungeplant, es gab keine Wartungsseite und

00:00:55.715 --> 00:00:58.995
<v Dirk Breuer>die Leute haben auf jeden Fall einen 503 gesehen, also zählt das glaube ich.

00:00:59.335 --> 00:01:04.425
<v Dirk Breuer>Und zwar habe ich ja gesagt, ich mache hauptsächlich Rails und jeder,

00:01:04.425 --> 00:01:07.985
<v Dirk Breuer>der das vielleicht schon mal benutzt hat, da gibt es sowas wie Datenbankmigration,

00:01:07.985 --> 00:01:11.845
<v Dirk Breuer>die legt man an, super praktisch, die werden dann einfach immer ausgeführt beim Deployment,

00:01:12.565 --> 00:01:15.755
<v Dirk Breuer>was auch in der Regel super ist, aber manchmal, wenn man Dinge tut,

00:01:15.755 --> 00:01:20.305
<v Dirk Breuer>die vielleicht etwas länger gehen, so wie größer angelegte Indizes ändern oder eine,

00:01:21.505 --> 00:01:24.405
<v Dirk Breuer>Stored Functions ändern, die auch die andere dann brauchen und man dann nicht

00:01:24.405 --> 00:01:27.405
<v Dirk Breuer>daran gedacht hat, ah, das wird gleich deployed, da müssten wir vielleicht eine

00:01:27.405 --> 00:01:30.475
<v Dirk Breuer>Wartungsseite online schalten, damit er das sauber durchführen kann,

00:01:30.845 --> 00:01:32.885
<v Dirk Breuer>ja, dann geht dann schon mal die Produktion down.

00:01:34.085 --> 00:01:36.895
<v Dirk Breuer>In der Regel ist es dann auch wieder in Ordnung, aber das war auf jeden Fall das letzte Mal.

00:01:37.495 --> 00:01:40.305
<v Lucas Dohmen>Ja, ich meine, das ist ja auch so ein Kritikpunkt an der Art und Weise,

00:01:40.305 --> 00:01:42.585
<v Lucas Dohmen>wie Ruby on Rails das macht. Ich meine, Ruby on Rails ist ja nicht die Einzigen,

00:01:42.585 --> 00:01:47.575
<v Lucas Dohmen>die das so machen, aber dass diese Migrations so ein bisschen Teil der Anwendung

00:01:47.575 --> 00:01:51.305
<v Lucas Dohmen>sind und so mitlaufen, das führt ja manchmal doch zu Problemen.

00:01:52.485 --> 00:01:58.335
<v Dirk Breuer>Ja, das ist an vielen Stellen super praktisch, macht andere Probleme weniger.

00:01:58.875 --> 00:02:01.725
<v Dirk Breuer>Aber in solchen Fällen muss man halt explizit daran denken, okay,

00:02:01.725 --> 00:02:06.525
<v Dirk Breuer>du machst da eine Migration, die Einfluss darauf hat, die potenziell deine

00:02:06.525 --> 00:02:09.055
<v Dirk Breuer>Produktion dann in dem Moment lahm legt.

00:02:10.145 --> 00:02:12.605
<v Dirk Breuer>Merkst du halt nicht lokal und das merkst du in der Regel auch nicht,

00:02:12.605 --> 00:02:16.185
<v Dirk Breuer>wenn du es auf Staging deployst, weil du da nicht die ganze Zeit drauf guckst

00:02:16.185 --> 00:02:19.325
<v Dirk Breuer>während des Deployments. Da ist nicht die ganze Zeit Last drauf und ja.

00:02:20.545 --> 00:02:22.965
<v Lucas Dohmen>Ja, und ich finde auch, das ist auch so ein bisschen ein Zeichen dafür,

00:02:23.345 --> 00:02:26.585
<v Lucas Dohmen>wie sicher wir uns damit fühlen, in Produktion zu gehen, weil man halt gar nicht

00:02:26.585 --> 00:02:28.525
<v Lucas Dohmen>mehr so das krass babysittet, sondern

00:02:28.525 --> 00:02:32.145
<v Lucas Dohmen>irgendwie man shipped halt und dann funktioniert es halt, weil es halt in,

00:02:32.675 --> 00:02:36.335
<v Lucas Dohmen>99,9 Prozent der Fälle einfach völlig problemlos funktioniert.

00:02:36.695 --> 00:02:38.945
<v Lucas Dohmen>Und das ist aus meiner Sicht eigentlich ein gutes Zeichen. Und wenn es dann

00:02:38.945 --> 00:02:43.625
<v Lucas Dohmen>halt irgendwie ein bis zwei Minuten sind, dann geht ja auch nichts wirklich kaputt.

00:02:43.925 --> 00:02:47.045
<v Lucas Dohmen>Also wenn man jetzt nicht irgendwie eine medizinische Anwendung baut oder so.

00:02:47.565 --> 00:02:50.345
<v Dirk Breuer>Das stimmt, das ist korrekt. Schöne Frage auf jeden Fall, Lucas.

00:02:51.275 --> 00:02:55.915
<v Lucas Dohmen>Danke dir. Dann würde ich sagen, wir starten jetzt mal rein in das Thema.

00:02:56.625 --> 00:02:59.985
<v Lucas Dohmen>Worüber wollen wir eigentlich heute sprechen? Also ich habe den Dirk eingeladen,

00:02:59.985 --> 00:03:07.895
<v Lucas Dohmen>weil Dirk und ich arbeiten zusammen an fejo.dk und dort machen wir beide Operations.

00:03:09.685 --> 00:03:14.265
<v Lucas Dohmen>Wir haben letztes Jahr diesen Umstieg gemacht von AWS auf Hetzner Cloud und,

00:03:15.495 --> 00:03:18.015
<v Lucas Dohmen>darüber wollen wir gar nicht so sehr jetzt sprechen, wie diese Migrationen gelaufen

00:03:18.015 --> 00:03:20.555
<v Lucas Dohmen>sind. Dazu haben wir auch schon mal einen Vortrag gehalten, wer sich dafür interessiert.

00:03:20.845 --> 00:03:24.905
<v Lucas Dohmen>Wir wollen heute mal darüber sprechen, wie sich das so anfühlt oder wie das

00:03:24.905 --> 00:03:26.675
<v Lucas Dohmen>genau aussieht, in einer Simple

00:03:26.675 --> 00:03:30.335
<v Lucas Dohmen>Cloud eine Rails-Anwendung laufen zu haben. Das ist das Thema heute.

00:03:30.715 --> 00:03:34.355
<v Lucas Dohmen>Und darum haben Dirk und ich überlegt, wir wollen euch da so ein bisschen durchführen.

00:03:34.355 --> 00:03:41.445
<v Lucas Dohmen>Wie wäre es, also quasi, wir haben alle Server gelöscht und jetzt deployen wir das Ganze nochmal neu.

00:03:42.385 --> 00:03:46.425
<v Lucas Dohmen>Was würde da passieren? Welche Tools sind da am Werk? Warum haben wir diese

00:03:46.425 --> 00:03:48.565
<v Lucas Dohmen>Tools ausgewählt? Welche Alternativen gäbe es?

00:03:48.925 --> 00:03:51.415
<v Lucas Dohmen>Und warum haben wir für diesen Fall diese Alternativen gewählt?

00:03:51.415 --> 00:03:54.575
<v Lucas Dohmen>Und dabei ist es uns ganz wichtig, das heißt nicht, dass das die beste Wahl

00:03:54.575 --> 00:03:57.485
<v Lucas Dohmen>für jedes System ist. Also das ist klar.

00:03:58.305 --> 00:04:03.635
<v Lucas Dohmen>Aber wir denken, dass es für viele eine Option ist, die unterschätzt wird,

00:04:04.565 --> 00:04:08.385
<v Lucas Dohmen>weil viele zu komplexeren Tools greifen, als sie das vielleicht bräuchten für

00:04:08.385 --> 00:04:10.705
<v Lucas Dohmen>den Use Case. Das ist so ein bisschen das, was wir euch erzählen wollen.

00:04:11.115 --> 00:04:14.245
<v Lucas Dohmen>Aber bevor wir das können, müssen wir so ein bisschen was zu Fejo erzählen,

00:04:14.245 --> 00:04:17.595
<v Lucas Dohmen>damit man einschätzen kann, wie das so ist. Magst du damit einmal kurz anfangen,

00:04:17.595 --> 00:04:19.595
<v Lucas Dohmen>Dirk? Wie sieht Fejo denn so aus?

00:04:20.055 --> 00:04:24.945
<v Dirk Breuer>Also Fejo ist eine Ferienhausvermittlungsplattform für Ferienhäuser in Dänemark,

00:04:25.505 --> 00:04:30.115
<v Dirk Breuer>suggeriert die Endung DK vielleicht schon und auch ausschließlich in Dänemark.

00:04:30.115 --> 00:04:34.655
<v Dirk Breuer>Also man kann keine in Norwegen oder Schweden oder sowas oder in Norddeutschland, nur Dänemark.

00:04:35.295 --> 00:04:38.605
<v Dirk Breuer>Und das ist ein relativ spezieller Ferienhausmarkt, der dänische.

00:04:39.785 --> 00:04:43.905
<v Dirk Breuer>Gut, es gibt Ferienhäuser überall und Ferienwohnungen, aber der dänische Ferienhausmarkt

00:04:43.905 --> 00:04:48.105
<v Dirk Breuer>ist insofern speziell, dass es eben, die sind im Grunde fast alle in privater

00:04:48.105 --> 00:04:51.565
<v Dirk Breuer>Hand, die Ferienhäuser. Die Dänen haben einfach Ferienhäuser, sehr, sehr viele.

00:04:52.125 --> 00:04:55.615
<v Dirk Breuer>Und Teile davon werden vermietet an Touristen.

00:04:56.885 --> 00:05:00.455
<v Dirk Breuer>Auch für sich selber, aber vor allen Dingen an Touristen ist es auch vorgeschrieben.

00:05:00.455 --> 00:05:03.255
<v Dirk Breuer>Und weil die da so viele von haben, gibt es entsprechend Infrastruktur.

00:05:03.255 --> 00:05:06.285
<v Dirk Breuer>Das heißt, nicht jeder ist da Privatvermieter, sondern es gibt,

00:05:07.785 --> 00:05:11.755
<v Dirk Breuer>so Agenturen und Büros, die sammeln dann diese Ferienhäuser und kümmern sich

00:05:11.755 --> 00:05:14.615
<v Dirk Breuer>um die Vermietung, kümmern sich darum, dass die Verträge geschlossen werden,

00:05:14.615 --> 00:05:17.975
<v Dirk Breuer>Schlüsselübergabe, Reinigung, dieser ganze Kram und auch Ansprechpartner vor Ort.

00:05:18.375 --> 00:05:21.295
<v Dirk Breuer>Weil der Däne, dem das Haus gehört, der Dänin, die sitzt vielleicht in Kopenhagen

00:05:21.295 --> 00:05:24.025
<v Dirk Breuer>und trinkt nen Kaffee, hat keine Lust darauf, dann kontaktiert zu werden,

00:05:25.185 --> 00:05:27.355
<v Dirk Breuer>wenn der deutsche Urlauber da ein Problem hat.

00:05:28.765 --> 00:05:32.305
<v Dirk Breuer>Und das sind die Ansprechpartner, mit denen wir kommunizieren.

00:05:32.305 --> 00:05:34.305
<v Dirk Breuer>Von denen bekommen wir die Daten über diese Häuser.

00:05:34.535 --> 00:05:39.225
<v Dirk Breuer>Mit denen rechnen wir sozusagen die Provision auch ab, die wir dann für eine

00:05:39.225 --> 00:05:42.215
<v Dirk Breuer>Buchung bekommen. So verdient Fejo Geld für diese Vermittlung.

00:05:43.785 --> 00:05:48.845
<v Dirk Breuer>Und da ist dann auch relativ, wird schon deutlich, wo ein Großteil der Arbeit

00:05:48.845 --> 00:05:51.275
<v Dirk Breuer>liegt, nämlich die Aufarbeitung dieser Daten, die müssen irgendwie

00:05:51.625 --> 00:05:54.765
<v Dirk Breuer>von den Partnern zu uns kommen, die sind in ganz vielen unterschiedlichen Formaten,

00:05:55.005 --> 00:05:57.685
<v Dirk Breuer>die müssen irgendwie verarbeitet werden, das heißt, es gibt bei Fejo einen

00:05:57.685 --> 00:05:59.225
<v Dirk Breuer>relativ großen Anteil an,

00:05:59.815 --> 00:06:04.585
<v Dirk Breuer>Hintergrund Datenverarbeitung, wo wir in die Datenbank schreiben und dann gibt

00:06:04.585 --> 00:06:08.525
<v Dirk Breuer>es eben den ganzen Teil, wo man als Kundin ein Ferienhaus suchen kann,

00:06:08.825 --> 00:06:10.105
<v Dirk Breuer>buchen kann und das vermitteln wir dann.

00:06:11.625 --> 00:06:15.335
<v Dirk Breuer>Ein wichtiger Aspekt ist, es gibt keine Bezahlfunktion auf Fejo,

00:06:15.335 --> 00:06:17.785
<v Dirk Breuer>also das Bezahlen läuft völlig out of band.

00:06:18.195 --> 00:06:23.775
<v Dirk Breuer>Das ist insofern relevant, weil das natürlich so ein paar Dinge sehr viel einfacher im Betrieb macht.

00:06:23.775 --> 00:06:27.065
<v Dirk Breuer>Wir müssen keine Webhooks für Zahlungsanbieter haben, auch so Sicherheitssachen,

00:06:28.305 --> 00:06:33.005
<v Dirk Breuer>sind einfach nicht so relevant für die Plattform, wie wenn du eine Kreditkartenanbindung

00:06:33.005 --> 00:06:37.405
<v Dirk Breuer>hättest oder was ähnliches. Also bestimmte Zertifizierungen fallen weg und dergleichen.

00:06:37.885 --> 00:06:41.535
<v Dirk Breuer>Das ist, finde ich, immer ein relativ wichtiger Punkt, wenn man sich auch so

00:06:41.535 --> 00:06:43.065
<v Dirk Breuer>Architektur anguckt und Entscheidungen,

00:06:43.065 --> 00:06:48.355
<v Dirk Breuer>weil das einfach deutlich Sachen einfacher macht. Ja, genau.

00:06:49.245 --> 00:06:52.765
<v Dirk Breuer>Und dann der andere wesentliche Aspekt, das hat auch gar nichts mit Ruby und

00:06:52.765 --> 00:06:56.865
<v Dirk Breuer>Rails zu tun. Wir haben uns entschieden, dass es so eine ganz klassische Server-Site

00:06:56.865 --> 00:07:02.385
<v Dirk Breuer>gerenderte Seite ist mit JavaScript, was Dinge anreichert.

00:07:02.715 --> 00:07:05.805
<v Dirk Breuer>Im Grunde funktioniert die Anwendung mehr oder weniger auch ohne JavaScript.

00:07:05.805 --> 00:07:09.685
<v Dirk Breuer>Das ist natürlich Quatsch, aber das ist so der Grundgedanke dahinter.

00:07:10.155 --> 00:07:14.645
<v Dirk Breuer>Und ich glaube, diese Aspekte sollten einigermaßen gut aufspannen,

00:07:14.645 --> 00:07:18.755
<v Dirk Breuer>mit was wir hier hantieren und da könnt ihr dann ja schauen,

00:07:18.755 --> 00:07:20.875
<v Dirk Breuer>ob das dann für euch auch passt, Teile daraus.

00:07:20.875 --> 00:07:23.175
<v Dirk Breuer>Weil das hat auf jeden Fall Auswirkungen auf die Architektur,

00:07:23.175 --> 00:07:25.385
<v Dirk Breuer>die wir in der Infrastruktur gewählt haben.

00:07:26.015 --> 00:07:29.485
<v Lucas Dohmen>Genau. Aber ich finde, einen wichtigen Aspekt hast du noch nicht erwähnt und

00:07:29.485 --> 00:07:34.595
<v Lucas Dohmen>das ist die Größe des Teams. Also wir reden darüber, dass wir im Team sechs

00:07:34.935 --> 00:07:38.335
<v Lucas Dohmen>Leute sind, also im Entwicklungsteam sechs Leute sind.

00:07:38.685 --> 00:07:42.525
<v Lucas Dohmen>Das heißt, es ist kein riesiges Team, wo man jetzt irgendwie einen Operations-Teil

00:07:42.525 --> 00:07:46.815
<v Lucas Dohmen>hat und einen Dev-Teil oder sonst irgendwas, sondern wir sind insgesamt sechs.

00:07:47.935 --> 00:07:51.745
<v Dirk Breuer>Das sind nicht sechs Vollzeitäquivalente. Vollzeitäquivalente sind weniger.

00:07:52.245 --> 00:07:57.485
<v Dirk Breuer>Ja, das ist ein wesentlicher Aspekt. Wir sind ein relativ kleines Team und dazu

00:07:57.485 --> 00:08:02.895
<v Dirk Breuer>muss man auch sagen, auch das Team, was im Backoffice Kundenanfragen und Verwaltungssachen,

00:08:03.515 --> 00:08:05.225
<v Dirk Breuer>macht, ist auch nicht viel größer.

00:08:06.995 --> 00:08:11.855
<v Dirk Breuer>Personenzahlen sind das mehr, aber das ist das Vollzeitäquivalent noch weniger im Grunde.

00:08:12.225 --> 00:08:16.025
<v Dirk Breuer>Instagram ist Fejo ein sehr überschaubares Team und das ist ein wesentlicher

00:08:16.025 --> 00:08:19.195
<v Dirk Breuer>Aspekt, dass wir versuchen sowohl in der Entwicklung als auch im Backoffice

00:08:19.545 --> 00:08:20.735
<v Dirk Breuer>sehr effizient zu arbeiten.

00:08:21.095 --> 00:08:25.815
<v Lucas Dohmen>Ja, definitiv. Und ich finde auch, das muss man auch noch mal betonen,

00:08:26.475 --> 00:08:30.405
<v Lucas Dohmen>weil Konkurrenten ja durchaus wesentlich größer sind. Also das scheint ja gut

00:08:30.405 --> 00:08:35.735
<v Lucas Dohmen>zu funktionieren, dieses Setup, dass das mit so einem relativ kleinen Team sehr gut läuft.

00:08:36.045 --> 00:08:39.665
<v Lucas Dohmen>Und ich finde auch noch mal zu ergänzen ist, dass der Großteil des Entwicklungsteams

00:08:39.665 --> 00:08:43.235
<v Lucas Dohmen>tatsächlich entweder Freelancer wie du oder Externe wie ich sind.

00:08:43.235 --> 00:08:47.485
<v Lucas Dohmen>Das heißt, wir müssen auch damit rechnen, dass mal jemand eine Zeit lang nicht verfügbar ist.

00:08:48.315 --> 00:08:52.245
<v Lucas Dohmen>Das heißt, auch das ist Teil von den Entscheidungen, die wir treffen.

00:08:53.015 --> 00:08:54.235
<v Dirk Breuer>Und vollständig remote.

00:08:54.915 --> 00:08:55.275
<v Lucas Dohmen>Stimmt.

00:08:55.575 --> 00:08:58.875
<v Dirk Breuer>Gleich, wenn wir über organisatorische Aspekte sprechen, auch noch ein wichtiger

00:08:58.875 --> 00:09:01.895
<v Dirk Breuer>Aspekt. Das ist vollständig remote und es arbeiten, nicht alle zur gleichen

00:09:01.895 --> 00:09:05.425
<v Dirk Breuer>Zeit. Also wir müssen sowieso auch asynchron kommunizieren. Daher,

00:09:06.165 --> 00:09:09.395
<v Dirk Breuer>das sind die Aspekte, die da mit reinspielen in die Dinge, über die wir heute

00:09:09.395 --> 00:09:10.115
<v Dirk Breuer>wahrscheinlich reden werden.

00:09:10.775 --> 00:09:14.765
<v Lucas Dohmen>Genau, das denke ich auch. Gut, dann würde ich sagen, starten wir mal rein in

00:09:14.765 --> 00:09:20.505
<v Lucas Dohmen>die Infrastruktur. Also, wir haben schon erwähnt, wir sind irgendwie aus AWS weggegangen.

00:09:20.795 --> 00:09:25.155
<v Lucas Dohmen>Wir sind auf einen, was wir Simple Cloud Anbieter gewechselt.

00:09:25.495 --> 00:09:29.905
<v Lucas Dohmen>Das ist bei uns Hetzner Cloud, aber es ist ganz bewusst so, dass wir gar nichts

00:09:29.905 --> 00:09:32.215
<v Lucas Dohmen>haben, was uns nur Hetzner Cloud bieten würde.

00:09:32.535 --> 00:09:36.175
<v Lucas Dohmen>Weil das ist genau das, was wir vermeiden wollen, was jetzt bei AWS eben sehr

00:09:36.175 --> 00:09:38.735
<v Lucas Dohmen>üblich ist, dass das Wegwechseln sehr teuer ist.

00:09:38.925 --> 00:09:44.645
<v Lucas Dohmen>Das, was wir bei Hetzner Cloud bekommen, kriegen wir bei mehreren anderen Anbietern auch.

00:09:45.035 --> 00:09:47.775
<v Lucas Dohmen>Das heißt, wir wollen uns da auch nicht so fest dran binden.

00:09:47.775 --> 00:09:50.975
<v Lucas Dohmen>Deswegen ist es für unsere Erklärung heute gar nicht so relevant,

00:09:50.975 --> 00:09:52.105
<v Lucas Dohmen>dass wir auf Hetzner Cloud sind.

00:09:52.635 --> 00:09:54.825
<v Lucas Dohmen>Wir können nur sagen, es funktioniert gut. Das ist der Teil,

00:09:54.825 --> 00:09:59.405
<v Lucas Dohmen>den wir dazu erzählen können, aber im Prinzip spielt es für den Rest keine Rolle.

00:09:59.865 --> 00:10:04.885
<v Lucas Dohmen>Das heißt, was benutzen wir von Hetzner Cloud? Wir benutzen da ganz intensiv

00:10:04.885 --> 00:10:07.495
<v Lucas Dohmen>natürlich die VMs, die uns zur Verfügung gestellt werden.

00:10:07.915 --> 00:10:14.415
<v Lucas Dohmen>Wir benutzen Load Balancer, wir benutzen die Storage, also das S3-Äquivalent

00:10:14.775 --> 00:10:19.165
<v Lucas Dohmen>von denen und natürlich dieses ganze Firewalling und Networking,

00:10:19.165 --> 00:10:22.075
<v Lucas Dohmen>was so ein System anbietet.

00:10:23.475 --> 00:10:25.905
<v Lucas Dohmen>Und das ist im Prinzip schon alles, oder habe ich was vergessen, Dirk?

00:10:26.995 --> 00:10:30.215
<v Dirk Breuer>Nee, so technisch hast du die wesentlichen Sachen genannt.

00:10:31.135 --> 00:10:34.755
<v Dirk Breuer>Ein wichtiger Aspekt, der natürlich da vorhanden sein muss, wenn man jetzt was

00:10:34.755 --> 00:10:38.185
<v Dirk Breuer>anderes nimmt und den ja auch viele andere dann anbieten, ist natürlich eine

00:10:38.185 --> 00:10:41.285
<v Dirk Breuer>API, über die man diese Infrastruktur fernsteuern kann.

00:10:41.875 --> 00:10:46.835
<v Dirk Breuer>Wir wollen das auf jeden Fall nicht irgendwie mit Clicky-Bunty in so einem Web-Interface machen.

00:10:47.285 --> 00:10:53.305
<v Dirk Breuer>Nicht, weil wir uns dem zu fein sind, sondern weil wir einfach das im Team verteilen

00:10:53.305 --> 00:10:56.035
<v Dirk Breuer>müssen und keine Anleitung schreiben wollen und müssen bitte hier klicken und

00:10:56.035 --> 00:10:59.095
<v Dirk Breuer>dann da klicken und dann ändert sich das Interface, was durchaus vorkommt.

00:11:00.465 --> 00:11:03.385
<v Dirk Breuer>Auch bei AWS kommt das regelmäßig vor, dass sich das Interface ändert,

00:11:03.925 --> 00:11:07.385
<v Dirk Breuer>sondern wir möchten das gerne im Code haben, dieses sogenannte Infrastructure

00:11:07.385 --> 00:11:12.045
<v Dirk Breuer>as Code, damit man es eben versionskontrolliert haben kann. Wir können Codereviews

00:11:12.045 --> 00:11:15.235
<v Dirk Breuer>durchführen und man hat ausführbare Dokumentation.

00:11:15.525 --> 00:11:18.025
<v Dirk Breuer>Das finde ich ist immer ein ganz gutes Bild an der Stelle.

00:11:18.025 --> 00:11:23.545
<v Lucas Dohmen>Genau, genau. Und es bringt uns natürlich auch den Vorteil, also wir haben ein Staging Environment,

00:11:24.385 --> 00:11:29.725
<v Lucas Dohmen>in dem wir Changes halt vorab nochmal in produktionsnahe Umgebung testen können,

00:11:30.565 --> 00:11:33.325
<v Lucas Dohmen>und das wollen wir natürlich so nah an Produktion haben wie möglich.

00:11:33.325 --> 00:11:37.085
<v Lucas Dohmen>Das heißt also, klar, das ist runterskaliert, das sind weniger Server,

00:11:37.085 --> 00:11:40.065
<v Lucas Dohmen>das sind kleinere Server, das wäre ja einfach Geldverschwendung,

00:11:40.725 --> 00:11:44.225
<v Lucas Dohmen>aber es ist an sich das gleiche und deswegen ist für uns dieses Infrastructure

00:11:44.225 --> 00:11:47.745
<v Lucas Dohmen>as Code auch eine der wesentlichen Aspekte, die wir auch nicht missen wollten

00:11:47.745 --> 00:11:50.565
<v Lucas Dohmen>im Vergleich zu einem Hyperscaler wie AWS.

00:11:50.905 --> 00:11:55.215
<v Lucas Dohmen>Also das wollen wir haben. Wir wollen eben nicht alles auf Oldschool,

00:11:55.215 --> 00:11:59.345
<v Lucas Dohmen>einfach so einem Root-Server, wo man alles so von Hand einrichtet und dann muss

00:11:59.345 --> 00:12:01.555
<v Lucas Dohmen>man irgendwie Staging genauso einrichten und wenn man was ändert,

00:12:01.555 --> 00:12:03.365
<v Lucas Dohmen>muss man daran denken, es auf allen Environments zu machen.

00:12:03.655 --> 00:12:07.785
<v Lucas Dohmen>All so was wollen wir natürlich vermeiden und das bringt uns dann glaube ich auch

00:12:07.785 --> 00:12:12.055
<v Lucas Dohmen>direkt schon zum ersten Tool in der Toolbox und das ist dann Terraform. Ja.

00:12:13.595 --> 00:12:15.915
<v Lucas Dohmen>Und als wir den Vortrag gehalten haben, wurden wir auch direkt gefragt,

00:12:15.915 --> 00:12:18.585
<v Lucas Dohmen>warum Terraform und nicht Open Tofu. Können wir gerne gleich nochmal darauf

00:12:18.585 --> 00:12:22.635
<v Lucas Dohmen>eingehen. Aber grundsätzlich, was bietet ein Tool wie Terraform?

00:12:22.865 --> 00:12:25.575
<v Lucas Dohmen>Das bietet genau das, was Dirk sagt. Es nimmt eben diese API,

00:12:25.575 --> 00:12:30.925
<v Lucas Dohmen>die der Provider zur Verfügung stellt und erlaubt uns halt so eine Deklaration zu schreiben.

00:12:30.925 --> 00:12:33.785
<v Lucas Dohmen>Da steht dann halt drin, wir haben hier so einen Server, davon haben wir fünf

00:12:33.785 --> 00:12:38.585
<v Lucas Dohmen>Stück und da ist eine Netzwerkregel dran und da hängt übrigens eine feste IP

00:12:38.585 --> 00:12:39.835
<v Lucas Dohmen>dran und so weiter und so fort.

00:12:39.835 --> 00:12:45.905
<v Lucas Dohmen>All das können wir dort textuell beschreiben, sodass es zum einen für alle sichtbar

00:12:45.905 --> 00:12:48.465
<v Lucas Dohmen>ist, also alle im Team können da einfach reingucken und sehen,

00:12:48.465 --> 00:12:49.435
<v Lucas Dohmen>so sieht Produktion aus.

00:12:49.435 --> 00:12:53.075
<v Lucas Dohmen>Das ist halt keine Dokumentation in dem Sinne, also es ist schon Dokumentation,

00:12:53.075 --> 00:12:55.935
<v Lucas Dohmen>aber es ist halt wahre Dokumentation, weil wenn wir daran was ändern,

00:12:55.935 --> 00:12:58.215
<v Lucas Dohmen>dann ändert sich auch Produktion mit quasi.

00:12:58.215 --> 00:13:02.485
<v Lucas Dohmen>Also natürlich müssen wir das ausführen, aber grundsätzlich ist es eben die

00:13:02.485 --> 00:13:08.565
<v Lucas Dohmen>Beschreibung der Realität und das Tool ist halt aus meiner Sicht mittlerweile

00:13:08.565 --> 00:13:09.485
<v Lucas Dohmen>auch schon gut abgehangen.

00:13:09.485 --> 00:13:12.315
<v Lucas Dohmen>Ich weiß gar nicht, wie lange es Terraform schon gibt, aber eine ganze Weile,

00:13:13.025 --> 00:13:15.925
<v Lucas Dohmen>und funktioniert einfach sehr, sehr gut.

00:13:16.925 --> 00:13:20.305
<v Lucas Dohmen>Und was muss eine Cloud dafür bieten, damit das funktioniert?

00:13:20.985 --> 00:13:25.535
<v Lucas Dohmen>Die muss eben diese APIs bieten, der Dirk gesagt hat. Es muss eine API geben,

00:13:25.535 --> 00:13:29.015
<v Lucas Dohmen>mit der man sagen kann, hey, leg mal eine VM an, hey, löscht mal eine VM.

00:13:29.015 --> 00:13:32.095
<v Lucas Dohmen>All diese Sachen müssen über eine API zur Verfügung stehen und nicht nur über,

00:13:32.865 --> 00:13:34.305
<v Lucas Dohmen>Klicken in einem Web-Interface.

00:13:34.525 --> 00:13:38.445
<v Lucas Dohmen>Und dann muss sich halt jemand hinsetzen und einen sogenannten Provider schreiben.

00:13:38.445 --> 00:13:46.085
<v Lucas Dohmen>Das ist Code, der eben dieser Terraform-Sprache die ganzen Objekte

00:13:46.085 --> 00:13:50.645
<v Lucas Dohmen>zur Verfügung stellt, wie eine VM oder einen Load-Balancer oder was auch immer.

00:13:51.565 --> 00:13:54.525
<v Lucas Dohmen>Und man kann sich vorstellen, bei AWS ist das sehr, sehr umfangreich,

00:13:54.525 --> 00:13:57.015
<v Lucas Dohmen>weil es da eben sehr, sehr viele Services gibt, die man da einfügen kann.

00:13:57.015 --> 00:14:00.085
<v Lucas Dohmen>Und das ist bei Hetzner übersichtlicher. Da gibt es halt einfach nicht so viele

00:14:00.085 --> 00:14:02.875
<v Lucas Dohmen>Services. Da müssen sie auch nicht so viele Sachen schreiben.

00:14:03.455 --> 00:14:09.775
<v Lucas Dohmen>Und genau, wir benutzen eben diesen Provider und der hat bisher uns auch keine

00:14:09.775 --> 00:14:12.805
<v Lucas Dohmen>Probleme gemacht. Ich glaube, wir haben nur eine Sache gefunden, die gefehlt hat.

00:14:13.205 --> 00:14:18.095
<v Lucas Dohmen>Das waren die Storage, das S3 in Anführungsstrichen, was nicht da war.

00:14:18.345 --> 00:14:22.355
<v Lucas Dohmen>Aber sonst ist alles da und hat für uns sehr gut funktioniert, oder?

00:14:23.065 --> 00:14:28.295
<v Dirk Breuer>Ja, auf jeden Fall. Also genau, das S3 war das Einzige, was so im Großen und Ganzen gefehlt hat.

00:14:28.915 --> 00:14:34.615
<v Dirk Breuer>Und ja, das wird halt kontinuierlich auch weiterentwickelt, aber das meiste funktioniert ganz gut.

00:14:36.085 --> 00:14:40.255
<v Dirk Breuer>Was auf jeden Fall so eine Besonderheit ist, wo man vielleicht drüber stolpert,

00:14:41.905 --> 00:14:47.585
<v Dirk Breuer>das ist bei AWS auch so gewesen, die verlangen ja, dass so eine Instanz einen Namen bekommt.

00:14:47.745 --> 00:14:52.015
<v Dirk Breuer>Und eigentlich wollen wir ja gar keinen Namen vergeben, es ist ja wurscht, wie das Ding heißt.

00:14:53.205 --> 00:14:57.105
<v Dirk Breuer>Und die kann man dann zufällig generieren. Und das war auf jeden Fall bei Hetzer

00:14:57.105 --> 00:14:57.475
<v Dirk Breuer>ein bisschen komplexer,

00:14:58.925 --> 00:15:02.465
<v Dirk Breuer>oder ist immer noch etwas umständlicher, den so zufällig zu generieren,

00:15:02.465 --> 00:15:05.175
<v Dirk Breuer>weil wenn man eine neue Instanz hochfährt, dann möchte man vielleicht,

00:15:05.175 --> 00:15:07.795
<v Dirk Breuer>oder das machen wir zumindest, erst die neue Instanz vor oben haben,

00:15:07.795 --> 00:15:08.995
<v Dirk Breuer>bevor man die alte abschaltet.

00:15:09.325 --> 00:15:12.765
<v Dirk Breuer>Einfach um sicher zu gehen, dass alles da ist, bevor man das alte Ding runterfährt,

00:15:13.105 --> 00:15:15.885
<v Dirk Breuer>was dann auch im laufenden Betrieb nämlich ein Update der Server erlaubt.

00:15:16.495 --> 00:15:19.815
<v Dirk Breuer>Und die Namen dürfen sich natürlich nicht duplizieren, also kann ich nicht zweimal

00:15:19.815 --> 00:15:24.135
<v Dirk Breuer>irgendwie eine Worker-Instanz irgendwo haben, sondern muss da immer so etwas

00:15:24.135 --> 00:15:25.295
<v Dirk Breuer>zufälliges hinten dran hängen.

00:15:27.795 --> 00:15:30.585
<v Dirk Breuer>Das ist aber jetzt nicht super spezifisch, das ist nur eine Sache,

00:15:31.055 --> 00:15:33.385
<v Dirk Breuer>über die man vielleicht das erste Mal so stolpert, wenn man das macht.

00:15:33.385 --> 00:15:38.065
<v Lucas Dohmen>Stimmt. Ja, guter Punkt. Genau. Und um das jetzt mal konkreter zu machen,

00:15:38.065 --> 00:15:39.425
<v Lucas Dohmen>was beschreiben wir jetzt da?

00:15:39.945 --> 00:15:45.065
<v Lucas Dohmen>Also wir haben in unserem Terraform-Ding beschreiben wir unsere Web-Knoten.

00:15:45.065 --> 00:15:48.315
<v Lucas Dohmen>Also auf den Web-Knoten kommen wir gleich zu, da läuft diese Rails-Anwendung

00:15:48.315 --> 00:15:51.425
<v Lucas Dohmen>drauf, da läuft auch noch ein bisschen mehr drauf, können wir auch gern gleich noch was zu sagen.

00:15:52.475 --> 00:15:56.365
<v Lucas Dohmen>Dann haben wir einen sogenannten Image Server. Das ist einfach ein Server,

00:15:56.365 --> 00:15:58.605
<v Lucas Dohmen>der liefert die Hausbilder aus.

00:15:59.895 --> 00:16:04.475
<v Lucas Dohmen>Da benutzen wir eine Software, die heißt Image Proxy, also imgproxy,

00:16:04.645 --> 00:16:08.575
<v Lucas Dohmen>die wir jetzt auch schon lange benutzen und mit der wir sehr zufrieden sind.

00:16:08.575 --> 00:16:13.085
<v Lucas Dohmen>Die funktionieren einfach so völlig langweilig. Also wir müssen uns darum nie

00:16:13.085 --> 00:16:16.475
<v Lucas Dohmen>kümmern. Ich glaube, ich weiß gar nicht, ob wir die überhaupt anfassen mussten

00:16:16.475 --> 00:16:18.335
<v Lucas Dohmen>seit einer halben Ewigkeit.

00:16:19.275 --> 00:16:24.525
<v Lucas Dohmen>Und die bietet uns so Funktionalität wie Resize mal das Bild auf 800 mal 600

00:16:24.525 --> 00:16:28.665
<v Lucas Dohmen>oder sowas. Weil wir wollen responsive images haben. Wir haben viele Leute,

00:16:28.665 --> 00:16:32.695
<v Lucas Dohmen>die mobil auf die Seite zugreifen. Also sollen die natürlich auch kleinere Bilder bekommen.

00:16:33.795 --> 00:16:37.285
<v Lucas Dohmen>Das ist quasi gerade mal so das Service von dem, was das bietet.

00:16:37.285 --> 00:16:41.015
<v Lucas Dohmen>Aber das ist so die für uns wichtigste Funktionalität, dass es eben schnell

00:16:41.015 --> 00:16:46.205
<v Lucas Dohmen>Bilder ausliefern kann und eben solche Transformationen wie Resizing oder in

00:16:46.205 --> 00:16:48.435
<v Lucas Dohmen>andere Bildformate umwandeln.

00:16:48.435 --> 00:16:51.635
<v Dirk Breuer>Genau, vor allem die anderen Bildformate. Das ist der spannende Punkt,

00:16:51.635 --> 00:16:53.885
<v Dirk Breuer>warum wir das dann am Ende genutzt haben.

00:16:54.265 --> 00:16:57.095
<v Dirk Breuer>Weil es nämlich erkennt, okay, kann der Client, der das anfragt,

00:16:57.095 --> 00:17:00.255
<v Dirk Breuer>webP oder will er lieber AVIF? Und der prüft auch, ist das AVIF kleiner,

00:17:00.255 --> 00:17:03.505
<v Dirk Breuer>ist das webP kleiner oder nehme ich einfach das JPEG oder was auch immer davor liegt.

00:17:04.375 --> 00:17:08.535
<v Dirk Breuer>Genau, weil das eben Dinge sind, die, wenn man sie einkauft,

00:17:08.535 --> 00:17:10.085
<v Dirk Breuer>sehr schnell sehr teuer werden.

00:17:10.415 --> 00:17:16.095
<v Dirk Breuer>Also wenn man das bei Cloudflare macht oder Cloudinary oder es gibt ja genügend

00:17:16.515 --> 00:17:19.605
<v Dirk Breuer>Dienste, die das anbieten, dann wird das relativ schnell teuer.

00:17:19.985 --> 00:17:24.435
<v Dirk Breuer>Und selbst wenn man nur das Resizing selber macht und dann das Erkennen,

00:17:24.435 --> 00:17:27.995
<v Dirk Breuer>okay, will ich WebP oder AVIF ausliefern, dann zum Beispiel von Cloudflare

00:17:27.995 --> 00:17:31.415
<v Dirk Breuer>oder seinem CDN machen lässt, ja, dann hat man erst noch einen extra Schritt.

00:17:31.895 --> 00:17:35.355
<v Dirk Breuer>Das ist aus unserer Erfahrung einfach nicht auch sehr robust gewesen.

00:17:35.355 --> 00:17:38.505
<v Dirk Breuer>Dann wurde doch das Falsche ausgewählt. Dann hat sich der Lighthouse-Report beschwert.

00:17:38.925 --> 00:17:41.615
<v Dirk Breuer>Und deswegen haben wir ja vor einiger Zeit gesagt, okay, wir nehmen einfach

00:17:41.615 --> 00:17:45.985
<v Dirk Breuer>diese imgproxy. Das funktioniert einwandfrei. Das ist ein Docker... das ist in Go geschrieben,

00:17:45.985 --> 00:17:49.155
<v Dirk Breuer>aber es läuft als Docker-Container irgendwo und macht einfach,

00:17:49.155 --> 00:17:50.995
<v Dirk Breuer>was es soll, ohne zu murren.

00:17:51.765 --> 00:17:55.585
<v Lucas Dohmen>Genau, genau. Das ist eine gute Zusammenfassung. Genau.

00:17:56.695 --> 00:18:00.875
<v Lucas Dohmen>Und daneben haben wir dann noch Worker-Nodes. Dirk hat ja eben schon ausgeführt.

00:18:01.195 --> 00:18:04.965
<v Lucas Dohmen>Die sind tatsächlich bei uns, brauchen die mehr CPU als die Web-Worker,

00:18:04.965 --> 00:18:09.375
<v Lucas Dohmen>weil wir halt so viel importieren und verwalten müssen im Hintergrund.

00:18:09.375 --> 00:18:13.415
<v Lucas Dohmen>Und auf der technischen Ebene ist das auch einfach die Rails-Anwendung,

00:18:13.415 --> 00:18:14.655
<v Lucas Dohmen>die wir so geschrieben haben.

00:18:15.275 --> 00:18:19.465
<v Lucas Dohmen>In Rails ist es so, das ist ja auch in anderen Programmsprachen oder in anderen

00:18:19.465 --> 00:18:24.375
<v Lucas Dohmen>Frameworks anders, dass man eben solche Worker im Code mit definiert.

00:18:24.375 --> 00:18:27.405
<v Lucas Dohmen>Und dann kann man halt einfach eine weitere Instanz davon hochfahren und sagen,

00:18:27.405 --> 00:18:33.535
<v Lucas Dohmen>hey, du lauschst übrigens auch auf Jobs hier und arbeitet die halt im Hintergrund ab.

00:18:33.535 --> 00:18:38.915
<v Lucas Dohmen>Das ist das, was die Worker für uns tun. Jetzt habe ich Web Worker gesagt,

00:18:38.915 --> 00:18:41.375
<v Lucas Dohmen>das wäre ja völlig verwirrend. Genau, die Worker für uns tun.

00:18:42.515 --> 00:18:46.635
<v Lucas Dohmen>Auch nochmal auf der technischen Ebene ist es eben so, dass wir dabei Postgres

00:18:46.635 --> 00:18:50.475
<v Lucas Dohmen>als den, in Anführungsstrichen, Message Bus

00:18:50.475 --> 00:18:54.325
<v Lucas Dohmen>benutzen, also der die Nachrichten weiterleitet von der Anwendung an die

00:18:54.325 --> 00:18:59.405
<v Lucas Dohmen>Worker, was auch für uns sehr solide funktioniert. Wir hatten früher da Redis

00:18:59.405 --> 00:19:04.045
<v Lucas Dohmen>für im Einsatz und jetzt machen wir das mit Postgres und das funktioniert sehr, sehr gut.

00:19:04.585 --> 00:19:07.895
<v Lucas Dohmen>Können wir auch gerne noch ein paar Sachen zu den Shownotes werfen,

00:19:07.895 --> 00:19:13.085
<v Lucas Dohmen>wer sich dafür interessiert, weil früher, also kurzer Seitennotiz.

00:19:14.405 --> 00:19:16.345
<v Lucas Dohmen>Hatte sich das so zum Anti-Pattern entwickelt.

00:19:16.345 --> 00:19:19.785
<v Lucas Dohmen>Also viele haben gesagt, mach das lieber nicht, das ist zu langsam, das skaliert nicht.

00:19:20.585 --> 00:19:23.115
<v Lucas Dohmen>Aber es gibt halt mittlerweile doch viele Sachen in Postgres,

00:19:23.115 --> 00:19:27.965
<v Lucas Dohmen>die das wesentlich verbessert haben, dass das jetzt wunderbar funktioniert.

00:19:27.965 --> 00:19:33.445
<v Lucas Dohmen>Also wo das halt früher relativ brute force war, klappt das jetzt halt einfach

00:19:33.625 --> 00:19:36.065
<v Lucas Dohmen>total unaufgeregt, würde ich jetzt mal sagen. Weil ich glaube,

00:19:36.315 --> 00:19:40.725
<v Lucas Dohmen>auch damit hatten wir, seitdem wir live gegangen sind, eigentlich keine Probleme. Nicht nur eigentlich.

00:19:40.975 --> 00:19:46.245
<v Dirk Breuer>Das hat keinerlei Probleme gemacht. Wobei man, also wir verarbeiten sehr viel

00:19:46.245 --> 00:19:48.795
<v Dirk Breuer>im Hintergrund, aber nicht an Menge.

00:19:48.795 --> 00:19:53.515
<v Dirk Breuer>Also für unsere Verhältnisse sind das schon ein paar 10.000 Jobs,

00:19:53.515 --> 00:19:56.505
<v Dirk Breuer>die da jeden Tag laufen. Aber das sind jetzt nicht Millionen Jobs pro Stunde,

00:19:56.505 --> 00:20:00.595
<v Dirk Breuer>die da durchgeschoben werden. Also da muss man dann vielleicht noch als Hinweis

00:20:00.595 --> 00:20:02.645
<v Dirk Breuer>schon nochmal gucken, passt das dann immer noch?

00:20:02.995 --> 00:20:07.315
<v Dirk Breuer>Wenn ich wirklich so sehr hohe Anforderungen an niedrige Latenz habe,

00:20:07.315 --> 00:20:11.555
<v Dirk Breuer>ob das dann mit Postgres immer noch so hinhaut, das muss man einfach einmal durchmessen am besten.

00:20:12.025 --> 00:20:14.545
<v Dirk Breuer>Das muss man auch mit Redis durchmessen, ob das alles passt.

00:20:15.835 --> 00:20:20.065
<v Dirk Breuer>Da ist man dann einfach in einem anderen Scope. Aber das funktioniert super

00:20:20.065 --> 00:20:25.145
<v Dirk Breuer>für uns. Wir haben zum Beispiel aber ja auch den Cache in die Postgres verlagert.

00:20:25.375 --> 00:20:27.495
<v Dirk Breuer>Das geht auch mittlerweile recht gut.

00:20:28.465 --> 00:20:31.595
<v Dirk Breuer>Das war auch vorher bei Redis. Das war einfach bei AWS sehr einfach.

00:20:31.595 --> 00:20:34.725
<v Dirk Breuer>Man klickt sich einfach eine Redis-Instanz oder diese Elastic Cache-Instanzen,

00:20:34.725 --> 00:20:38.605
<v Dirk Breuer>wie sie dann da heißen, und kriegt das einfach fertig hingestellt.

00:20:38.945 --> 00:20:43.145
<v Dirk Breuer>Und der Grund war ja, wir wollten möglichst wenig Abhängigkeiten haben.

00:20:43.145 --> 00:20:45.505
<v Dirk Breuer>Wir hätten dann Redis selber betreiben müssen. Das wollten wir nicht.

00:20:47.405 --> 00:20:50.705
<v Dirk Breuer>Da haben wir allerdings Probleme gehabt mit dem Cache. Das ist nicht so problemlos

00:20:50.705 --> 00:20:56.495
<v Dirk Breuer>gelaufen, weil die Implementierung für den Cache in Postgres bei Rails ist der

00:20:56.495 --> 00:20:59.365
<v Dirk Breuer>Meinung, man muss die Tabellen trotzdem loggen,

00:21:00.905 --> 00:21:04.735
<v Dirk Breuer>was für ein Cache herzlich irrelevant ist, ob der geloggt ist oder nicht.

00:21:04.735 --> 00:21:07.495
<v Dirk Breuer>Und das hat den Durchsatz deutlich verbessert.

00:21:08.115 --> 00:21:14.875
<v Lucas Dohmen>Ja, genau. Aber auch da, also es war wirklich, es war sehr langsam geworden,

00:21:14.875 --> 00:21:16.355
<v Lucas Dohmen>Aber es ist nicht völlig kaputt gegangen.

00:21:16.355 --> 00:21:20.455
<v Lucas Dohmen>Aber es war halt wirklich, ja, also wir waren überrascht darüber,

00:21:20.455 --> 00:21:23.075
<v Lucas Dohmen>dass wir uns das darum selber kümmern mussten, ehrlich gesagt,

00:21:23.075 --> 00:21:26.825
<v Lucas Dohmen>weil wir gedacht haben, das wird ja wohl standardmäßig in dieser Implementierung

00:21:26.825 --> 00:21:28.395
<v Lucas Dohmen>so sein. Wir haben da gar nicht drüber nachgedacht.

00:21:28.775 --> 00:21:31.725
<v Lucas Dohmen>Aber so ist das halt manchmal mit diesen Details, dass man dann merkt,

00:21:31.725 --> 00:21:34.505
<v Lucas Dohmen>okay, vielleicht hätten wir das doch ganz genau anschauen müssen.

00:21:35.025 --> 00:21:39.375
<v Lucas Dohmen>Genau, aber so klappt das auch wieder unaufgeregt, würde ich es einfach nennen.

00:21:39.375 --> 00:21:44.865
<v Lucas Dohmen>Also jetzt cachen wir halt in der Datenbank, die halt einfach nicht persistiert im Prinzip.

00:21:45.665 --> 00:21:47.365
<v Lucas Dohmen>Das funktioniert sehr, sehr gut.

00:21:48.175 --> 00:21:51.455
<v Lucas Dohmen>Genau, das heißt also, was haben wir jetzt bisher beschrieben an VMs?

00:21:51.465 --> 00:21:54.375
<v Lucas Dohmen>Wir haben Webnodes, wir haben Worker-Nodes, wir haben diese Image-Nodes.

00:21:54.735 --> 00:21:58.425
<v Lucas Dohmen>Dann haben wir Datenbank-Knoten.

00:21:59.975 --> 00:22:04.555
<v Lucas Dohmen>Da haben wir eine sehr bewusste Entscheidung getroffen, wirklich nur eine zu haben.

00:22:05.465 --> 00:22:08.865
<v Lucas Dohmen>Aber da die Datenbank so ein spezielles Thema ist, haben wir überlegt,

00:22:09.015 --> 00:22:11.625
<v Lucas Dohmen>da reden wir am Ende nochmal drüber. Wir schieben jetzt die Datenbank mal zur

00:22:11.625 --> 00:22:16.115
<v Lucas Dohmen>Seite. Wir sagen einfach, da ist ein Node, da läuft eine Datenbank drauf. Der Rest kommt später.

00:22:17.295 --> 00:22:21.135
<v Lucas Dohmen>Genau. Und dann haben wir noch einen ganz kleinen Server, den Proxy.

00:22:21.755 --> 00:22:25.515
<v Lucas Dohmen>Den brauchen wir für manche der Partner. Wenn wir von denen Daten importieren,

00:22:25.515 --> 00:22:29.195
<v Lucas Dohmen>dann erwarten die eine feste IP aus Gründen.

00:22:30.055 --> 00:22:34.395
<v Lucas Dohmen>Und um dem entgegenzukommen, ist das halt ein einfacher Proxy.

00:22:34.895 --> 00:22:38.265
<v Lucas Dohmen>Alle Requests, die an diese Partner gehen, gehen einmal durch diesen Proxy durch.

00:22:38.995 --> 00:22:43.575
<v Lucas Dohmen>Ist nicht so schlimm, funktioniert. Auch wieder sowas, was uns lange nicht mehr

00:22:43.575 --> 00:22:46.035
<v Lucas Dohmen>überhaupt beschäftigt hat. Also wir gucken da, glaube ich, gar nicht mehr so

00:22:46.035 --> 00:22:47.625
<v Lucas Dohmen>richtig drauf. Der läuft halt einfach so.

00:22:47.625 --> 00:22:49.405
<v Dirk Breuer>Ja, der läuft einfach vor sich hin.

00:22:50.185 --> 00:22:54.255
<v Lucas Dohmen>Genau. Und das ist auch der Knoten, dem wir eine feste IP zugewiesen haben.

00:22:54.255 --> 00:22:58.765
<v Lucas Dohmen>Und der Rest hat keine festen IPs. Also der, genau.

00:23:00.715 --> 00:23:05.185
<v Lucas Dohmen>Ja, dann würde ich sagen, lass uns noch mal kurz über den Loadbalancer sprechen.

00:23:05.185 --> 00:23:07.715
<v Lucas Dohmen>Das ist ja so ein Leidenschaftsthema von dir, Dirk, das überlasse ich mal dir.

00:23:08.465 --> 00:23:15.115
<v Dirk Breuer>Also den Loadbalancer, den nutzen wir von Hetzner und das hat den,

00:23:16.085 --> 00:23:20.525
<v Dirk Breuer>also wir hätten den natürlich auch selber als Node zur Verfügung stellen können. Das ist kein Problem.

00:23:21.505 --> 00:23:26.105
<v Dirk Breuer>Was ich sehr sympathisch daran finde, das auszulagern auf den Dienstleister,

00:23:26.105 --> 00:23:28.695
<v Dirk Breuer>das war bei AWS auch so, das geht auch bei vielen anderen so,

00:23:28.995 --> 00:23:30.885
<v Dirk Breuer>dass der nämlich dann TLS-Terminierung macht.

00:23:30.885 --> 00:23:37.195
<v Dirk Breuer>Ich muss also keine Secrets auf meine VMs spielen, sondern lade die quasi in

00:23:37.195 --> 00:23:39.485
<v Dirk Breuer>die Cloud da hoch, konfiguriere das da drüber.

00:23:41.205 --> 00:23:44.185
<v Dirk Breuer>Manchmal erlauben die dir dann ja auch, dass die da automatisch gemanagt werden

00:23:44.185 --> 00:23:45.515
<v Dirk Breuer>und verlängert werden und all so ein Kram.

00:23:46.645 --> 00:23:49.705
<v Dirk Breuer>Das benutzen wir also da. Das ist sehr angenehm. Und die regeln dann,

00:23:49.705 --> 00:23:54.455
<v Dirk Breuer>okay, da sind jetzt nur von den drei Nodes, die eigentlich antworten sollten,

00:23:54.455 --> 00:23:57.165
<v Dirk Breuer>sind nur zwei gesund, also wird der andere rausgenommen.

00:23:58.065 --> 00:24:02.305
<v Dirk Breuer>Ja, wir haben am Ende auch total unaufgeregt. Und der Hauptgrund ist im Grunde

00:24:02.305 --> 00:24:08.345
<v Dirk Breuer>die TLS-Terminierung und dass der Endpunkt eben auf deren Hardware läuft und

00:24:08.345 --> 00:24:12.425
<v Dirk Breuer>nicht bei uns, wenn wir eine VM dann da durchläuft. Und wir uns dann noch darum kümmern müssten.

00:24:12.785 --> 00:24:17.225
<v Dirk Breuer>Das spielt auch in das Firewall-Thema dann rein, das wir auch von Hetzner benutzen.

00:24:17.225 --> 00:24:23.025
<v Dirk Breuer>Also die Kisten sind alle nicht von außen erreichbar, außer über SSH dann entsprechend,

00:24:23.025 --> 00:24:26.245
<v Dirk Breuer>um irgendwie drauf deployen zu können und alles anderes eben gesperrt.

00:24:26.715 --> 00:24:30.765
<v Dirk Breuer>Nur der Load Balancer kann eben auf den HTTP-Endpunkt zugreifen in den einzelnen

00:24:30.765 --> 00:24:32.845
<v Dirk Breuer>Kisten. Und der Worker zum Beispiel, der hat überhaupt gar keinen,

00:24:33.175 --> 00:24:35.555
<v Dirk Breuer>der exposed gar keinen HTTP-Point an der Stelle.

00:24:35.555 --> 00:24:38.855
<v Lucas Dohmen>Ja, genau. Ja, das ist auch ein wichtiger Punkt.

00:24:38.855 --> 00:24:42.375
<v Lucas Dohmen>Also die Netzwerkregeln sind auch extrem übersichtlich.

00:24:42.375 --> 00:24:45.605
<v Lucas Dohmen>Also es ist jetzt kein Dschungel von tausend von Regeln, weil es ist sehr,

00:24:45.605 --> 00:24:48.255
<v Lucas Dohmen>sehr klar. Also ich glaube, das kann sich auch jeder und jede,

00:24:48.255 --> 00:24:52.305
<v Lucas Dohmen>die zuhört, denken, wie diese Regeln ungefähr aussehen, wer welcher Knoten auf

00:24:52.305 --> 00:24:53.975
<v Lucas Dohmen>welchen anderen Knoten zugreifen kann.

00:24:55.145 --> 00:24:58.145
<v Lucas Dohmen>Also ja, auch wieder einfach gehalten.

00:24:59.345 --> 00:25:01.785
<v Lucas Dohmen>Aber wie machen wir das denn mit dem Autoscaling, Dirk?

00:25:03.305 --> 00:25:08.665
<v Dirk Breuer>Gar nicht. Also dazu musst du vielleicht kurz einmal umreißen,

00:25:08.985 --> 00:25:11.185
<v Dirk Breuer>was Autoscaling bei so einem Hyperscaler bedeutet.

00:25:11.885 --> 00:25:14.785
<v Dirk Breuer>Das ist ja der Name Scaler im Hyperscaler mit drin.

00:25:16.855 --> 00:25:20.535
<v Dirk Breuer>In meiner Wahrnehmung war das damals so eines der coolen Features von AWS.

00:25:20.535 --> 00:25:24.535
<v Dirk Breuer>Du hast einen Autoscaler und der skaliert automatisch, wenn du ganz viel Zeug brauchst.

00:25:24.995 --> 00:25:27.085
<v Dirk Breuer>Und dann denkt man so, boah, wie cool, dann kann ich dann nachts,

00:25:27.085 --> 00:25:30.005
<v Dirk Breuer>da habe ich nur einen Server und dann tagsüber, wenn es so richtig brummt,

00:25:30.005 --> 00:25:31.915
<v Dirk Breuer>dann habe ich irgendwie zehn Server und dann stellt man fest,

00:25:31.915 --> 00:25:33.665
<v Dirk Breuer>man braucht überhaupt immer nur einen.

00:25:35.985 --> 00:25:39.945
<v Dirk Breuer>Also vor allen Dingen mit zunehmender Leistungsfähigkeit der einzelnen Maschinen.

00:25:40.825 --> 00:25:45.055
<v Dirk Breuer>Und dazu, ich hole jetzt einmal ein bisschen länger aus.

00:25:45.055 --> 00:25:48.855
<v Dirk Breuer>Irgendwann sind ja dann, also man kann ja nicht beliebig kleine Maschinen nehmen,

00:25:48.855 --> 00:25:50.545
<v Dirk Breuer>weil an einer beliebig kleinen Maschine,

00:25:51.135 --> 00:25:54.055
<v Dirk Breuer>die hat zwar wenig CPU, die hat aber auch wenig I/O, die hat wenig RAM,

00:25:54.055 --> 00:25:58.405
<v Dirk Breuer>die hat wenig alles, also die ist sowieso nicht nutzbar für irgendwas,

00:25:58.405 --> 00:26:00.945
<v Dirk Breuer>nicht Triviales oder Naives.

00:26:02.265 --> 00:26:06.255
<v Dirk Breuer>Daher, man muss sowieso eine Grundgröße nehmen, damit man irgendwie einen garantierten

00:26:06.255 --> 00:26:11.805
<v Dirk Breuer>I/O-Durchsatz bekommt bei AWS, damit man irgendwie garantiert RAM bekommt und

00:26:12.225 --> 00:26:16.305
<v Dirk Breuer>auch garantiert nicht nur I/O-Netzwerk, sondern I/O auch an die Platte,

00:26:16.305 --> 00:26:17.165
<v Dirk Breuer>die da angeschlossen ist.

00:26:17.165 --> 00:26:21.715
<v Dirk Breuer>Also all diese Dinge muss man sowieso ein Mindestmaß an Instanz nehmen.

00:26:22.015 --> 00:26:25.225
<v Dirk Breuer>Und die sind in der Regel sowieso groß genug, um so eine Standard-Webanwendung zu machen.

00:26:25.675 --> 00:26:28.875
<v Dirk Breuer>Wie gesagt, diese Worker, die laufen dann eben mehr.

00:26:29.845 --> 00:26:32.345
<v Dirk Breuer>Und wenn man jetzt sich vorstellt, okay, ich habe eine Anwendung,

00:26:32.345 --> 00:26:35.565
<v Dirk Breuer>keine Ahnung, da weiß ich ganz genau, wann ich diese Jobs mache,

00:26:35.565 --> 00:26:38.665
<v Dirk Breuer>dann kann ich das vielleicht hoch und runter skalieren. Aber bei Fejo ist.

00:26:40.245 --> 00:26:42.105
<v Dirk Breuer>Rund um die Uhr werden da Dinge ausgeführt.

00:26:42.925 --> 00:26:48.205
<v Dirk Breuer>So ein bisschen im Tagesverlauf so geshifted, was wichtiger ist oder was weniger wichtig ist.

00:26:49.045 --> 00:26:51.975
<v Dirk Breuer>Aber im Grunde läuft ja die ganze Zeit, was auch damals wenig Sinn ist, das zu machen.

00:26:52.985 --> 00:26:56.105
<v Dirk Breuer>Aber, angenommen, wir wollen das gerne haben mit dem Autoscaler,

00:26:56.105 --> 00:26:58.145
<v Dirk Breuer>ist das halt cool, weil der Autoscaler sagt halt, pass mal auf,

00:26:58.145 --> 00:27:03.105
<v Dirk Breuer>hier ist so eine Launch-Configuration, heißt das bei AWS, und die beschreibt

00:27:03.105 --> 00:27:04.245
<v Dirk Breuer>quasi, was da laufen soll.

00:27:04.815 --> 00:27:08.255
<v Dirk Breuer>Und dann sagt man dem Autoscaler, pass mal auf, ich hätte davon gerne fünf Stück.

00:27:08.995 --> 00:27:10.855
<v Dirk Breuer>Sorge einfach dafür, dass immer fünf Kisten laufen.

00:27:11.655 --> 00:27:13.935
<v Dirk Breuer>Und wenn es irgendwie, dann kann man dann so Metriken einstellen,

00:27:13.935 --> 00:27:16.525
<v Dirk Breuer>wenn dann die Last hochgeht, dann fährst du bitte noch weitere hoch.

00:27:16.525 --> 00:27:20.365
<v Dirk Breuer>Der hat ja dann diese Konfiguration da liegen. Und dann kann er einfach neue hochfahren.

00:27:21.975 --> 00:27:26.675
<v Dirk Breuer>Und das sorgt zum einen dafür, dass so Lastspitzen automatisch abgefangen werden, theoretisch.

00:27:27.615 --> 00:27:32.655
<v Dirk Breuer>Das ist immer so in der Theorie total einfach, aber das bedeutet,

00:27:32.655 --> 00:27:34.235
<v Dirk Breuer>ihr müsst euch ja auch dann im Klaren sein,

00:27:35.095 --> 00:27:39.165
<v Dirk Breuer>wenn ich jetzt 10 mehr Webnodes habe, also ich habe 5 und ich verdoppel das

00:27:39.165 --> 00:27:43.855
<v Dirk Breuer>auf 10 und meine Datenbank ist aber gar nicht für die Menge an Connections ausgelegt,

00:27:44.265 --> 00:27:45.195
<v Dirk Breuer>dann bringt das ja nichts.

00:27:45.195 --> 00:27:47.675
<v Dirk Breuer>Also dann muss ich vielleicht auch das auch mit also ganz so einfach ist das

00:27:47.675 --> 00:27:50.485
<v Dirk Breuer>nicht, wie man sich das vielleicht vorstellt. Aber was der Autoscaler halt

00:27:50.485 --> 00:27:53.315
<v Dirk Breuer>macht, ist, wenn eine von diesen Nodes stirbt, warum auch immer,

00:27:54.135 --> 00:27:57.235
<v Dirk Breuer>und in der Cloud können Dinge auch einfach mal sterben, weil die Hardware unten

00:27:57.235 --> 00:27:58.645
<v Dirk Breuer>drunter ist kaputt gegangen oder.

00:28:00.875 --> 00:28:03.495
<v Dirk Breuer>Beliebige Gründe sorgen dafür, dass diese Kisten einfach auch ausgehen.

00:28:03.495 --> 00:28:05.855
<v Dirk Breuer>Und das muss man schon mit rechnen in der Cloud.

00:28:06.605 --> 00:28:10.495
<v Dirk Breuer>Und noch stärker als wenn man irgendwie so einen dedizierten Server irgendwo laufen hat.

00:28:11.045 --> 00:28:14.165
<v Dirk Breuer>Dann geht die aus und der Autoscaler sagt, ah, ich soll aber doch fünf laufen

00:28:14.165 --> 00:28:16.155
<v Dirk Breuer>haben. Jetzt sind nur noch drei da, weil zwei gestorben sind.

00:28:16.155 --> 00:28:17.345
<v Dirk Breuer>Und dann fährt er halt zwei neue hoch.

00:28:18.295 --> 00:28:22.365
<v Dirk Breuer>Und das war auch der Grund, warum wir das bei AWS hatten, damit einfach konstant

00:28:22.365 --> 00:28:26.445
<v Dirk Breuer>was läuft, weil bei AWS sind die tatsächlich oft ausgegangen.

00:28:26.765 --> 00:28:30.945
<v Dirk Breuer>Oft jetzt relativ, jetzt nicht jeden Tag irgendwie, aber im Monat sind da mehrfach

00:28:30.945 --> 00:28:34.505
<v Dirk Breuer>die Kisten einfach weggebrochen und dann wird da eine neue gestartet.

00:28:35.855 --> 00:28:41.835
<v Dirk Breuer>Gleichzeitig erlaubt dieser Autoscaler unabhängig, wir hatten ja eben gesagt,

00:28:41.835 --> 00:28:45.235
<v Dirk Breuer>in Terraform will man erst die neue hochfahren, um die andere runterzufahren.

00:28:45.235 --> 00:28:49.795
<v Dirk Breuer>Und der Autoscaler erledigt das quasi auf dieser Ebene auch.

00:28:50.805 --> 00:28:54.225
<v Dirk Breuer>Ich kann halt komplett die Server austauschen, irgendwie neu provisionieren,

00:28:54.225 --> 00:28:56.645
<v Dirk Breuer>neue Updates, neue Instanzen nutzen, was auch immer.

00:28:57.655 --> 00:29:02.795
<v Dirk Breuer>Und der Autoscaler sorgt dafür, dass erst die neue Launch-Konfiguration vollständig,

00:29:03.415 --> 00:29:07.265
<v Dirk Breuer>heile da ist, bevor er den Load-Balance automatisch umbiegt.

00:29:08.615 --> 00:29:12.035
<v Dirk Breuer>Das war da auch sehr praktisch. Und Autoscaler gibt es bei Hetzner nicht.

00:29:12.595 --> 00:29:15.305
<v Dirk Breuer>Das heißt, wenn uns eine Instanzen wegbricht, dann ist die weg.

00:29:15.515 --> 00:29:19.605
<v Dirk Breuer>Und wir müssen die selber wieder hochfahren. Also da gibt es niemanden, der das für uns tut.

00:29:20.575 --> 00:29:24.625
<v Dirk Breuer>Bisher sind uns keine nennenswert weggebrochen. Die sind trotzdem redundant

00:29:24.625 --> 00:29:25.575
<v Dirk Breuer>natürlich, die Webnodes.

00:29:26.155 --> 00:29:28.725
<v Dirk Breuer>Damit, wenn jetzt eine wegbricht, dann geht das Alerting an,

00:29:28.725 --> 00:29:33.905
<v Dirk Breuer>wir können eine hochfahren, die Anwendung läuft weiter und durch die geringeren

00:29:33.905 --> 00:29:38.195
<v Dirk Breuer>Kosten, die man bei so einer Simple Cloud hat, sind die Kisten alle auch überprovisioniert.

00:29:38.735 --> 00:29:41.975
<v Dirk Breuer>Sowieso genügend Headroom für irgendwelche Lastspitzen.

00:29:42.935 --> 00:29:47.565
<v Dirk Breuer>Daher ist das verkraftbar, sage ich mal, dass wir keinen Autoscaler haben und

00:29:47.565 --> 00:29:51.195
<v Dirk Breuer>wir haben das auch dann nicht irgendwie mit dem Kubernetes oder was ähnlichem

00:29:51.195 --> 00:29:57.315
<v Dirk Breuer>selber implementiert so ein Mechanismus, der das so autoheilend da durchgeht.

00:29:58.095 --> 00:30:01.155
<v Lucas Dohmen>Genau und ich glaube, man muss sich auch einfach nochmal klar machen,

00:30:01.155 --> 00:30:05.925
<v Lucas Dohmen>wie viel mittlerweile so eine einzelne Kiste an Kram machen kann.

00:30:05.925 --> 00:30:10.655
<v Lucas Dohmen>Also die sind einfach sehr, sehr schnell. So eine große Maschine von Hetzner, die kann echt viel.

00:30:11.015 --> 00:30:14.805
<v Lucas Dohmen>Da braucht man jetzt auch nicht hunderte von Instanzen für eine normale Web-Anwendung.

00:30:14.805 --> 00:30:19.745
<v Lucas Dohmen>Also ich glaube, da haben viele auch irgendwie so ein bisschen die Verbindung

00:30:19.745 --> 00:30:21.855
<v Lucas Dohmen>zu verloren, wie viel so eine Maschine kann.

00:30:22.175 --> 00:30:26.255
<v Lucas Dohmen>Gerade wenn man halt auch noch ein CDN davor schraubt, das viel von dem ganzen

00:30:26.255 --> 00:30:31.885
<v Lucas Dohmen>Kleinkram einem ja schon abnimmt, dann kommt man damit echt gut zurecht.

00:30:32.375 --> 00:30:36.905
<v Dirk Breuer>Ja, also an der Stelle nochmal der Hinweis, also der einzige Grund ist,

00:30:36.905 --> 00:30:41.965
<v Dirk Breuer>warum man eine dickere Maschine nehmen möchte, als man so rein CPU-technisch baut, ist Netzwerk.

00:30:42.505 --> 00:30:45.805
<v Dirk Breuer>Weil das sind ja virtualisierte Kisten und die müssen gucken,

00:30:45.805 --> 00:30:47.695
<v Dirk Breuer>dass sie irgendwie das aufteilen.

00:30:48.285 --> 00:30:54.595
<v Dirk Breuer>Und das war schon bei AWS nicht so ganz, also kriegst du das ohne weiteres gut

00:30:54.595 --> 00:30:59.095
<v Dirk Breuer>gestaffelt. Also du kannst nicht für die gleiche CPU quasi viel mehr Netzwerk einkaufen.

00:31:00.245 --> 00:31:02.345
<v Dirk Breuer>Weil das total unpraktisch ist natürlich für die zu schneiden,

00:31:03.325 --> 00:31:06.575
<v Dirk Breuer>für die Anbieter. Deswegen, wenn du mehr Netzwerk willst, dann brauchst du mehr CPU.

00:31:06.975 --> 00:31:11.185
<v Dirk Breuer>Und für die Webnodes ist das jetzt meistens nicht so ein Riesenproblem.

00:31:11.665 --> 00:31:15.355
<v Dirk Breuer>Aber wenn die Datenbank irgendwo drauf läuft, die möchte vielleicht möglichst

00:31:15.355 --> 00:31:18.245
<v Dirk Breuer>viel Netzwerk haben, weil die mit mehreren Nodes reden möchte.

00:31:18.585 --> 00:31:21.065
<v Dirk Breuer>Und das ist auf jeden Fall bei uns sowas gewesen.

00:31:21.465 --> 00:31:24.735
<v Dirk Breuer>Deswegen haben wir quasi die größte Maschine für die Datenbank genommen,

00:31:24.735 --> 00:31:27.525
<v Dirk Breuer>einfach um die größte Netzwerkkapazität zu bekommen.

00:31:28.345 --> 00:31:29.295
<v Lucas Dohmen>Ja, sehr guter Punkt.

00:31:30.855 --> 00:31:34.365
<v Lucas Dohmen>Und jetzt, um das mal so ein bisschen einzuschätzen, über was reden wir da?

00:31:34.885 --> 00:31:39.345
<v Lucas Dohmen>Das, was jetzt da in Terraform geschrieben haben, das sind 650 Zeilen Code.

00:31:39.905 --> 00:31:43.465
<v Lucas Dohmen>Und interessant dabei, das habe ich extra vorher noch mal kurz nachgeschaut.

00:31:44.725 --> 00:31:47.955
<v Lucas Dohmen>Der letzte Edit von diesen Files ist vor fünf Monaten gewesen.

00:31:47.955 --> 00:31:52.155
<v Lucas Dohmen>Das heißt also, das ist sehr stabil, das hat einen sehr geringen Churn.

00:31:52.155 --> 00:31:55.325
<v Lucas Dohmen>Wir sind nicht da die ganze Zeit am rumoperieren und ändern da irgendwelche Dinge dran.

00:31:56.285 --> 00:31:59.225
<v Lucas Dohmen>Diese grundlegenden Sachen sind seit fünf Monaten gleich.

00:31:59.785 --> 00:32:03.905
<v Lucas Dohmen>Und ich erwarte auch nicht, dass da in nächster Zeit irgendeine größere Änderung

00:32:03.905 --> 00:32:07.805
<v Lucas Dohmen>dran passiert. Das ist halt einfach quasi in Anführungsstrichen fertig.

00:32:07.805 --> 00:32:11.285
<v Lucas Dohmen>Was ist schon fertig, aber kann man so ein bisschen als fertig betrachten.

00:32:11.935 --> 00:32:16.315
<v Lucas Dohmen>Genau, vielleicht noch kurz zum Secret Management, weil das auch manchmal gefragt wird.

00:32:17.225 --> 00:32:22.255
<v Lucas Dohmen>Wir benutzen dabei hauptsächlich ein Feature von Rails, das heißt Rails Credentials.

00:32:22.255 --> 00:32:26.515
<v Lucas Dohmen>Da kannst du verschlüsselt Dinge in der Anwendung ablegen und dann brauchst

00:32:26.515 --> 00:32:28.685
<v Lucas Dohmen>du halt einen Key, mit dem du das aufmachen kannst.

00:32:29.805 --> 00:32:33.885
<v Lucas Dohmen>Und das heißt auch, man kann quasi eine neue Version der App deployen,

00:32:33.885 --> 00:32:37.305
<v Lucas Dohmen>weil, sagen wir jetzt mal, wir haben einen neuen Mail-Provider oder sowas.

00:32:37.305 --> 00:32:39.625
<v Lucas Dohmen>Da muss man natürlich auch anderen Code anpassen.

00:32:39.885 --> 00:32:43.205
<v Lucas Dohmen>Dann kann man diese Secrets quasi gemeinsam mit dem Code-Change ausspielen,

00:32:43.205 --> 00:32:44.275
<v Lucas Dohmen>was sehr, sehr praktisch ist.

00:32:44.275 --> 00:32:48.665
<v Lucas Dohmen>Man muss nicht irgendwie so ein Phasing machen, wo man erst die neuen Credentials

00:32:48.665 --> 00:32:51.215
<v Lucas Dohmen>hinzufügt, die Alten dann aber drin lässt und so weiter. Das brauchen wir gar

00:32:51.215 --> 00:32:54.645
<v Lucas Dohmen>nicht zu tun, weil die Anwendung halt immer in Sync ist mit den Credentials,

00:32:55.155 --> 00:32:58.045
<v Lucas Dohmen>und da ist der Großteil der Credentials steht da halt drin.

00:32:58.965 --> 00:33:05.255
<v Lucas Dohmen>Ausnahmen sind halt so ein paar kleine Sachen, die eben erst so zum Terraform

00:33:05.255 --> 00:33:06.485
<v Lucas Dohmen>ausführen bekannt sind.

00:33:07.415 --> 00:33:11.785
<v Lucas Dohmen>Und die machen wir über Environment-Variablen, die dann, also die Terraform

00:33:11.785 --> 00:33:13.745
<v Lucas Dohmen>auf die Platte schreibt, damit sie im Environment stehen.

00:33:14.485 --> 00:33:17.935
<v Lucas Dohmen>Das heißt, das ist schon unser gesamtes Secret-Management. Ja, habe ich was vergessen?

00:33:18.395 --> 00:33:22.335
<v Dirk Breuer>Das trifft es ziemlich genau. Der wichtige Punkt ist, dass alle Secrets,

00:33:22.335 --> 00:33:25.305
<v Dirk Breuer>die für die Anwendung relevant sind, in der Anwendung liegen,

00:33:25.425 --> 00:33:26.995
<v Dirk Breuer>um eben dieses Phasing nicht zu haben.

00:33:27.445 --> 00:33:31.525
<v Dirk Breuer>Bevor das zuverlässig funktioniert hat in Rails, hatten wir halt,

00:33:32.565 --> 00:33:35.705
<v Dirk Breuer>ja, lag halt irgendwo eine verschlüsselte Secret-Datei irgendwo rum.

00:33:35.705 --> 00:33:38.635
<v Dirk Breuer>Die ist dann beim Deployment geladen worden, aber da hatte man halt immer dieses

00:33:38.635 --> 00:33:41.405
<v Dirk Breuer>Problem, okay, ich muss die beiden eintragen, bla bla, hin und her.

00:33:41.895 --> 00:33:46.275
<v Dirk Breuer>Und auf den Maschinen selber liegen nur Secrets, die die Maschinen brauchen.

00:33:46.275 --> 00:33:50.485
<v Dirk Breuer>Weil beispielsweise der Key, um das Monitoring zu befüttern oder der Key,

00:33:50.485 --> 00:33:55.125
<v Dirk Breuer>um von der Docker-Registry zu laden, solche Sachen.

00:33:55.265 --> 00:33:56.835
<v Lucas Dohmen>Genau, ja, exakt.

00:33:57.545 --> 00:34:02.775
<v Lucas Dohmen>Genau. Und damit haben wir im Prinzip fast alles, was Terraform bei uns macht, schon beschrieben.

00:34:02.775 --> 00:34:06.975
<v Lucas Dohmen>Das Einzige, was Terraform jetzt am Ende noch macht, ist, also nicht am Ende,

00:34:06.975 --> 00:34:11.065
<v Lucas Dohmen>aber auf den jeweiligen Maschinen spielt es das Docker-Image ein,

00:34:11.065 --> 00:34:14.295
<v Lucas Dohmen>was Hetzner zur Verfügung stellt. Das ist ein Ubuntu, wo halt Docker einfach

00:34:14.295 --> 00:34:15.365
<v Lucas Dohmen>schon vorinstalliert ist.

00:34:15.755 --> 00:34:19.185
<v Lucas Dohmen>Das kommt auf alle von diesen Maschinen, über die wir eben gesprochen haben, drauf.

00:34:19.625 --> 00:34:24.125
<v Lucas Dohmen>Und danach führen wir Ansible aus. Und dann kommen wir schon zum nächsten Tool.

00:34:24.125 --> 00:34:25.625
<v Lucas Dohmen>Was machen wir denn eigentlich mit Ansible, Dirk?

00:34:26.355 --> 00:34:30.255
<v Dirk Breuer>Ja, Ansible ist ja im Grunde Bash-Skript als YAML.

00:34:31.215 --> 00:34:36.825
<v Dirk Breuer>Ja, das soll gar nicht abwertend klingen, aber ich finde, das trifft es eigentlich ganz gut.

00:34:36.825 --> 00:34:42.545
<v Dirk Breuer>Man hat irgendwie sehr strukturiert in YAML-Form stehen, was man durchführen

00:34:42.545 --> 00:34:44.835
<v Dirk Breuer>möchte und unten drunter werden dann halt Dinge ausgeführt.

00:34:44.835 --> 00:34:49.245
<v Dirk Breuer>Man kann das schön modular sich zusammenstecken, auch die ganzen Dateien,

00:34:49.245 --> 00:34:52.395
<v Dirk Breuer>die irgendwie da dran hängen, also hat man da, ja, so Rollen nennt sich das

00:34:52.395 --> 00:34:55.635
<v Dirk Breuer>dann in Ansible, die man zusammensteckt und wo man so einzelne Tasks ausführt.

00:34:56.695 --> 00:35:00.525
<v Dirk Breuer>Die dann abarbeiten, was so auf diesem Server passieren muss.

00:35:00.525 --> 00:35:03.555
<v Dirk Breuer>Und unter anderem ist es eben, machen wir damit,

00:35:05.095 --> 00:35:10.415
<v Dirk Breuer>Kernel Update am Anfang erstmal, richten irgendwie unattended Upgrades ein,

00:35:10.415 --> 00:35:14.565
<v Dirk Breuer>solche Sachen, installieren so ein paar Basistools, weil vieles auf den Kisten

00:35:14.565 --> 00:35:15.635
<v Dirk Breuer>nicht zusätzlich installiert,

00:35:16.495 --> 00:35:20.585
<v Dirk Breuer>dadurch, dass das Image selber schon Docker mitbringt, brauchen wir das nicht noch nachinstallieren.

00:35:21.025 --> 00:35:23.695
<v Dirk Breuer>Da ist halt irgendwie ein vi noch drauf installiert, sichergestellt, tmux

00:35:24.165 --> 00:35:26.535
<v Dirk Breuer>installiert, solche Sachen. So ein paar Monitoring-Tools,

00:35:27.095 --> 00:35:30.165
<v Dirk Breuer>so Housekeeping-Tools, um mal irgendwas auf den Maschinen selber sich anzuschauen,

00:35:30.165 --> 00:35:32.845
<v Dirk Breuer>was wirklich selten genutzt wird.

00:35:33.225 --> 00:35:36.955
<v Dirk Breuer>Aber ja, wenn man dann doch mal was machen muss, dann ist es angenehm, dass es da ist.

00:35:37.915 --> 00:35:41.455
<v Dirk Breuer>Und dann kopieren wir eben damit auch einige Konfigurationsdateien dahin,

00:35:42.815 --> 00:35:46.085
<v Dirk Breuer>unter anderem eben die ganzen Docker-Konfigurationen.

00:35:46.635 --> 00:35:49.685
<v Dirk Breuer>Und dafür setzen wir das ganze Ding dann auch in den Docker-Swarm-Mode.

00:35:49.975 --> 00:35:51.785
<v Dirk Breuer>Da kommen wir vielleicht auch gleich noch separat drauf.

00:35:51.785 --> 00:35:52.315
<v Lucas Dohmen>Definitiv.

00:35:53.235 --> 00:36:00.095
<v Dirk Breuer>Gibt Redebedarf bei dem Swarm Mode. Genau, und das ist im Grunde der Teil,

00:36:00.095 --> 00:36:05.035
<v Dirk Breuer>der dann dafür sorgt, dass die Maschine alleine starten kann,

00:36:05.035 --> 00:36:07.695
<v Dirk Breuer>ohne dass man manuell was drauf deployen muss.

00:36:09.075 --> 00:36:12.765
<v Dirk Breuer>Damit man eben einfach eine neue Kiste hochfahren kann, ohne danach noch was

00:36:12.765 --> 00:36:15.355
<v Dirk Breuer>deployen zu müssen, sondern die Maschine kann sich selber booten.

00:36:16.275 --> 00:36:20.915
<v Dirk Breuer>Konzeptionell haben wir das aus AWS-Zeiten mit übernommen, weil der Autoscaler

00:36:20.915 --> 00:36:24.595
<v Dirk Breuer>fordert einfach, dass sich die Instanzen hochfahren können und dann fertig sind,

00:36:24.595 --> 00:36:28.445
<v Dirk Breuer>ohne dass was manuell gemacht werden müsste, sonst wäre das Ganze relativ witzlos.

00:36:29.065 --> 00:36:30.505
<v Dirk Breuer>Und das ist hier auch dann der Fall.

00:36:31.335 --> 00:36:35.635
<v Dirk Breuer>Der Nachteil dabei ist natürlich, kann man sich recht leicht überlegen wahrscheinlich,

00:36:37.615 --> 00:36:42.615
<v Dirk Breuer>die Docker-Konfiguration ist ja anwendungsspezifisch am Ende des Tages.

00:36:42.935 --> 00:36:46.715
<v Dirk Breuer>Und eigentlich viel näher an der Anwendung als an der Infrastruktur.

00:36:46.715 --> 00:36:50.715
<v Dirk Breuer>Und das heißt, wenn ich was an dem Docker ändern möchte, dann muss ich das im

00:36:50.715 --> 00:36:54.985
<v Dirk Breuer>Infrastrukturteil machen. Das ist so ein bisschen komisch vielleicht.

00:36:55.905 --> 00:36:58.955
<v Dirk Breuer>Nicht nur vielleicht, sondern das ist schon etwas unhandlich.

00:36:59.795 --> 00:37:01.515
<v Dirk Breuer>Kommt aber super selten vor.

00:37:02.235 --> 00:37:04.665
<v Dirk Breuer>Und viele Sachen kann man auch rausextrahieren und dann über,

00:37:05.035 --> 00:37:08.135
<v Dirk Breuer>wenn man einmal weiß, was man alles machen muss und das so für seine Anwendung

00:37:08.135 --> 00:37:10.475
<v Dirk Breuer>eingespielt hat, dann über Umgebungsverfahren steuern.

00:37:10.795 --> 00:37:14.915
<v Dirk Breuer>Aber ja, das ist auf jeden Fall so ein wichtiger Hinweis an der Stelle, glaube ich.

00:37:16.025 --> 00:37:16.455
<v Lucas Dohmen>Genau.

00:37:17.325 --> 00:37:20.795
<v Lucas Dohmen>Ja, und also wir kommen gleich nochmal auf den Docker Swarm zurück.

00:37:22.035 --> 00:37:26.645
<v Lucas Dohmen>Also das ist ein eigenes Thema, aber grundsätzlich sind diese Maschinen,

00:37:28.085 --> 00:37:29.095
<v Lucas Dohmen>glaube ich, sogar gleich.

00:37:29.095 --> 00:37:32.065
<v Lucas Dohmen>Also fast gleich. Ich glaube, so ein, zwei kleine Unterschiede gibt es zwischen

00:37:32.065 --> 00:37:37.165
<v Lucas Dohmen>den Maschinen, zwischen den Datenbankknoten, Webworkern und den anderen Workern.

00:37:37.505 --> 00:37:43.225
<v Lucas Dohmen>Aber das ist hauptsächlich die unterschiedliche Docker Swarm-Konfigurations-File.

00:37:43.225 --> 00:37:44.825
<v Lucas Dohmen>Also welche Docker-Container drauflaufen.

00:37:44.825 --> 00:37:48.165
<v Dirk Breuer>Ansonsten müssten sie im Grunde alle identisch sein.

00:37:48.545 --> 00:37:54.175
<v Dirk Breuer>Also insofern, also doch, in der grundsätzlichen Konfiguration sind sie alle identisch.

00:37:55.515 --> 00:37:59.855
<v Dirk Breuer>Was Terraform halt macht, der sagt, wir brauchen bestimmte Volumes,

00:37:59.855 --> 00:38:03.815
<v Dirk Breuer>also sonst wäre quasi die Festplatte einfach in der VM dabei.

00:38:03.815 --> 00:38:05.885
<v Dirk Breuer>Und wenn die VM ausgeht, dann ist auch diese Festplatte weg.

00:38:06.835 --> 00:38:09.495
<v Dirk Breuer>Und das ist manchmal nicht so praktisch, wie ihr euch vorstellen könnt,

00:38:09.495 --> 00:38:10.765
<v Dirk Breuer>vielleicht bei der Datenbank.

00:38:11.735 --> 00:38:14.105
<v Dirk Breuer>Oder auch bei dem Bilderserver ist es auch relevant. Wir wollen nicht jedes

00:38:14.105 --> 00:38:17.265
<v Dirk Breuer>Mal alle Bilder, die wir ausliefern, irgendwo nur noch runterladen,

00:38:17.265 --> 00:38:18.915
<v Dirk Breuer>sondern die sollen bitte dauerhaft da sein.

00:38:19.235 --> 00:38:22.495
<v Dirk Breuer>Also nutzen wir diese Volumes. Das ist so ein Network Attached Storage.

00:38:23.135 --> 00:38:25.875
<v Dirk Breuer>Den stellt Terraform grundsätzlich bereit, dass sie da sind,

00:38:25.875 --> 00:38:28.765
<v Dirk Breuer>aber das Mounten auf den Maschinen, das passiert in Ansible.

00:38:28.765 --> 00:38:33.145
<v Dirk Breuer>Das passiert natürlich nur auf den Servern, die das auch brauchen.

00:38:33.145 --> 00:38:38.995
<v Dirk Breuer>Also der Web Node und der Worker Node, die haben kein Volume attached. Warum denn?

00:38:39.595 --> 00:38:43.585
<v Dirk Breuer>Aber ansonsten sind die im Grunde alle gleich. Es gibt dann aber trotzdem im

00:38:43.585 --> 00:38:45.445
<v Dirk Breuer>Code bei uns, werdet ihr eben unterschiedliche

00:38:45.445 --> 00:38:49.215
<v Dirk Breuer>Konfigurationen für diese unterschiedlichen Nodes finden. Genau.

00:38:50.705 --> 00:38:53.645
<v Lucas Dohmen>Genau, und deswegen sind es auch insgesamt 1000 Zeilen Code,

00:38:53.645 --> 00:38:57.325
<v Lucas Dohmen>weil es halt zum einen halt einfach YAML verbos ist und zum anderen,

00:38:57.665 --> 00:38:59.255
<v Lucas Dohmen>weil wir halt da auch eine gewisse

00:38:59.255 --> 00:39:04.085
<v Lucas Dohmen>Menge von Duplikationen haben zwischen diesen verschiedenen Knoten.

00:39:04.335 --> 00:39:07.445
<v Lucas Dohmen>Und auch dazu noch einfach mal einfach als so ein Bauchgefühl.

00:39:07.755 --> 00:39:10.965
<v Lucas Dohmen>Wir hatten jeweils ein Commit im Mai, im August und im September.

00:39:11.745 --> 00:39:15.565
<v Lucas Dohmen>Das heißt also, auch hier passiert nicht viel. Das ist auch sehr stabil und

00:39:15.565 --> 00:39:18.465
<v Lucas Dohmen>wir haben es quasi einmal durchkonfiguriert und jetzt funktioniert es halt einfach.

00:39:19.025 --> 00:39:21.525
<v Dirk Breuer>Außer wir hätten in diesem Committee jeweils irgendwie tausend Zeilen geändert.

00:39:22.305 --> 00:39:26.495
<v Lucas Dohmen>Das stimmt. Das stimmt, haben wir aber nicht. Spoiler Alert. Genau.

00:39:27.685 --> 00:39:30.525
<v Lucas Dohmen>Und das ist im Prinzip das, was wir mit Ansible machen.

00:39:31.875 --> 00:39:35.635
<v Lucas Dohmen>Es ist nicht viel. Also es ist wirklich eine Handvoll Tasks,

00:39:35.635 --> 00:39:39.195
<v Lucas Dohmen>die da ausgeführt werden, die aber einfach dazu führen, dass wir genau wissen,

00:39:39.195 --> 00:39:43.175
<v Lucas Dohmen>was darauf passiert und wir machen halt nichts noch händisch nach auf diesen Maschinen.

00:39:43.175 --> 00:39:47.085
<v Lucas Dohmen>Also das ist halt das, was wir da machen und fertig.

00:39:48.585 --> 00:39:52.175
<v Lucas Dohmen>Genau. Und deswegen Ansible auch wieder so ein Tool, was man,

00:39:52.475 --> 00:39:54.465
<v Lucas Dohmen>ich habe das auch irgendwann einem Kollegen beigebracht,

00:39:55.325 --> 00:39:58.085
<v Lucas Dohmen>es ist relativ einfach, wenn man einfach irgendwie verstanden hat,

00:39:58.085 --> 00:40:01.505
<v Lucas Dohmen>okay, eigentlich ist das ein Shell-Skript und man hat ein paar Abstraktionen,

00:40:01.505 --> 00:40:04.795
<v Lucas Dohmen>die sehr, sehr praktisch sind, die da so drüber hängen, aber eigentlich führt

00:40:04.795 --> 00:40:06.875
<v Lucas Dohmen>es einfach nur diesen Shell-Skript in Ruhe aus.

00:40:07.605 --> 00:40:12.005
<v Lucas Dohmen>Und wir führen jetzt auch gar nicht oft jetzt irgendwie die Ansible-Skripts

00:40:12.005 --> 00:40:13.505
<v Lucas Dohmen>auf den Maschinen nochmal aus oder so.

00:40:13.825 --> 00:40:17.055
<v Lucas Dohmen>Also das ist ja eigentlich so ein Flagship-Feature eigentlich von Ansible,

00:40:17.055 --> 00:40:20.545
<v Lucas Dohmen>dass man das kann, aber das ist gar nicht so wirklich notwendig.

00:40:20.545 --> 00:40:24.725
<v Lucas Dohmen>Im Prinzip laufen die einmal da drüber und dann ist es schon wieder gut.

00:40:24.725 --> 00:40:29.815
<v Dirk Breuer>Das ist nur nicht notwendig, das ist quasi unmöglich, weil der einzige,

00:40:29.815 --> 00:40:33.675
<v Dirk Breuer>also was heißt unmöglich, aber man könnte das machen, aber das aktuelle Setup

00:40:33.675 --> 00:40:38.385
<v Dirk Breuer>sieht vor, dass es ausschließlich durchgeführt wird, wenn Terraform die Maschine gebootet hat.

00:40:38.845 --> 00:40:41.335
<v Dirk Breuer>Also wenn man was ändert, muss man eine neue Maschine booten.

00:40:41.995 --> 00:40:43.905
<v Dirk Breuer>Das könnt ihr euch schon mal im Hinterkopf behalten, wenn wir nämlich gleich

00:40:43.905 --> 00:40:46.485
<v Dirk Breuer>über die Datenbank reden, dann ist der Punkt wieder relevant.

00:40:47.315 --> 00:40:51.725
<v Lucas Dohmen>Genau, das ist ein guter Punkt. Aber bevor wir dahin gehen, wechseln wir erst nochmal zu Docker.

00:40:52.165 --> 00:40:56.185
<v Lucas Dohmen>Also Docker, ich glaube, das braucht man, glaube ich, jetzt nicht mehr groß

00:40:56.185 --> 00:40:59.005
<v Lucas Dohmen>auszuholen, warum das irgendwie praktisch ist und warum wir das benutzen.

00:40:59.445 --> 00:41:03.075
<v Lucas Dohmen>Aber eine Sache, die tatsächlich ein bisschen ungewöhnlicher ist,

00:41:03.075 --> 00:41:08.395
<v Lucas Dohmen>ist zum einen, dass wir alle tatsächlich Docker Compose als lokale Entwicklungsumgebung

00:41:08.395 --> 00:41:11.655
<v Lucas Dohmen>nutzen und zum anderen, dass wir in Produktion Docker Swarm benutzen.

00:41:11.655 --> 00:41:13.235
<v Lucas Dohmen>Also erstmal kurz zu Docker Compose.

00:41:14.285 --> 00:41:19.095
<v Lucas Dohmen>Meine Beobachtung aus anderen Teams ist, dass viele Leute das nur lokal benutzen,

00:41:19.095 --> 00:41:20.495
<v Lucas Dohmen>wenn sie irgendwas debuggen wollen.

00:41:20.495 --> 00:41:24.905
<v Lucas Dohmen>Aber bei uns ist das wirklich so, alle von uns, alle sechs, wenn sie anfangen

00:41:24.905 --> 00:41:29.125
<v Lucas Dohmen>zu arbeiten, schreiben sie docker compose up und dann startet es und dann läuft

00:41:29.125 --> 00:41:34.115
<v Lucas Dohmen>es und dann editiert man vor sich hin, arbeitet und kriegt halt Refreshs und fertig.

00:41:34.115 --> 00:41:38.765
<v Lucas Dohmen>Das heißt also, das ist wirklich unsere Entwicklungsumgebung und nicht irgendwie

00:41:38.765 --> 00:41:39.855
<v Lucas Dohmen>sowas, was daneben liegt.

00:41:40.725 --> 00:41:45.355
<v Lucas Dohmen>Damit wollen wir eben so nah dran sein an der Produktion wie möglich.

00:41:45.355 --> 00:41:48.675
<v Lucas Dohmen>Natürlich haben wir lokal keinen CDN und so weiter, brauchen wir jetzt nicht darüber zu sprechen.

00:41:48.955 --> 00:41:52.875
<v Lucas Dohmen>Aber die Maschinen, also in Anführungsstrichen, sind eben wirklich die gleichen.

00:41:52.875 --> 00:41:56.365
<v Lucas Dohmen>Das heißt, wir haben da einfach keine Überraschungen, dass da Sachen ganz anders

00:41:56.365 --> 00:41:59.625
<v Lucas Dohmen>funktionieren, als sie in Produktion passieren.

00:42:01.775 --> 00:42:04.495
<v Lucas Dohmen>Überraschender ist, glaube ich, dass wir Docker Swarm benutzen.

00:42:04.955 --> 00:42:08.625
<v Lucas Dohmen>Docker Swarm ist halt, also wirklich auch, glaube ich, aus meiner Sicht einer

00:42:08.625 --> 00:42:13.865
<v Lucas Dohmen>der größten Marketing-Fails der letzten zehn Jahre im Naming-Bereich.

00:42:14.955 --> 00:42:19.635
<v Lucas Dohmen>Also es gab mal ein Ding, das hieß Docker Swarm und das gibt es nicht mehr.

00:42:19.635 --> 00:42:22.845
<v Lucas Dohmen>Und das wurde eingestellt, dieses Produkt.

00:42:23.195 --> 00:42:25.545
<v Lucas Dohmen>Deswegen alle Leute, die hören, dass wir Docker Swarm benutzen,

00:42:25.545 --> 00:42:28.415
<v Lucas Dohmen>denken, wir benutzen eine Software, die es nicht mehr gibt oder die,

00:42:28.415 --> 00:42:31.615
<v Lucas Dohmen>also so eine Legacy Software, die quasi einfach nicht mehr verwendbar ist.

00:42:33.265 --> 00:42:36.735
<v Lucas Dohmen>Es wurde aber irgendwann ein Docker Swarm Mode eingeführt. Also eigentlich benutzen

00:42:36.735 --> 00:42:40.135
<v Lucas Dohmen>wir nicht Docker Swarm, sondern Docker Swarm Mode. So ist der volle Name.

00:42:41.305 --> 00:42:44.675
<v Lucas Dohmen>Und das ist überhaupt nicht eingestellt. Das ist einfach in Docker eingebaut.

00:42:44.675 --> 00:42:47.475
<v Lucas Dohmen>Ihr müsst dazu nichts zusätzlich installieren. Ihr müsst den nur aktivieren.

00:42:47.475 --> 00:42:50.375
<v Lucas Dohmen>Das haben wir ja auch eben beschrieben, dass wir das in Ansible anklicken.

00:42:51.115 --> 00:42:56.065
<v Lucas Dohmen>Bitte starte dich hier den Swarm-Mode. Und auch bescheuert ist eben,

00:42:56.235 --> 00:42:59.485
<v Lucas Dohmen>dass Docker Swarm und Docker Swarm-Mode so gut wie nichts gemeinsam haben.

00:42:59.485 --> 00:43:01.815
<v Lucas Dohmen>Also das sind einfach zwei völlig unterschiedliche Produkte.

00:43:02.735 --> 00:43:07.395
<v Lucas Dohmen>Und genau, deswegen legt die Angst vor Docker Swarm-Mode ab.

00:43:07.735 --> 00:43:13.545
<v Lucas Dohmen>Das ist gar nicht tot, das ist lebendig und funktioniert für uns sehr, sehr gut.

00:43:13.995 --> 00:43:16.495
<v Lucas Dohmen>Was bietet uns Docker Swarm-Mode?

00:43:17.365 --> 00:43:20.405
<v Lucas Dohmen>Also im Prinzip könnten, was wir ja machen könnten, wäre, wir könnten auf jedem

00:43:20.405 --> 00:43:25.345
<v Lucas Dohmen>der Server einfach docker compose up machen und dann würde da der Server laufen

00:43:25.345 --> 00:43:30.045
<v Lucas Dohmen>und fertig. Also das würde auch funktionieren. Also so funktioniert es ja auch lokal bei uns.

00:43:30.895 --> 00:43:35.235
<v Lucas Dohmen>Das ginge. Der Nachteil daran ist, wie macht man dann ein Deployment?

00:43:35.645 --> 00:43:42.125
<v Lucas Dohmen>Weil Docker Compose kein Konzept davon hat, von fahr jetzt mal diesen Container

00:43:42.125 --> 00:43:45.115
<v Lucas Dohmen>hoch und ersetzt ihn durch einen anderen Container. Und wenn der hochgefahren

00:43:45.115 --> 00:43:48.455
<v Lucas Dohmen>ist, dann route bitte mal den Traffic dahin und bla.

00:43:48.875 --> 00:43:53.995
<v Lucas Dohmen>Das kann der Compose nicht, weil er es ja auch nicht braucht im lokalen Fall.

00:43:53.995 --> 00:43:55.805
<v Lucas Dohmen>Also ist ja irgendwie nachvollziehbar.

00:43:56.695 --> 00:44:02.115
<v Lucas Dohmen>Aber für uns das einzige Feature, was wir vom Swarm-Mode benutzen, ist genau das.

00:44:02.285 --> 00:44:07.805
<v Lucas Dohmen>Dass wir sagen, hey, jetzt bügel bitte mal das neue Image auf den Server,

00:44:08.325 --> 00:44:13.415
<v Lucas Dohmen>fahr das hoch. auch wenn es sagt, ich bin healthy, dann route den Traffic auf

00:44:13.415 --> 00:44:16.665
<v Lucas Dohmen>diese neue Instanz und fahr die alte runter.

00:44:16.865 --> 00:44:20.665
<v Lucas Dohmen>Das ist im Prinzip das, was wir damit machen und das ist schon alles.

00:44:21.635 --> 00:44:25.945
<v Lucas Dohmen>Docker Swarm Mode kann auch mehrere Server verbinden, sodass sie von außen so

00:44:25.945 --> 00:44:27.635
<v Lucas Dohmen>aussehen, als wären sie ein Docker Host.

00:44:28.365 --> 00:44:31.115
<v Lucas Dohmen>Das benutzen wir aber gar nicht, sondern jede von den Instanzen

00:44:33.025 --> 00:44:37.065
<v Lucas Dohmen>Ist quasi ein eigenständiges Ding.

00:44:37.385 --> 00:44:40.935
<v Lucas Dohmen>Also wir connecten sie nicht miteinander, sondern die laufen eigenständig,

00:44:40.935 --> 00:44:42.275
<v Lucas Dohmen>wir benutzen nur dieses eine Feature.

00:44:42.705 --> 00:44:45.535
<v Lucas Dohmen>Und das funktioniert für uns halt wirklich super gut.

00:44:45.895 --> 00:44:49.435
<v Lucas Dohmen>Also auch wieder so eine von den Technologien, die total langweilig sind.

00:44:49.435 --> 00:44:54.015
<v Lucas Dohmen>Also wir hatten noch exakt null mal Probleme damit, nachdem wir es initial einmal

00:44:54.015 --> 00:44:56.435
<v Lucas Dohmen>aufgesetzt hatten. Am Anfang, da hatten wir ein, zwei Probleme.

00:44:56.765 --> 00:45:00.525
<v Lucas Dohmen>Ich glaube, das wäre so für mich das eine Learning, das haben wir tatsächlich

00:45:00.525 --> 00:45:02.475
<v Lucas Dohmen>vergessen. Ich mache eine kurze Seitennotiz.

00:45:03.175 --> 00:45:07.005
<v Lucas Dohmen>Auf den Servern läuft jeweils ein Traefik, das ist ja so ein Reverse-Proxy,

00:45:07.005 --> 00:45:11.425
<v Lucas Dohmen>ein Cloud-Native-Reverse-Proxy, der irgendwie so Sachen machen kann wie,

00:45:11.685 --> 00:45:15.215
<v Lucas Dohmen>route mal den Traffic auf den und den Container.

00:45:16.505 --> 00:45:20.045
<v Lucas Dohmen>Und der macht ganz komische Dinge mit dem Netzwerk von Docker.

00:45:20.045 --> 00:45:25.095
<v Lucas Dohmen>Also wirklich so super komische Dinge, sowohl den eingehenden als auch den ausgehenden Traffic.

00:45:25.485 --> 00:45:28.495
<v Lucas Dohmen>Und das hat uns total verwirrt. Also ich glaube, da haben wir,

00:45:28.495 --> 00:45:35.765
<v Lucas Dohmen>als wir das initial aufgesetzt haben, haben wir uns mehrfach irgendwie an den

00:45:35.765 --> 00:45:39.075
<v Lucas Dohmen>Kopf gefasst und gesagt, Dirk, verstehst du das? Lucas, verstehst du das? Nee.

00:45:39.535 --> 00:45:43.575
<v Lucas Dohmen>Also so wirklich völlige Verwirrung. Aber als es einmal dann lief,

00:45:43.755 --> 00:45:45.955
<v Lucas Dohmen>seitdem ist es wieder völlig unaufgeregt.

00:45:47.215 --> 00:45:49.925
<v Lucas Dohmen>Ich glaube, das wäre so das Einzige, wenn ich es jetzt nochmal ganz neu machen

00:45:49.925 --> 00:45:52.695
<v Lucas Dohmen>würde, was ich anders machen würde. Ich glaube, ich würde einmal ausprobieren,

00:45:52.695 --> 00:45:55.005
<v Lucas Dohmen>ob es Alternativen zu Traefik gibt, wie zum Beispiel Caddy.

00:45:55.305 --> 00:45:59.915
<v Lucas Dohmen>Da habe ich von ein paar Leuten gehört, dass das ein bisschen weniger komische

00:45:59.915 --> 00:46:01.165
<v Lucas Dohmen>Dinge macht als Traefik.

00:46:02.115 --> 00:46:04.685
<v Lucas Dohmen>Das ist aber mit allen anderen Komponenten bin ich total zufrieden.

00:46:04.685 --> 00:46:08.795
<v Lucas Dohmen>Nur Traefik, das war wirklich einfach frustrierend, weil an sich hat es coole

00:46:08.795 --> 00:46:11.945
<v Lucas Dohmen>Features, dass du bestimmte Sachen mit Labels einfach regeln kannst und sagen

00:46:11.945 --> 00:46:15.065
<v Lucas Dohmen>kannst, hey, ich nehme übrigens den Traffic auf dem Port entgegen.

00:46:16.275 --> 00:46:19.695
<v Lucas Dohmen>Aber ja, der Teil...

00:46:20.745 --> 00:46:25.545
<v Dirk Breuer>Der war ein bisschen komisch, ja. Aber danach hat das super funktioniert mit dem Swarm-Mode.

00:46:26.755 --> 00:46:32.415
<v Dirk Breuer>Also nicht nur das Deployment, dieses Zero-Downtime-Deployment in Anführungszeichen.

00:46:33.695 --> 00:46:36.075
<v Dirk Breuer>Machen wir damit, was halt super praktisch ist, was auch nur ein Befehl ist,

00:46:36.075 --> 00:46:37.325
<v Dirk Breuer>was Lucas eben beschrieben hat.

00:46:37.325 --> 00:46:42.565
<v Dirk Breuer>Diese ganzen Schritte ist halt ein, das heißt dann Stack, der Swarm-Mode,

00:46:42.565 --> 00:46:45.555
<v Dirk Breuer>es gibt auch den Swarm-Befehl, aber das hat Leute, ne, den gibt es gar nicht.

00:46:45.555 --> 00:46:50.415
<v Dirk Breuer>Man sagt nur swarm mode activate, und dann gibt es einen Stack und Services innerhalb des Stacks.

00:46:50.865 --> 00:46:53.895
<v Dirk Breuer>Wir machen so ein Stack-Update und der regelt das dann halt alles.

00:46:54.755 --> 00:46:58.325
<v Dirk Breuer>Was gleichzeitig auch den Vorteil hat, wenn man sich irgendwie Logs anschauen

00:46:58.325 --> 00:47:02.425
<v Dirk Breuer>möchte von Services innerhalb dieses Stacks und so eine Stack-Definition ist

00:47:02.425 --> 00:47:06.485
<v Dirk Breuer>im Grunde ein Docker-Compose mit so einem anderen Ding noch drin.

00:47:06.865 --> 00:47:09.675
<v Dirk Breuer>Man kann das nicht eins zu eins überführen, so ein Docker-Compose.

00:47:09.675 --> 00:47:14.585
<v Dirk Breuer>Das Stack unterstützt nicht alles einfach so, was im Docker-Compose verfügbar ist.

00:47:14.955 --> 00:47:17.205
<v Dirk Breuer>Im Grunde sieht das genauso aus. So müsst ihr euch das vorstellen.

00:47:17.205 --> 00:47:19.455
<v Dirk Breuer>Und der Traefik läuft auch innerhalb dieses Stack-Files.

00:47:20.035 --> 00:47:23.645
<v Dirk Breuer>Das ist einfach ein Service innerhalb des Stacks, wird halt der Traefik gestartet.

00:47:24.385 --> 00:47:27.695
<v Dirk Breuer>Dann kann man sich eben einfach sagen, ich möchte gerne von dem Webnode die

00:47:27.695 --> 00:47:31.175
<v Dirk Breuer>Logs sehen und nicht den konkreten Containernamen angeben müssen.

00:47:32.125 --> 00:47:33.665
<v Dirk Breuer>Was halt einfach super praktisch ist.

00:47:34.145 --> 00:47:36.565
<v Dirk Breuer>Auch das braucht man super selten, aber gerade, weil man es so selten braucht

00:47:36.565 --> 00:47:39.295
<v Dirk Breuer>und dann sich immer daran erinnern, wie komme ich nochmal an die Logs?

00:47:39.295 --> 00:47:44.335
<v Dirk Breuer>Ah ja, ich kann einfach service logs und dann für den Webservice mir die Sachen anschauen.

00:47:44.525 --> 00:47:46.995
<v Dirk Breuer>Also ja, das war auf jeden Fall, da haben wir viel geguckt ja,

00:47:46.995 --> 00:47:51.505
<v Dirk Breuer>was wir da nehmen können, um das hinzukriegen und hatten schon irgendwie die

00:47:51.505 --> 00:47:55.745
<v Dirk Breuer>Kubernetes-Dokumentation auf oder dieses Micro-Kubernetes.

00:47:55.745 --> 00:48:00.405
<v Dirk Breuer>Und dann gibt es ja dieses Kamal aus der Rails-Welt und so. Wir haben uns verschiedene

00:48:00.405 --> 00:48:03.905
<v Dirk Breuer>Sachen angeschaut und irgendwann dann sind wir dann nochmal über diesen Docker-Swarm

00:48:03.905 --> 00:48:06.775
<v Dirk Breuer>gestolpert und haben festgestellt, dass genau das, was wir brauchen,

00:48:06.775 --> 00:48:10.315
<v Dirk Breuer>ist einfach da und nichts anderes und tut exakt, was wir brauchen.

00:48:10.925 --> 00:48:15.655
<v Lucas Dohmen>Ja, exakt. Und ich glaube, dass das einfach nicht auf dem Radar ist von ganz

00:48:15.655 --> 00:48:19.205
<v Lucas Dohmen>vielen Leuten, weil es halt einfach diese im Kopf, Ich hatte auch abgespeichert,

00:48:19.205 --> 00:48:22.525
<v Lucas Dohmen>Swarm ist irgendwie so ein vergangenes Projekt, was es nicht mehr gibt.

00:48:23.525 --> 00:48:28.045
<v Lucas Dohmen>Und man guckt es sich gar nicht erst an, obwohl es für viele Sachen total ausreichend

00:48:28.045 --> 00:48:30.525
<v Lucas Dohmen>ist und viel einfacher zu handeln.

00:48:30.845 --> 00:48:36.325
<v Lucas Dohmen>Ich habe ja auch die Theorie, dass das Kamal-Team sich diese Doku auch mal durchlesen

00:48:36.325 --> 00:48:41.355
<v Lucas Dohmen>sollte, anstatt einen eigenen Reverse-Proxy zu bauen. Aber das ist ein anderes Thema.

00:48:42.625 --> 00:48:47.175
<v Lucas Dohmen>Genau, also das ist unser Docker-Setup, auch wieder relativ unaufgeregt.

00:48:47.175 --> 00:48:49.885
<v Lucas Dohmen>Also wieder einfach zu handeln.

00:48:50.985 --> 00:48:52.445
<v Lucas Dohmen>Ich habe,

00:48:53.105 --> 00:48:55.085
<v Lucas Dohmen>Bin ich noch da? Irgendwie hängt mein Bild, glaube ich.

00:48:55.755 --> 00:48:58.865
<v Dirk Breuer>Jetzt bist du schon da, dass ich wieder bewegt. Also auch hier zu reden,

00:48:58.865 --> 00:49:00.285
<v Dirk Breuer>dann bin ich sehr verwirrt.

00:49:01.295 --> 00:49:04.365
<v Lucas Dohmen>Es tut mir sehr leid. Dann gab es da einen kurzen Knacks.

00:49:06.255 --> 00:49:10.165
<v Lucas Dohmen>Genau, also das war Docker Swarm. Wie funktioniert jetzt so ein Deployment bei uns?

00:49:11.225 --> 00:49:16.075
<v Lucas Dohmen>Wir benutzen dafür auch wieder ein altes Tool, was quasi auch wieder so aus

00:49:16.075 --> 00:49:18.765
<v Lucas Dohmen>der Vorzeit kommt. Das heißt Capistrano.

00:49:19.765 --> 00:49:26.545
<v Lucas Dohmen>Das ist aus der Rails-Welt, aber eigentlich macht es nichts Rails-Spezifisches.

00:49:26.545 --> 00:49:27.925
<v Lucas Dohmen>Also man kann damit alles deployen.

00:49:29.165 --> 00:49:33.275
<v Lucas Dohmen>Und eigentlich benutzen wir auch davon, wir schalten im Prinzip alle Features

00:49:33.275 --> 00:49:35.725
<v Lucas Dohmen>aus, weil das kann halt so ganz viele Sachen, die man früher gebraucht hat,

00:49:35.725 --> 00:49:39.635
<v Lucas Dohmen>wie mit Apache dann irgendwie so diese Datei dahin schieben und dann so ein

00:49:39.635 --> 00:49:42.535
<v Lucas Dohmen>Switchover machen und all so ein Kram. Eines brauchen wir ja gar nicht.

00:49:42.985 --> 00:49:47.705
<v Lucas Dohmen>Im Prinzip macht Capistrano exakt zwei Dinge.

00:49:48.155 --> 00:49:52.555
<v Lucas Dohmen>Es macht einmal Docker Pull und einmal Docker-Image-Prune, damit unser Server nicht vollläuft.

00:49:52.975 --> 00:49:56.665
<v Lucas Dohmen>Sorry, docker stack deploy und docker image prune. Das ist alles,

00:49:56.665 --> 00:49:58.885
<v Lucas Dohmen>was es tut. Und dann ist es schon fertig.

00:50:00.335 --> 00:50:06.505
<v Lucas Dohmen>Damit das funktioniert, sieht unser Deployment so aus. Wir taggen die Images,

00:50:07.945 --> 00:50:11.625
<v Lucas Dohmen>auf unserem Docker wie heißt es? Nicht Hub...

00:50:13.955 --> 00:50:14.535
<v Dirk Breuer>Registry.

00:50:15.735 --> 00:50:20.665
<v Lucas Dohmen>Danke dir. Auf der Docker Registry taggen wir die Images.

00:50:21.105 --> 00:50:24.415
<v Lucas Dohmen>Und es gibt einen Tag, den wir für Staging benutzen und einen Tag,

00:50:24.415 --> 00:50:25.515
<v Lucas Dohmen>den wir für Production benutzen.

00:50:25.905 --> 00:50:28.645
<v Lucas Dohmen>Und wenn man einen Docker Stack Deploy macht, dann holt es sich einfach von

00:50:28.645 --> 00:50:32.415
<v Lucas Dohmen>dem entsprechenden Image, also von dem entsprechenden Label,

00:50:32.415 --> 00:50:34.375
<v Lucas Dohmen>das aktuelle Image und fertig ist die Laube.

00:50:34.715 --> 00:50:38.685
<v Lucas Dohmen>Und deswegen ist das unser Prozess. Also dafür sorgen, dass das Tag richtig steht.

00:50:39.695 --> 00:50:43.255
<v Lucas Dohmen>Das passiert bei unserem Staging automatisch. Also alles, was auf dem Main branch

00:50:43.255 --> 00:50:46.185
<v Lucas Dohmen>ist, wird getaggt für Staging.

00:50:46.535 --> 00:50:51.425
<v Lucas Dohmen>Und für Produktion haben wir so ein Mini-Skript, was einmal einfach den Tag draufhängt und fertig.

00:50:52.495 --> 00:50:58.715
<v Lucas Dohmen>Und damit haben wir wirklich einen super einfachen Prozess. Warum benutzen wir

00:50:58.715 --> 00:51:00.435
<v Lucas Dohmen>jetzt überhaupt Capistrano? Wir können ja auch einfach...

00:51:01.415 --> 00:51:04.275
<v Lucas Dohmen>Die zwei Befehle selber ausführen. Der Grund ist eigentlich nur,

00:51:04.275 --> 00:51:10.615
<v Lucas Dohmen>dass wir uns ja auf alle von den Knoten einloggen müssen und auf jedem davon das ausführen müssen.

00:51:11.305 --> 00:51:14.735
<v Lucas Dohmen>Und da gibt uns einfach Capistrano so ein paar Komfortfeature,

00:51:15.185 --> 00:51:19.245
<v Lucas Dohmen>die wir nicht selber bauen wollen und die klappen halt einfach gut.

00:51:19.245 --> 00:51:22.415
<v Lucas Dohmen>Also im Prinzip ist ein bisschen Kanonen auf Spatzen geschossen,

00:51:22.415 --> 00:51:23.885
<v Lucas Dohmen>würde ich jetzt mal sagen.

00:51:24.225 --> 00:51:27.005
<v Lucas Dohmen>Also Capistrano kann so viel und wir machen exakt zwei Dinge.

00:51:27.295 --> 00:51:28.695
<v Dirk Breuer>Ja, es ist eine kleine Kanone.

00:51:29.035 --> 00:51:31.845
<v Lucas Dohmen>Genau, es ist eine kleine Kanone, genau. So würde ich es auch sagen,

00:51:31.845 --> 00:51:32.985
<v Lucas Dohmen>eine Spatzenkanone im Prinzip.

00:51:33.525 --> 00:51:37.655
<v Dirk Breuer>Ach, und selbst ehrlich gesagt, selbst wenn, trotzdem, also bevor ich das selber

00:51:37.655 --> 00:51:43.625
<v Dirk Breuer>schreibe, also würdest du lieber irgendwie eine Sammlung von irgendwie Shell-Skripten

00:51:43.625 --> 00:51:46.395
<v Dirk Breuer>da liegen haben, die irgendwelche SSH-Kommandos da machen?

00:51:46.905 --> 00:51:47.285
<v Lucas Dohmen>Ja...

00:51:47.285 --> 00:51:51.265
<v Dirk Breuer>Du hast so den Vorteil, okay, es gibt so definierte Punkte, die Capistrano ausarbeitet

00:51:51.265 --> 00:51:54.785
<v Dirk Breuer>und in die kannst du dich quasi reinhängen und sagen, was er zu diesem Zeitpunkt machen soll.

00:51:55.265 --> 00:51:59.375
<v Dirk Breuer>Wie Lucas sagte, die meisten davon tun quasi nichts, aber dadurch,

00:51:59.725 --> 00:52:04.445
<v Dirk Breuer>finde ich, wird das Ganze sehr lesbar und nachvollziehbar und man kann bestimmte

00:52:04.445 --> 00:52:06.165
<v Dirk Breuer>Sachen nur auf bestimmten Knoten ausführen.

00:52:07.325 --> 00:52:13.305
<v Dirk Breuer>Ja, daher finde ich das einfach sehr komfortabel, auch wenn es quasi overengineered

00:52:13.305 --> 00:52:16.195
<v Dirk Breuer>ist, aber bevor man einfach auch jetzt mal was Eigenes zusammenzimmert.

00:52:17.045 --> 00:52:21.265
<v Lucas Dohmen>Ja, ich sehe das auch so. Es ist für mich halt das Einzige, wo ich halt das

00:52:21.265 --> 00:52:23.855
<v Lucas Dohmen>Gefühl habe, wir benutzen so einen kleinen Teil davon, es fühlt sich komisch

00:52:23.855 --> 00:52:27.385
<v Lucas Dohmen>an, aber ich gebe dir absolut recht, den kleinen Teil, den wollen wir halt einfach

00:52:27.385 --> 00:52:29.005
<v Lucas Dohmen>haben. Also warum sollen wir ihn ja nicht nutzen.

00:52:29.775 --> 00:52:33.915
<v Lucas Dohmen>Und auch das Tool, das ist auch einfach fertig. Also da brauchst du halt auch

00:52:33.915 --> 00:52:36.535
<v Lucas Dohmen>nicht dir Sorgen zu machen, dass da jetzt ein großer Breaking Change kommt und

00:52:36.535 --> 00:52:37.825
<v Lucas Dohmen>wir müssen alles nochmal neu bauen.

00:52:38.325 --> 00:52:41.385
<v Lucas Dohmen>Das ist einfach fertig. Da wird halt zwischendurch dafür gesorgt,

00:52:41.385 --> 00:52:47.065
<v Lucas Dohmen>dass halt irgendwie alles mit SSH up to date ist und dann passt das halt. Also easy.

00:52:48.475 --> 00:52:53.225
<v Lucas Dohmen>Genau. Und damit habt ihr eigentlich schon bis auf die Datenbank eine gute Übersicht

00:52:53.225 --> 00:52:56.085
<v Lucas Dohmen>über das, was wir da so gebaut haben. Und ich finde.

00:52:59.175 --> 00:53:03.515
<v Lucas Dohmen>Für wen passt dieses Setup? Ich glaube, das Setup passt wirklich für kleine Teams.

00:53:04.075 --> 00:53:07.825
<v Lucas Dohmen>Also ich sage jetzt mal bis zehn Leute, vielleicht sogar noch ein bisschen mehr,

00:53:08.515 --> 00:53:11.625
<v Lucas Dohmen>wo man eben nicht dediziert irgendwelche Leute haben möchte,

00:53:11.625 --> 00:53:13.405
<v Lucas Dohmen>die sich die ganze Zeit nur um Operations kümmern.

00:53:13.405 --> 00:53:17.405
<v Lucas Dohmen>Und dann irgendwie, also so typische "you build it, you run it" Teams,

00:53:17.405 --> 00:53:21.555
<v Lucas Dohmen>die das einfach selber machen wollen, die nicht in einen größeren Kontext eingebunden

00:53:21.555 --> 00:53:24.765
<v Lucas Dohmen>sind, wo sie sich mit anderen Teams noch irgendwelche Komponenten teilen.

00:53:24.765 --> 00:53:28.355
<v Lucas Dohmen>Dann würde unser Setup, glaube ich, an eine Grenze stoßen. Ich glaube,

00:53:28.355 --> 00:53:31.625
<v Lucas Dohmen>da würde ich da eher von abraten und wirklich dazu raten, mal zu überlegen,

00:53:31.625 --> 00:53:33.205
<v Lucas Dohmen>ob so ein Kubernetes dazu gut passt.

00:53:33.695 --> 00:53:37.555
<v Lucas Dohmen>Aber für viele von diesen Mittelständlern ist das, glaube ich,

00:53:37.555 --> 00:53:43.145
<v Lucas Dohmen>eine super, super Lösung, weil es einfach zu verstehen ist, Also wir haben euch

00:53:43.145 --> 00:53:48.335
<v Lucas Dohmen>im Prinzip jetzt durchgeführt durch unsere Dokumentation, die wir dazu geschrieben haben, die interne.

00:53:49.335 --> 00:53:53.495
<v Lucas Dohmen>Und man kann das halt sich hinsetzen mit einem Kaffee in Ruhe,

00:53:53.495 --> 00:53:56.275
<v Lucas Dohmen>einmal das Terraform durchlesen, das Ansible durchlesen und weiß man,

00:53:56.625 --> 00:53:59.225
<v Lucas Dohmen>was da passiert. Da ist nichts Aufregendes dran.

00:54:00.255 --> 00:54:03.885
<v Lucas Dohmen>Und es funktioniert halt einfach unfassbar zuverlässig.

00:54:04.415 --> 00:54:09.695
<v Lucas Dohmen>Und darum mag ich dieses Setup, weil es ist in Anführungsstrichen langweilig.

00:54:09.695 --> 00:54:14.235
<v Lucas Dohmen>Also wir haben ja auch dieses Boring-Tech in unserem Talk auch mal zitiert.

00:54:14.475 --> 00:54:17.865
<v Lucas Dohmen>Es ist halt langweilig in der besten Art und Weise, weil wir müssen es gar nicht

00:54:17.865 --> 00:54:21.705
<v Lucas Dohmen>oft anfassen. Also wir passen es, wie ich ja ausgeführt habe, super selten an.

00:54:22.015 --> 00:54:26.135
<v Lucas Dohmen>Und im Prinzip ist es einfach nur eine Docker-Runtime, wo halt eine Datenbank

00:54:26.135 --> 00:54:29.005
<v Lucas Dohmen>hinterhängt. Und die Datenbank, das ist das eine Teil, was ein bisschen schwieriger

00:54:29.005 --> 00:54:32.505
<v Lucas Dohmen>ist, da kommen wir jetzt gleich nochmal zu, aber alles andere ist halt total

00:54:32.505 --> 00:54:33.815
<v Lucas Dohmen>unaufgeregt. Oder wie siehst du das?

00:54:34.895 --> 00:54:38.055
<v Dirk Breuer>Ja, ich würde, glaube ich, noch einen wichtigen Hinweis hier an der Stelle geben wollen.

00:54:38.825 --> 00:54:42.605
<v Dirk Breuer>Es ist so, wie du sagst, für diese Teamgröße passt das gut.

00:54:43.145 --> 00:54:50.405
<v Dirk Breuer>Es passt aber, glaube ich, nur deswegen auch so gut, wenn du eine monolithische Anwendung hast.

00:54:51.655 --> 00:54:54.845
<v Dirk Breuer>Das haben wir bisher nicht so richtig explizit genannt. Also wenn du dich auch

00:54:54.845 --> 00:54:58.115
<v Dirk Breuer>als kleines Team dazu entschieden hast, ob das eine gute oder schlechte Entscheidung

00:54:58.115 --> 00:55:01.855
<v Dirk Breuer>ist, das ist ein anderes Blatt. Wir haben uns explizit dafür entschieden,

00:55:01.855 --> 00:55:02.885
<v Dirk Breuer>einen Monolithen zu bauen.

00:55:04.655 --> 00:55:06.945
<v Dirk Breuer>Die Anwendung ist ein paar Mal zwischendurch neu geschrieben worden.

00:55:06.945 --> 00:55:11.485
<v Dirk Breuer>Wir hatten auch mal verschiedene Service-Iterationen, so eine Service-Phase,

00:55:11.795 --> 00:55:15.945
<v Dirk Breuer>Sturm- und Drang-Phase, wo wir alles mit Services gemacht haben oder versucht haben,

00:55:15.945 --> 00:55:18.165
<v Dirk Breuer>das zu machen und viele kleinere Anwendungen zu machen.

00:55:18.505 --> 00:55:22.885
<v Dirk Breuer>Dann ist das anstrengend und wir sind irgendwann explizit dazu übergegangen,

00:55:22.885 --> 00:55:25.205
<v Dirk Breuer>okay, wir bauen nur noch einen Monolithen.

00:55:26.235 --> 00:55:27.985
<v Dirk Breuer>Die Worker laufen alle in derselben Codebase,

00:55:28.845 --> 00:55:33.785
<v Dirk Breuer>Und ja, der Image-Service, der läuft irgendwie einzeln, aber selbst auf dieser

00:55:33.785 --> 00:55:38.525
<v Dirk Breuer>Kiste läuft die gesamte Rails-Anwendung nur, um die Worker laufen zu haben,

00:55:39.485 --> 00:55:41.645
<v Dirk Breuer>die die Bilder runterlädt. Die machen sonst nichts, die Dinger.

00:55:42.285 --> 00:55:44.925
<v Dirk Breuer>Die schreiben auch nicht in die Datenbank. Die laden einfach nur Bilder runter.

00:55:45.785 --> 00:55:48.785
<v Dirk Breuer>Die lesen aus der Datenbank. Aber das war es dann auch. Und das ist schon noch

00:55:48.785 --> 00:55:51.555
<v Dirk Breuer>eine wichtige Einschränkung, würde ich sagen.

00:55:51.715 --> 00:55:56.975
<v Dirk Breuer>Ich bin weiterhin der Meinung, dass in so kleinen Teamgrößen das hilfreich ist,

00:55:57.275 --> 00:56:00.895
<v Dirk Breuer>weil es eben einfach langweilig gut funktioniert und du nicht irgendwie zehn

00:56:00.895 --> 00:56:05.315
<v Dirk Breuer>Services hast bei fünf Leuten und jeder weiß nicht mehr, welcher ein Service links und rechts und,

00:56:06.665 --> 00:56:10.265
<v Dirk Breuer>du fängst dann an, doch irgendwie Abhängigkeiten einzubauen und implizite Sachen

00:56:10.265 --> 00:56:12.695
<v Dirk Breuer>zu machen und dann musst du auf einmal drei Services gleichzeitig deployen und

00:56:12.695 --> 00:56:15.035
<v Dirk Breuer>sowas, weil es einfach einfacher ist in so einem kleinen Team.

00:56:15.705 --> 00:56:19.775
<v Dirk Breuer>Aber das ist ein relevanter Aspekt. Wenn du in einem kleinen Team gesagt hast,

00:56:19.775 --> 00:56:24.975
<v Dirk Breuer>okay, wir wollen warum auch immer Services haben, dann wird das auch an die

00:56:24.975 --> 00:56:26.175
<v Dirk Breuer>Grenzen stoßen, würde ich behaupten.

00:56:26.175 --> 00:56:27.375
<v Lucas Dohmen>Ja, definitiv.

00:56:28.365 --> 00:56:30.945
<v Dirk Breuer>Man kann dann sagen, okay, vielleicht macht es trotzdem Sinn,

00:56:31.405 --> 00:56:33.615
<v Dirk Breuer>mit Docker Swarm erstmal zu starten und sich das mal anzuschauen,

00:56:33.615 --> 00:56:35.805
<v Dirk Breuer>was da noch mit geht, bevor man Kubernetes macht.

00:56:36.215 --> 00:56:39.805
<v Dirk Breuer>Einfach weil Kubernetes sehr viel Komplexität in das Team noch zusätzlich trägt

00:56:39.805 --> 00:56:43.195
<v Dirk Breuer>und vielleicht reicht dann Docker Swarm, aber da können wir keine verlässliche

00:56:43.195 --> 00:56:44.145
<v Dirk Breuer>Aussage an der Stelle treffen.

00:56:44.555 --> 00:56:47.715
<v Lucas Dohmen>Ja, das stimmt. Genau.

00:56:48.625 --> 00:56:51.335
<v Lucas Dohmen>Hier nochmal ein kurzer Hinweis für die Leute, die live zuhören.

00:56:51.335 --> 00:56:54.025
<v Lucas Dohmen>Es hören ja ein paar live zu. Wenn ihr Fragen habt, könnt ihr die auch gerne

00:56:54.025 --> 00:56:57.795
<v Lucas Dohmen>in den Chat schreiben. Wir können da gleich auch noch mal kurz darauf eingehen, wenn ihr was habt.

00:56:59.005 --> 00:57:02.685
<v Lucas Dohmen>Sonst würde ich jetzt sagen, lass uns noch mal über den Elefanten im Raum sprechen, Postgres.

00:57:04.405 --> 00:57:05.675
<v Lucas Dohmen>Danke dir, da habe ich lange dran gearbeitet.

00:57:07.735 --> 00:57:11.885
<v Lucas Dohmen>Das ist so der eine Teil, wo wir am Anfang auch überlegt haben,

00:57:12.245 --> 00:57:16.315
<v Lucas Dohmen>ist das ein Grund, nicht Hetzner Cloud auszuwählen für uns.

00:57:16.315 --> 00:57:20.685
<v Lucas Dohmen>Also wir haben uns ja damals für Hetzner Cloud entschieden und Hetzner Cloud

00:57:20.685 --> 00:57:25.605
<v Lucas Dohmen>bietet eben keine Database-as-a-Service an. Es gibt auch andere kleinere Cloud-Anbieter,

00:57:25.605 --> 00:57:29.865
<v Lucas Dohmen>die das anbieten, aber bei Hetzner ist es aktuell nicht im Portfolio.

00:57:31.265 --> 00:57:35.745
<v Lucas Dohmen>Wenn es da wäre, würden wir es kaufen dann würden wir dann sagen okay,

00:57:36.445 --> 00:57:41.415
<v Lucas Dohmen>hier nehmt dieses Geld und macht das für uns aber wir haben uns trotzdem dafür

00:57:41.415 --> 00:57:45.065
<v Lucas Dohmen>entschieden, dort hinzugehen und das ist so das eine,

00:57:46.395 --> 00:57:50.365
<v Lucas Dohmen>wo wir überhaupt Maintenance Aufwand haben, würde ich sagen eben im Operations

00:57:50.365 --> 00:57:58.125
<v Lucas Dohmen>Bereich der Rest läuft einfach. Bei der Datenbank haben wir uns also wir müssen

00:57:58.125 --> 00:58:00.745
<v Lucas Dohmen>erstmal einmal damit starten: Wofür haben wir uns entschieden?

00:58:00.745 --> 00:58:04.015
<v Lucas Dohmen>Wir haben uns für ein Single-Node-Setup entschieden. Also wir haben keine Follower

00:58:04.015 --> 00:58:09.895
<v Lucas Dohmen>auf der Datenbank für High Availability oder so etwas,

00:58:11.805 --> 00:58:16.385
<v Lucas Dohmen>weil das Management sagt, das ist das zusätzliche Geld nicht wert,

00:58:16.385 --> 00:58:19.655
<v Lucas Dohmen>einen zweiten Server zu haben und vor allem den zusätzlichen Aufwand,

00:58:19.655 --> 00:58:21.205
<v Lucas Dohmen>all dieses Setup dazu zu machen.

00:58:21.505 --> 00:58:24.585
<v Lucas Dohmen>Wenn das Ding mal eine Stunde oder zwei offline ist, dann ist das halt so.

00:58:24.585 --> 00:58:28.375
<v Lucas Dohmen>Dann schaltet eine Maintenance-Page, macht die Datenbank wieder heile und alles

00:58:28.375 --> 00:58:33.055
<v Lucas Dohmen>ist in Ordnung. Das ist eine Entscheidung, die, glaube ich, zu wenige Unternehmen treffen.

00:58:33.175 --> 00:58:37.895
<v Dirk Breuer>Das ist ein wichtiger Punkt, Lucas. Das ist ja keine Entscheidung,

00:58:37.895 --> 00:58:40.945
<v Dirk Breuer>die man leichtfertig trifft, wo viele sagen,

00:58:41.885 --> 00:58:46.665
<v Dirk Breuer>wenn man liest von High Availability und diesem ganzen Kram und die Five Nines

00:58:46.665 --> 00:58:50.555
<v Dirk Breuer>und so ein Spökes, die mit Verbindung mit Kosten und Aufwände,

00:58:50.555 --> 00:58:51.625
<v Dirk Breuer>was ja dann auch Kosten sind,

00:58:52.725 --> 00:58:57.585
<v Dirk Breuer>sind gerade für kleine Teams sehr, sehr hoch und kann man sich nicht so richtig gut vorstellen.

00:58:57.585 --> 00:59:01.905
<v Dirk Breuer>Und dass das Management dann hingeht und sagt, okay, jetzt lassen wir mal ganz

00:59:01.905 --> 00:59:04.795
<v Dirk Breuer>Tacheles reden. Was bedeutet das, wenn wir zwei Stunden offline sind?

00:59:04.795 --> 00:59:08.835
<v Dirk Breuer>Und wie oft kommt das denn überhaupt vor? Maschinen

00:59:08.835 --> 00:59:11.335
<v Dirk Breuer>sind stabiler geworden, Software insgesamt ist einfach sehr viel stabiler

00:59:11.335 --> 00:59:14.845
<v Dirk Breuer>geworden, ist das Risiko da so gering, dass sich dieser Aufwand eben für uns

00:59:14.845 --> 00:59:16.665
<v Dirk Breuer>dann am Ende des Tages nicht gelohnt hat.

00:59:17.055 --> 00:59:20.895
<v Dirk Breuer>Wenn man das so erzählt, dann kommen immer so, boah, was nur eine Node, was ist da los?

00:59:21.255 --> 00:59:26.055
<v Dirk Breuer>Aber ja, am Ende des Tages hatten wir deswegen auf jeden Fall noch nie Probleme. Doch, einmal.

00:59:26.825 --> 00:59:29.475
<v Dirk Breuer>Ja, aber es hätte uns auch nichts gebracht, wenn wir einen Follower gehabt hätten.

00:59:29.475 --> 00:59:29.815
<v Lucas Dohmen>Das stimmt.

00:59:30.415 --> 00:59:34.375
<v Dirk Breuer>Dann wäre der auch gestorben in dem Zusammenhang. Und es ist nicht so,

00:59:34.375 --> 00:59:37.315
<v Dirk Breuer>dass wir das jetzt seit dem Umzug auf die Simple Cloud haben.

00:59:37.315 --> 00:59:44.255
<v Dirk Breuer>Auch in der AWS-Welt, also seit knapp zwölf Jahren, fahren wir auf einem Single-Node-Datenbank-Setup

00:59:44.635 --> 00:59:48.545
<v Dirk Breuer>ohne Follower und hatten kein einziges Mal ernsthafte Probleme dadurch.

00:59:48.855 --> 00:59:51.735
<v Dirk Breuer>Wo wir gesagt haben, boah, jetzt sind wir irgendwie tagelang offline,

00:59:51.735 --> 00:59:54.475
<v Dirk Breuer>hätten wir doch mal so einen Follower gehabt und einen Hot Standby und dann

00:59:54.475 --> 00:59:56.315
<v Dirk Breuer>wäre alles gut gewesen, haben wir aber leider nicht.

00:59:56.315 --> 00:59:56.545
<v Lucas Dohmen>Genau.

00:59:56.545 --> 01:00:02.155
<v Dirk Breuer>Und selbst als wir, gut, jetzt in der Simple-Cloud-Welt haben wir noch keine,

01:00:02.615 --> 01:00:06.585
<v Dirk Breuer>Major-Datenbank-Upgrades gemacht, ein paar kleinere Upgrades,

01:00:07.975 --> 01:00:13.035
<v Dirk Breuer>aber in der AWS-Welt haben wir eine Reihe von Major-Upgrades gemacht,

01:00:13.035 --> 01:00:17.195
<v Dirk Breuer>also alle, die halt angefallen sind, was irgendwie, glaube ich,

01:00:17.195 --> 01:00:20.575
<v Dirk Breuer>vier oder fünf waren, nee, noch mehr, müssten sechs gewesen sein oder so,

01:00:20.575 --> 01:00:21.375
<v Dirk Breuer>aber auf jeden Fall viele.

01:00:21.975 --> 01:00:25.465
<v Dirk Breuer>Und das ist mit Downtime verbunden. Das ist mittlerweile auch nicht mehr ganz

01:00:25.465 --> 01:00:26.785
<v Dirk Breuer>so schlimm. Das ist auch besser geworden.

01:00:27.735 --> 01:00:32.215
<v Dirk Breuer>Ja, aber daher haben wir da nie große Probleme mit gehabt. Was man noch als

01:00:32.215 --> 01:00:34.915
<v Dirk Breuer>Hinweis, glaube ich, einsortieren, wir haben uns auch entschieden,

01:00:34.915 --> 01:00:39.185
<v Dirk Breuer>so einen Cloud-Server herzunehmen, Lucas. Wir haben keine Dedicated-Kisten genommen.

01:00:40.375 --> 01:00:45.315
<v Dirk Breuer>Die sind kostentechnisch ja im Grunde etwas attraktiver und du kriegst nochmal

01:00:45.315 --> 01:00:47.745
<v Dirk Breuer>irgendwie dedizierter diese Ressourcen zur Verfügung gestellt.

01:00:48.055 --> 01:00:53.355
<v Dirk Breuer>Das hat im Grunde ausschließlich so verwaltungstechnische Gründe bei uns jetzt gehabt,

01:00:54.415 --> 01:00:57.855
<v Dirk Breuer>weil das quasi zwei Produkte sind bei Hetzner und auch zwei Firmen irgendwie,

01:00:58.795 --> 01:01:03.165
<v Dirk Breuer>und der Dedicated Server sich nicht über die API, wie er so einen Cloud-Server steuern lässt.

01:01:03.165 --> 01:01:06.195
<v Dirk Breuer>Das ist quasi der einzige Grund, warum wir das nicht gemacht haben.

01:01:06.455 --> 01:01:09.725
<v Dirk Breuer>Es hätte einfach zusätzlichen Aufwand bedeutet, sowohl den Server zu regeln,

01:01:09.725 --> 01:01:11.805
<v Dirk Breuer>also die Netzwerke zu mischen und so ein Kram.

01:01:12.455 --> 01:01:14.635
<v Dirk Breuer>Deswegen haben wir das nicht gemacht und deswegen ist es auch ein Cloud-Server.

01:01:15.325 --> 01:01:20.405
<v Lucas Dohmen>Genau. Und ein wichtiger Aspekt ist, weil das glaube ich auch bei vielen im

01:01:20.405 --> 01:01:23.505
<v Lucas Dohmen>Kopf irgendwie ist, ist, was ist denn mit Datenverlusten und so weiter.

01:01:23.505 --> 01:01:26.255
<v Lucas Dohmen>Und das ist aus unserer Sicht eben einfach ein separates Thema.

01:01:26.255 --> 01:01:32.295
<v Lucas Dohmen>Also der Server, auf dem läuft Postgres und pgBackrest. pgBackRest ist eine,

01:01:32.745 --> 01:01:34.665
<v Lucas Dohmen>Backup-Software für Postgres.

01:01:35.075 --> 01:01:39.865
<v Lucas Dohmen>An der Stelle packe ich auch nochmal in die Shownotes eine sehr gute Podcast-Episode,

01:01:40.365 --> 01:01:45.725
<v Lucas Dohmen>von Postgres.fm, die wir uns dazu angehört hatten, wo diese Empfehlung auch herkam.

01:01:45.725 --> 01:01:48.445
<v Lucas Dohmen>Das haben wir natürlich dann auch nochmal an weiteren Stellen uns auch nochmal,

01:01:49.105 --> 01:01:52.465
<v Lucas Dohmen>schlau zugelesen. Aber ja, eine von den wichtigen Sätzen ist halt,

01:01:52.925 --> 01:01:54.885
<v Lucas Dohmen>pgdump ist kein Backup-Tool.

01:01:55.205 --> 01:01:58.075
<v Lucas Dohmen>Also das ist eine der ganz wichtigen Sachen. Das steht auch tatsächlich in der

01:01:58.075 --> 01:02:01.285
<v Lucas Dohmen>Dokumentation von pgdump. Trotzdem ist es, glaube ich, das am meisten verwendete

01:02:01.285 --> 01:02:02.855
<v Lucas Dohmen>Backup-Tool für Postgres.

01:02:05.145 --> 01:02:09.695
<v Lucas Dohmen>Was macht pgBackRest? pgBackRest bietet uns eine sogenannte Point-in-Time-Recovery.

01:02:09.695 --> 01:02:13.625
<v Lucas Dohmen>Das heißt, wir können tatsächlich zu jedem Zeitpunkt in der zurückspringen.

01:02:13.625 --> 01:02:17.575
<v Lucas Dohmen>Wir können sagen, hier, stell das Backup von 13:02 Uhr wieder her.

01:02:17.575 --> 01:02:22.845
<v Lucas Dohmen>Ja, und das macht es eben, indem es inkrementell Daten wegschreibt.

01:02:23.545 --> 01:02:26.875
<v Lucas Dohmen>Also alles, was in den Write-Ahead-Log von der Datenbank geschrieben wird,

01:02:26.875 --> 01:02:28.065
<v Lucas Dohmen>wird halt quasi weggeschrieben.

01:02:28.495 --> 01:02:32.375
<v Lucas Dohmen>Und zwar auf ein S3, also das von Hetzner, das ist wie Tempo.

01:02:32.375 --> 01:02:34.675
<v Lucas Dohmen>Ich sage einfach S3, ich habe mich daran mittlerweile so gewohnt.

01:02:34.915 --> 01:02:35.165
<v Dirk Breuer>Ist okay.

01:02:35.725 --> 01:02:41.745
<v Lucas Dohmen>Also wir schreiben auf diesen S3-Bucket, schreiben wir all diese Informationen, legen die dort ab.

01:02:42.175 --> 01:02:47.385
<v Lucas Dohmen>Und wenn jetzt dieser ganze Server und sein Volume sich einfach explodiert,

01:02:47.385 --> 01:02:51.095
<v Lucas Dohmen>dann haben wir alles auf dem S3-Bucket auch drauf. Das heißt,

01:02:51.095 --> 01:02:53.035
<v Lucas Dohmen>wir können das aus diesem Backup wiederherstellen.

01:02:54.135 --> 01:02:58.295
<v Lucas Dohmen>Und das ist kein Grund, rauszugehen aus dem Single-Node-Setup.

01:03:01.995 --> 01:03:06.125
<v Lucas Dohmen>Und darum, überlegt einfach nochmal, ob ihr das wirklich braucht.

01:03:06.125 --> 01:03:10.705
<v Lucas Dohmen>Also wir haben die Eigenschaft, und das ist auch keine unübliche Eigenschaft,

01:03:10.995 --> 01:03:16.305
<v Lucas Dohmen>dass es klare Maintenance-Windows geben kann. Also zwischen 1 Uhr und 3 Uhr

01:03:16.305 --> 01:03:19.415
<v Lucas Dohmen>nachts passiert auf unseren Servern so gut wie nichts.

01:03:19.675 --> 01:03:22.725
<v Lucas Dohmen>Wenn man da eine Maintenance-Seite schaltet, merkt das nicht mal jemand.

01:03:23.125 --> 01:03:26.935
<v Lucas Dohmen>Also weil halt alle Leute aus Europa auf diese Seite zugreifen,

01:03:26.935 --> 01:03:29.415
<v Lucas Dohmen>wir sind halt nicht weltweit verteilt. Aber das sind die meisten ja nicht.

01:03:30.205 --> 01:03:32.825
<v Lucas Dohmen>Das heißt, wenn wir jetzt so ein Postgres-Backup machen, dann machen wir das

01:03:32.825 --> 01:03:33.985
<v Lucas Dohmen>natürlich nicht um 13 Uhr.

01:03:34.385 --> 01:03:37.345
<v Lucas Dohmen>Sondern machen wir, also ein Update, sorry, ein Postgres-Update machen,

01:03:37.345 --> 01:03:40.105
<v Lucas Dohmen>dann machen wir das natürlich nicht in der Prime-Time. Dann machen wir das halt

01:03:40.105 --> 01:03:41.795
<v Lucas Dohmen>zu dem Zeitpunkt, wo halt so gut wie nichts los ist.

01:03:43.125 --> 01:03:51.585
<v Lucas Dohmen>Und das wäre aus meiner Sicht ja einfach was, was man sich überlegen kann.

01:03:51.975 --> 01:03:56.835
<v Lucas Dohmen>Ist es jetzt total schmerzfrei? Nein. Also wir mussten mehrfach nochmal an der

01:03:56.835 --> 01:03:58.975
<v Lucas Dohmen>Konfiguration am Anfang rumtunen.

01:03:59.785 --> 01:04:04.155
<v Lucas Dohmen>Wir haben ab und zu einen Restart vom Server, den wir aktuell untersuchen.

01:04:04.155 --> 01:04:06.695
<v Lucas Dohmen>Es sind halt so ärgerliche Kleinigkeiten, mit denen man sich eigentlich nicht

01:04:06.695 --> 01:04:09.435
<v Lucas Dohmen>beschäftigen will, wo man am liebsten einfach jemanden für bezahlt,

01:04:09.435 --> 01:04:10.385
<v Lucas Dohmen>dass er das für einen macht.

01:04:10.785 --> 01:04:15.435
<v Lucas Dohmen>Aber an sich funktioniert auch das sehr gut und wir haben auf jeden Fall nicht

01:04:15.435 --> 01:04:20.145
<v Lucas Dohmen>bereut so ein einfaches Setup zu haben von einem Single Node mit ordentlichem Point in Time Recovery.

01:04:21.445 --> 01:04:26.075
<v Dirk Breuer>Und diese, also da sind Probleme, die man auch noch nicht wegdiskutieren kann.

01:04:26.075 --> 01:04:31.065
<v Dirk Breuer>Diese Random Restarts der Datenbank sind einfach nervig und ja,

01:04:31.065 --> 01:04:34.755
<v Dirk Breuer>die Konfigurationssachen waren auch nervig, aber das sind so Dinge,

01:04:35.555 --> 01:04:39.665
<v Dirk Breuer>die so ein bisschen Haus gemacht sind, weil ich glaube, wir haben so in den

01:04:39.665 --> 01:04:45.825
<v Dirk Breuer>letzten 10, 15 Jahren, gerade so als Webentwickler, uns ganz schön wohlig damit

01:04:45.825 --> 01:04:49.585
<v Dirk Breuer>gefühlt, die Datenbank, das ist so ein Dienst, den habe ich einfach.

01:04:49.585 --> 01:04:53.055
<v Dirk Breuer>Mir wurscht, wie der genau funktioniert. Ich mache mir da wenig Gedanken mit,

01:04:54.075 --> 01:04:57.535
<v Dirk Breuer>was da genau dranhängt und auch gucke da wenig rein.

01:04:57.855 --> 01:04:59.875
<v Dirk Breuer>Wie kann ich das irgendwie weiter optimieren?

01:05:00.475 --> 01:05:03.755
<v Dirk Breuer>Und das hört da ja nicht mit auf. Man macht sich überhaupt wenig Gedanken.

01:05:03.755 --> 01:05:05.505
<v Dirk Breuer>Wie kann ich meine Queries optimieren?

01:05:06.335 --> 01:05:09.285
<v Dirk Breuer>Also das haben wir auch immer wieder festgestellt. Das ist, glaube ich,

01:05:09.285 --> 01:05:14.165
<v Dirk Breuer>so auf der Seite ganz gut, dass man sich mal gezwungen fühlt, jetzt da genauer reinzuschauen.

01:05:14.875 --> 01:05:19.245
<v Dirk Breuer>Aber nichtsdestotrotz gibt es einfach konkrete Dinge, die nicht ganz so sauber funktionieren.

01:05:20.215 --> 01:05:23.065
<v Dirk Breuer>Die ein Stück weit vielleicht auch damit zu tun haben, dass es immer so eine

01:05:23.065 --> 01:05:30.685
<v Dirk Breuer>Simple Cloud ist und alles nicht ganz so hochverfügbare Hardware ist und alles Top-Performance.

01:05:31.715 --> 01:05:35.525
<v Dirk Breuer>Genau, also wir hatten solche Ausfälle halt nie bei AWS. Das muss man halt einfach

01:05:35.525 --> 01:05:38.935
<v Dirk Breuer>auch dazu sagen und wahrscheinlich auch bei einem anderen großen Anbieter,

01:05:39.395 --> 01:05:42.255
<v Dirk Breuer>wo man dann signifikant Geld da drauf wirft, nicht.

01:05:43.755 --> 01:05:47.725
<v Dirk Breuer>Ja, aber bereut habe ich es auf jeden Fall nicht definitiv. Und dieses simple

01:05:47.725 --> 01:05:52.525
<v Dirk Breuer>Setup mit kein Failover und Hot Standby und was man alles da noch machen könnte,

01:05:53.395 --> 01:05:54.655
<v Dirk Breuer>hilft dabei auf jeden Fall.

01:05:55.205 --> 01:05:56.335
<v Lucas Dohmen>Ja, definitiv.

01:05:56.985 --> 01:06:01.415
<v Lucas Dohmen>Wir haben jetzt noch eine Frage aus dem Publikum und zwar von Ultrakatel.

01:06:02.095 --> 01:06:04.905
<v Lucas Dohmen>Würdet ihr heute noch Hetzner wählen, trotz der Preiserhöhung?

01:06:04.905 --> 01:06:07.675
<v Lucas Dohmen>Magst du kurz ein bisschen was nochmal zu dem Pricing-Thema sagen?

01:06:07.815 --> 01:06:12.085
<v Dirk Breuer>Genau, also Hetzner ist sicherlich dafür berühmt, dass es sehr,

01:06:12.085 --> 01:06:14.765
<v Dirk Breuer>sehr günstige Preise hat, sehr kompetitive Preise.

01:06:15.175 --> 01:06:20.935
<v Dirk Breuer>Das liegt nicht daran, dass sie Ramschware verkaufen, sondern da gab es letztes,

01:06:20.935 --> 01:06:22.845
<v Dirk Breuer>das kann man vielleicht mal verlinken, das fand ich sehr spannend,

01:06:22.845 --> 01:06:25.555
<v Dirk Breuer>das Video, wie es bei Hetzner in den Rechenzentren aussieht.

01:06:25.555 --> 01:06:29.585
<v Dirk Breuer>Das ist schon hoch effizient gestaltet und deswegen können die einfach auch

01:06:29.585 --> 01:06:31.035
<v Dirk Breuer>sehr günstige Preise anbieten.

01:06:32.055 --> 01:06:37.245
<v Dirk Breuer>Das liegt auch daran, dass sie quasi Consumer-Hardware verwenden und nicht sehr,

01:06:37.245 --> 01:06:40.235
<v Dirk Breuer>sehr teure spezielle Server-Hardware.

01:06:40.815 --> 01:06:45.515
<v Dirk Breuer>Ob das als Sternchen, ob das AWS tut, für die meisten Instanzen würde ich bezweifeln.

01:06:45.835 --> 01:06:48.235
<v Dirk Breuer>Die werden das Gleiche tun, dass es einfach Common Hardware ist,

01:06:48.585 --> 01:06:52.325
<v Dirk Breuer>weil nochmal gerade im Cloud-Umfeld, das ist darauf ausgelegt,

01:06:52.325 --> 01:06:55.735
<v Dirk Breuer>dass das Zeug wegbricht. Und wenn dann einer abkachelt, dann ist er halt abgekachelt.

01:06:57.805 --> 01:07:02.445
<v Dirk Breuer>Diese Preise konnte Hetzner nicht halten seit Anbeginn des Jahres.

01:07:02.445 --> 01:07:06.085
<v Dirk Breuer>Das liegt nicht daran, dass Hetzner gierig geworden ist, sondern es liegt daran,

01:07:06.085 --> 01:07:07.555
<v Dirk Breuer>dass andere gierig geworden sind.

01:07:09.665 --> 01:07:13.835
<v Dirk Breuer>Wir bedanken uns an dieser Stelle bei KI. Das hat einfach die Preise für alle,

01:07:14.375 --> 01:07:17.055
<v Dirk Breuer>extrem in die Höhe getrieben und nicht nur die Preise in die Höhe getrieben,

01:07:17.055 --> 01:07:22.335
<v Dirk Breuer>sondern auch die Verfügbarkeit von Hardware einfach zum absoluten Mangel gemacht.

01:07:22.815 --> 01:07:26.035
<v Dirk Breuer>Und die großen Anbieter, die ihre Hardware stellenweise selber bauen,

01:07:26.035 --> 01:07:30.285
<v Dirk Breuer>wie AWS mit den Graviton-Prozessoren, können das so ein bisschen tanken,

01:07:30.285 --> 01:07:34.485
<v Dirk Breuer>wie man so heute in Neudeutsch sagt, und das irgendwie wegstecken.

01:07:34.485 --> 01:07:40.115
<v Dirk Breuer>Aber auch da sind Preiserhöhungen ja nicht, also die machen ja nicht die Preise,

01:07:40.775 --> 01:07:43.715
<v Dirk Breuer>weniger hoch, nur weil sie schon hohe Preise haben. Die sagen ja nicht,

01:07:43.715 --> 01:07:46.015
<v Dirk Breuer>hallo, ich wollte bei der gleichen Marge bleiben.

01:07:46.605 --> 01:07:50.175
<v Dirk Breuer>So, und Hetzner musste die jetzt halt anheben. So, das ist, woher die kommen.

01:07:50.175 --> 01:07:54.045
<v Dirk Breuer>Die haben die zweimal angehoben. Wir haben einmal die Einrichtungsgebühr irgendwie

01:07:54.045 --> 01:07:56.285
<v Dirk Breuer>um Faktor 3 hochgedreht,

01:07:57.145 --> 01:08:05.375
<v Dirk Breuer>Vor allem für die Dedicated-Kisten. Das war ja, weil das quasi den Server sozusagen großteils finanziert.

01:08:05.375 --> 01:08:08.395
<v Dirk Breuer>Selbst wenn du nur einen Monat behältst, dann ist der über die Einrichtungsgebühr

01:08:08.395 --> 01:08:11.295
<v Dirk Breuer>quasi dann schon nicht komplett abgeschrieben.

01:08:11.295 --> 01:08:15.475
<v Dirk Breuer>Aber ja, das stellt sicher, dass du nicht sehr günstig einfach jeden Monat einen

01:08:15.475 --> 01:08:18.095
<v Dirk Breuer>neuen Server machst und die da auf den Kosten hängen bleiben.

01:08:18.095 --> 01:08:21.975
<v Dirk Breuer>Aber auch die Mieten für die Cloud-Server sind deutlich nach oben gegangen.

01:08:23.245 --> 01:08:26.735
<v Dirk Breuer>Wir würden das genauso wieder machen, weil, was ist die Alternative?

01:08:26.735 --> 01:08:31.175
<v Dirk Breuer>Also, diese Preiserhöhung ist einfach da im Markt.

01:08:32.765 --> 01:08:37.365
<v Dirk Breuer>Und wir haben uns dafür entschieden, aus politischen Gründen ja auch weg von

01:08:37.805 --> 01:08:41.185
<v Dirk Breuer>AWS zu gehen, zu einem lokalen Anbieter.

01:08:41.565 --> 01:08:47.305
<v Dirk Breuer>Und ja, das ist dann einfach so da mitzutragen. Und zur Einsortierung muss man

01:08:47.305 --> 01:08:51.625
<v Dirk Breuer>vielleicht noch sagen, trotz der Preiserhöhung haben wir immer noch 70 Prozent

01:08:51.625 --> 01:08:54.625
<v Dirk Breuer>der Kosten gespart, so 70 bis 75 Prozent.

01:08:55.955 --> 01:08:59.555
<v Lucas Dohmen>Genau. Ich glaube, das ist ein ganz wichtiger Punkt, weil irgendwie man hört,

01:08:59.925 --> 01:09:02.645
<v Lucas Dohmen>es ist so und so vielfach gestiegen. Oh mein Gott, lohnt es sich jetzt noch?

01:09:02.955 --> 01:09:05.685
<v Lucas Dohmen>Es ist immer noch deutlich günstiger, wie du ja ausgeführt hast.

01:09:05.685 --> 01:09:09.145
<v Lucas Dohmen>Also das ist, glaube ich, schon wichtig zu betonen. Vielen Dank für die Frage.

01:09:09.425 --> 01:09:13.475
<v Dirk Breuer>Ja, ein sehr wichtiger Punkt. Also es ist durchaus insgesamt einfach ein wichtiges

01:09:13.475 --> 01:09:16.515
<v Dirk Breuer>Thema, was man sich klar machen muss und wo man dann auch noch sagen muss,

01:09:16.515 --> 01:09:19.355
<v Dirk Breuer>in was für einer Situation wir gerade hängen mit Hardwarepreisen.

01:09:20.975 --> 01:09:27.395
<v Lucas Dohmen>Genau, absolut. Und kein Anbieter außerhalb von den Hyperscalern wird euch davor

01:09:27.835 --> 01:09:30.185
<v Lucas Dohmen>direkt schützen und die werden euch auch irgendwann nicht mehr schützen.

01:09:30.185 --> 01:09:36.075
<v Lucas Dohmen>Also das sollte euch bewusst sein. Das ist jetzt nicht eine spezifische Hetzner-Sache.

01:09:36.075 --> 01:09:38.685
<v Lucas Dohmen>Ich glaube, die hätten sich einen Gefallen getan, wenn sie das ein bisschen

01:09:38.685 --> 01:09:42.315
<v Lucas Dohmen>anders verkauft hätten, diese ganze Sache.

01:09:42.995 --> 01:09:48.085
<v Lucas Dohmen>Aber an sich ist das keine Besonderheit von Hetzner. Es ist halt einfach nur,

01:09:48.085 --> 01:09:52.285
<v Lucas Dohmen>glaube ich, noch mehr besprochen worden, weil Hetzner ja gerade für seine günstigen

01:09:52.285 --> 01:09:54.495
<v Lucas Dohmen>Preise bekannt ist. Ich glaube, das ist so der Effekt.

01:09:54.495 --> 01:09:58.765
<v Dirk Breuer>Also die Details oder die Interna sind uns natürlich nicht bekannt.

01:09:59.205 --> 01:10:02.845
<v Dirk Breuer>Ich weiß ja nicht, ob die die rausgeben würden oder so. Aber ich kann mir schon

01:10:02.845 --> 01:10:05.335
<v Dirk Breuer>vorstellen, dass denen das so ein bisschen um die Ohren geflogen ist und sie

01:10:05.335 --> 01:10:08.105
<v Dirk Breuer>relativ schnell handeln mussten und irgendwie gucken mussten,

01:10:08.105 --> 01:10:09.345
<v Dirk Breuer>dass sie das in den Griff bekommen.

01:10:10.595 --> 01:10:15.545
<v Dirk Breuer>Ja, und dann ist es manchmal nicht optimal kommuniziert, aber die Kosten sind

01:10:15.545 --> 01:10:19.295
<v Dirk Breuer>einfach nach oben gestiegen. Das hat nichts mit Hetzners Gier an der Stelle zu tun.

01:10:21.505 --> 01:10:25.125
<v Lucas Dohmen>Ja, sehe ich auch so. Haben wir noch irgendwas? Wir sind schon ein bisschen

01:10:25.125 --> 01:10:31.305
<v Lucas Dohmen>über der Zeit drüber. Haben wir noch irgendwas vergessen oder sind wir soweit mit allem durch?

01:10:31.305 --> 01:10:35.525
<v Dirk Breuer>Also wie gesagt, die Datenbank ist sicherlich der spannende Teil,

01:10:35.525 --> 01:10:37.295
<v Dirk Breuer>weil immer da, wo State liegt, ist spannend.

01:10:38.145 --> 01:10:41.185
<v Dirk Breuer>Achso, eine Sache zur Datenbank haben wir noch nicht erwähnt.

01:10:41.325 --> 01:10:44.605
<v Dirk Breuer>Die Datenbank ist zwar ein Cloud-Server, aber die lässt sich natürlich nicht

01:10:44.605 --> 01:10:47.405
<v Dirk Breuer>einfach so mit Terraform einfach so steuern.

01:10:47.405 --> 01:10:52.935
<v Dirk Breuer>Also das erfordert extra Aufwand, die Cloud-Instanz auszutauschen.

01:10:52.935 --> 01:10:55.705
<v Dirk Breuer>Deswegen ist die auch immer noch die gleiche wie eh und je.

01:10:56.125 --> 01:11:01.155
<v Dirk Breuer>Da machen wir quasi die, also alle anderen lassen sich quasi,

01:11:01.545 --> 01:11:04.295
<v Dirk Breuer>wenn wir ein Update des Kernels machen wollen, oder der Kiste selber,

01:11:04.295 --> 01:11:08.475
<v Dirk Breuer>das ist kein Problem, aber die Datenbank, die müssen wir so ein bisschen separat behandeln.

01:11:08.795 --> 01:11:13.875
<v Dirk Breuer>Einfach, weil sie diesen State hat und das nicht ganz so komfortabel,

01:11:13.875 --> 01:11:17.585
<v Dirk Breuer>wie man das vielleicht sich wünschen würde oder von so einem Hyperscaler kennt,

01:11:17.585 --> 01:11:20.415
<v Dirk Breuer>dann läuft. Also das kommt ja nicht dauernd vor.

01:11:20.935 --> 01:11:24.555
<v Dirk Breuer>Aber wenn da intensivere Sachen dran gemacht werden müssen, dann gibt es einen

01:11:24.555 --> 01:11:28.345
<v Dirk Breuer>Downtime und dann muss man auch händisch irgendwie ran an die Kiste.

01:11:28.515 --> 01:11:30.375
<v Dirk Breuer>Das vielleicht noch so abschließend.

01:11:31.275 --> 01:11:34.925
<v Lucas Dohmen>Okay, wir haben jetzt noch, Ultrakatel hat uns noch eine Frage gestellt,

01:11:34.925 --> 01:11:38.485
<v Lucas Dohmen>wir beantworten die noch ganz kurz, aber dann müssen wir tatsächlich mal Feierabend machen.

01:11:38.625 --> 01:11:41.835
<v Lucas Dohmen>Wie aufwendig ist dein Umzug auch ohne Vendor-Lockin?

01:11:42.165 --> 01:11:48.125
<v Lucas Dohmen>Also ich verstehe die Frage jetzt so, wie teuer wäre er jetzt noch,

01:11:48.125 --> 01:11:50.725
<v Lucas Dohmen>wenn wir jetzt nochmal umziehen würden von Hetzner woanders hin,

01:11:50.725 --> 01:11:53.765
<v Lucas Dohmen>weil wir jetzt kein Vendor-Lockin mehr haben. Verstehst du die Frage auch so, Dirk?

01:11:54.965 --> 01:11:56.745
<v Dirk Breuer>Ja, ja. Ja, würde ich sagen.

01:11:58.225 --> 01:12:05.265
<v Lucas Dohmen>Also im Prinzip müssten wir dafür das Terraform leicht anpassen,

01:12:05.265 --> 01:12:09.695
<v Lucas Dohmen>weil das ist ja providerabhängig an ein paar Stellen.

01:12:10.155 --> 01:12:15.265
<v Lucas Dohmen>Das Ansible könnten wir beibehalten, so wie es ist, weil das geht ja einfach

01:12:15.265 --> 01:12:19.745
<v Lucas Dohmen>nur von einem normalen Docker auf einem Ubuntu aus. Also das ist ja auch ein

01:12:19.745 --> 01:12:22.325
<v Lucas Dohmen>totaler Standard, würde wahrscheinlich auch auf dem Debian funktionieren,

01:12:22.325 --> 01:12:23.245
<v Lucas Dohmen>würde ich jetzt mal davon ausgehen.

01:12:24.685 --> 01:12:28.035
<v Lucas Dohmen>Das das Capistrano-Zeug, das kann alles gleich bleiben.

01:12:28.935 --> 01:12:33.265
<v Lucas Dohmen>Im Prinzip ist der Hauptaufwand, den wir hätten, den State halt umzuziehen.

01:12:33.265 --> 01:12:35.205
<v Lucas Dohmen>Das ist immer das Ding, man muss halt einmal das,

01:12:37.185 --> 01:12:41.965
<v Lucas Dohmen>Backup auf den Stand bringen, Pause drücken, damit man eben woanders hingehen

01:12:41.965 --> 01:12:48.615
<v Lucas Dohmen>kann, das dort einspielen und dann im CDN umbiegen. Das ist im Prinzip das, was da anstehen würde.

01:12:48.895 --> 01:12:51.755
<v Lucas Dohmen>Das heißt, ich würde sagen, der Aufwand wäre überschaubar.

01:12:52.055 --> 01:12:55.175
<v Dirk Breuer>Ja, würde ich auch sagen. Und das lässt sich auch dadurch belegen,

01:12:55.555 --> 01:13:00.015
<v Dirk Breuer>dass auch der Aufwand am Ende von AWS weg überschaubar war.

01:13:01.295 --> 01:13:05.315
<v Dirk Breuer>Das Projekt hat insgesamt relativ lange Zeit gekostet, aber nicht,

01:13:05.315 --> 01:13:07.915
<v Dirk Breuer>weil so viel umzuziehen war, sondern weil wir,

01:13:08.975 --> 01:13:12.365
<v Dirk Breuer>viele der Vereinfachungen, die wir auf der neuen Zielstruktur haben wollten

01:13:12.365 --> 01:13:14.745
<v Dirk Breuer>oder Zielinfrastruktur haben wollten, schon bei AWS gemacht haben,

01:13:14.745 --> 01:13:16.625
<v Dirk Breuer>um den Diff so klein wie möglich zu halten.

01:13:17.435 --> 01:13:20.325
<v Dirk Breuer>Und das wäre auf jeden Fall ein Tipp, das immer so zu tun und nicht irgendwie

01:13:20.325 --> 01:13:23.505
<v Dirk Breuer>tausend Sachen, die man gerne ändern möchte, dann während des Umzugs zu machen

01:13:23.505 --> 01:13:27.205
<v Dirk Breuer>und sich danach zu fragen, okay, es funktioniert nichts, was genau ist schiefgelaufen,

01:13:28.415 --> 01:13:32.025
<v Dirk Breuer>und nachdem wir das getan haben, war im Grunde die Hauptarbeit das Terraform

01:13:32.025 --> 01:13:34.995
<v Dirk Breuer>umstellen, weil das einfach neu, also das haben wir einfach neu geschrieben,

01:13:34.995 --> 01:13:38.715
<v Dirk Breuer>das Terraform das meiste von dem Ansiblezeug haben wir wiederverwendet,

01:13:39.215 --> 01:13:42.505
<v Dirk Breuer>wir haben auch dieses ganze Docker-Deployment haben wir alles schon auf AWS

01:13:42.505 --> 01:13:47.885
<v Dirk Breuer>gemacht und die eigentliche Umzugsarbeit war dann echt überschaubar viel und

01:13:47.885 --> 01:13:52.175
<v Dirk Breuer>es würde ich sagen, es ist hauptsächlich ein anderer Terraform-Provider anbinden.

01:13:54.245 --> 01:13:56.605
<v Dirk Breuer>Und ja, das State umziehen, das ist nicht zu unterschätzen.

01:13:57.285 --> 01:14:00.155
<v Lucas Dohmen>Ja, genau. Vielen, vielen Dank für die beiden Fragen. Ich hoffe,

01:14:00.155 --> 01:14:01.445
<v Lucas Dohmen>wir haben das gut beantwortet.

01:14:02.335 --> 01:14:04.575
<v Lucas Dohmen>Sonst nochmal der Hinweis darauf, wir haben auch einen Talk dazu gegeben,

01:14:04.575 --> 01:14:09.805
<v Lucas Dohmen>speziell zu dem Thema, wie haben wir diesen Umzug geplant. Kommt auch in die

01:14:09.805 --> 01:14:14.165
<v Lucas Dohmen>Shownotes und genau, dir auch ein schönes Wochenende, Ultrakatel.

01:14:15.365 --> 01:14:20.125
<v Lucas Dohmen>Genau, dann kommen wir jetzt zum Abschluss. Ja, also wie am Anfang gesagt,

01:14:20.125 --> 01:14:23.045
<v Lucas Dohmen>ist das die erste Folge von Maschinenraum. Vielleicht hört ihr die Folge aber

01:14:23.045 --> 01:14:25.355
<v Lucas Dohmen>auch bei Softwarearchitektur im Stream, wenn ihr das tut.

01:14:25.705 --> 01:14:30.175
<v Lucas Dohmen>Und ihr wollt mehr von solchen Hands-on-Themen aus Operations,

01:14:30.675 --> 01:14:35.265
<v Lucas Dohmen>Entwicklung und auch Design hören, dann abonniert am besten diesen Podcast,

01:14:35.265 --> 01:14:39.185
<v Lucas Dohmen>weil nicht alle Folgen werden in Zukunft immer hier im Stream erscheinen.

01:14:39.995 --> 01:14:43.245
<v Lucas Dohmen>Aber so ein paar Livestreams sind auf jeden Fall noch geplant.

01:14:43.665 --> 01:14:46.465
<v Lucas Dohmen>Und genau, dann danke ich dir, Dirk, für deine Zeit. Vielen Dank für die Einblicke.

01:14:46.465 --> 01:14:47.715
<v Dirk Breuer>Danke dir für die Einladung, Lucas. Vielen Dank.

01:14:48.555 --> 01:14:51.155
<v Lucas Dohmen>Und dann wünsche ich allen ein schönes Wochenende.

01:14:51.705 --> 01:14:52.155
<v Dirk Breuer>Bis dann.

01:14:52.155 --> 01:14:52.355
<v Lucas Dohmen>Tschüss.

01:14:52.575 --> 01:14:53.895
<v Dirk Breuer>Wünsche ich euch auch. Bis dann. Tschüss.

