EKS & kubecost – Kubernetes-Kosten im Griff

Ein vollständig verwalteter Kubernetes-Service auf AWS ist eine feine Sache: binnen weniger Minuten können wir auf EKS-Cluster zugreifen und von den Möglichkeiten der Plattform profitieren.

Doch wie sieht es mit den Kosten aus? AWS berechnet Gebühren für Compute, Storage und Data Transfer. Hinzu kommt noch eine feste monatliche Gebühr in Höhe von 73 US-Dollar pro EKS-Cluster …

Weiterlesen

Taking Ownership of your Workflow

As a developer, you are constantly learning and improving. There are a lot of different benchmarks you are supposed to fulfill. When you are applying for a job, you are supposed to check all the boxes. Do you know Java? Do you have experience working in an agile environment? Design patterns? TDD? In consulting, you get to do this again with every new customer and project. But what then?

In our daily business, things get a bit fuzzier. It boils down to perceived competence and speed. Does this developer know what they are talking about? Do they get work done on time? The first boils down to the checkboxes again. The latter, though … How do you become faster? Without compromising on quality, that is.

Weiterlesen

CI/CD-Pipelines mit GitHub Actions

GitHub Actions ermöglicht die Realisierung einer vollständigen Continuous Integration / Continuous Delivery Pipeline direkt in unserem GitHub Repository. In diesem Workshop erstellen wir eine komplette Build- und Release-Pipeline für ein bestehendes Node.js-Projekt und lernen dabei die Funktionsweise von CI/CD sowie die Kernkonzepte von GitHub Actions in der Praxis kennen.

Weiterlesen

Knowledge Management for Software Engineers

… or: How I learned to stop worrying and love the Zettelkasten.

Everyone has been there. An error message pops up, and recognition begins to dawn. I have seen this error message before, you think. But where?

You google it. The Stackoverflow links for this topic are all purple. You have been down this rabbit hole before. You remember. It was something weird … involving a specific version of … something. You recall solving this error message to get another error message to solve to get yet another. You remember solving the problem eventually. You also remember it took you more than a day, but you have no clue where to find the solution.

Weiterlesen

Ungeplante, aber validierte Investments in Qualität

In meiner liebsten deutschen Chat-community zu agilen Themen, dem Slack von Mein Scrum Ist Kaputt, hatten wir vor Kurzem wieder eine spannende Diskussion zum Thema „Schätzen“. Und neben den Klassikern wie NoEstimates, ItemCount und Flow kamen wir auch auf die Outlier – die Stories und Bugs, die jeder Schätzung und zum Teil sogar dem Sprintziel im Wege stehen, weil sie im Sprint plötzlich zu wachsen beginnen.

Es eine schöne Idee aus DevOps („Seeking SRE“ in diesem Fall), auf die mich ein Ex-Kollege gestossen hat:

Incidents are best regarded as unplanned investments in system performance.


Weiterlesen

PostGraphile-Authentifizierung mit JWT & Security mit RLS

Wir schreiben ja immer davon, dass wir möglichst Beispiele aus der „echten“ Welt in unserer Serie* abbilden wollen und nicht nur auf 30.000 Metern Flughöhe irgendwelche Themen beäugen. Dann wollen wir doch einfach mal Authentifizierung und ein bisschen Security in unserer PostGraphile-Serie mit aufnehmen.

Weiterlesen

Nats JetStream with NestJS

In the first blog post of this series, we learned how to send serialized data from a React frontend to a NestJS backend with Axios and Cap’n Proto. This blog post will focus on propagating the received data from service to service in a Kubernetes environment using NestJS clients coupled with a Nats JetStream message bus. 

I will explain how to install a properly configured Nats JetStream message bus in a Kubernetes cluster using Helm and Ansible and how to connect the NestJS clients to JetStream afterward. To avoid complexity, we’ll use Minikube, an easy-to-install Kubernetes cluster with just one node. We will also partially use the code and generated data from the last blog article. Both code and data are available on GitHub.

Weiterlesen

Cap’n Proto with React and NestJS

In a recent project for a Mayflower client, we used Quarkus Java Microservices with Google Protobuf. In a very abstract sense, our objective was to exchange serialized binary data over a message bus system living in Kubernetes. Therefore I decided to replace the existing tech stack with Typescript, NestJS, and Cap’n Proto IDL (Interactive Data Language).

In this blog post, I will show you how to serialize data using Cap’n Proto in React and send it to a NestJS receiver, which simulates a backend.

Weiterlesen

PostGraphile Subscriptions

Mit Subscriptions kann man über Events und Änderungen in der Datenbank informiert werden. Ein offensichtlicher Anwendungsfall sind Notifications.

Wenn wir in unserem Code-Beispiel einer Blogging-App (ihr wisst schon, unsere PostGraphile-Serie*) bleiben, könnte man dem User zum Beispiel die Möglichkeit geben, über neue Blogposts informiert zu werden. Oder falls man als Betreiber der App sicherstellen will, dass Spammer nicht einfach posten können, könnte man einbauen, dass Blogposts immer erst freigeschaltet werden müssen. In so einem Fall will man natürlich eine Nachricht bekommen, wenn ein Blogpost freigeschaltet werden will.

Weiterlesen

Einzigartige, lesefreundliche Identifier mit PostgreSQL

In einem meiner Projekte stelle ich zur Zeit von PHP auf JavaScript und von REST auf GraphQL um, in der Hoffnung, schlankere Services zu erhalten. Bei meinen Recherchen zu dem Thema stieß ich auf PostGraphile, das als zugrundeliegende Datenbank PostgreSQL möchte. Bisher war ein klassisches MySQL im Einsatz.

Eine Funktionalität, die ich ersetzen muss, sind einzigartige, lesefreundliche Bezeichner oder auch Slugs. Bislang gab es eine Funktionalität in meinem alten PHP-Code, die mir aus einem Titel den Slug generierte und dafür sorgte, dass dieser einzigartig in meinem Datenbestand ist. 

Mit PostgGaphile hatte ich diesen Code allerdings nicht mehr. Meine Recherchen diesbezüglich führten mich zu dem Ergebnis, dass die erwartete Funktionalität gar nicht mal in meinem Service umgesetzt gehört, sondern besser auf Datenbankebene aufgehoben ist. PostgreSQL kann das, denn ich kann hier bequem Funktionen und Trigger definieren. So wäre auch gewährleistet, dass immer ein Slug erzeugt wird, selbst wenn die Daten nicht über diesen speziellen Service kommen.

Weiterlesen