Containerisierung von Microservices für die Bereitstellung in der Cloud

Render image of a cloud containing servers that are connected to a client system via a network.

Eckdaten

Hintergrund

Die bisher in-house gehosteten Services sollen künftig in der Cloud bereitgestellt werden. Dabei möchte man von den Vorteilen einer containerisierten Bereitstellungsmethode profitieren.

Situation vor Umsetzung

Die Services der Weblandschaft wurden bisher auf eigenen Servern als Windows-Dienste bereitgestellt. Da die Cloud künftig als Plattform für die Bereitstellung verwendet werden soll, passt dieser Ansatz nicht mehr und muss modernisiert werden. Die Skalierbarkeit ist ebenfalls eingeschränkt. Bei bedeutend höherem Ressourcenbedarf muss erst ein neuer Server aufgesetzt und eingebunden werden.

Zielsetzung

Folgende Ziele wurden identifiziert:

  • Services können unabhängig der zugrunde liegenden Plattform bereitgestellt werden
  • Die Skalierbarkeit einzelner Services soll vereinfacht und optimiert werden
  • Neue Entwickler können lokal ohne großes Setup mit der Entwicklung am Backend beginnen und dieses einfach ausführen

Umsetzung

Die weitere Zielsetzung für die Migration in die Cloud beinhaltet, dass die Services in einem Kubernetes-Cluster bereitgestellt werden sollen. Daher fiel die Wahl zur Containerisierung auf Docker.

Zuerst stand die Umstellung von einem Deployment auf Windows-Systeme auf eine Bereitstellung auf Linux-Systemen an. Dafür wurden die Abhängigkeiten analysiert. Eine wichtige Feststellung war, dass beispielsweise für die PDF-Bibliothek Anpassungen vorgenommen werden müssen, um eine lauffähige Linux-Version mit den richtigen Einstellungen zu betreiben.

Zur Optimierung der Image-Größe wurden die erstellten Images mithilfe des Tools „dive“ intensiv analysiert. Um das Optimum herauszuholen, wurden daraufhin einige Änderungen vorgenommen, die das Image verkleinerten.

Ein wichtiger Aspekt war zudem die lokale Ausführbarkeit auf Entwicklungsrechnern. Dies soll eine vereinfachte Zusammenarbeit von externen Dienstleistern ermöglichen, damit diese im Entwicklungsprozess besser unterstützen können. Dazu wurden für alle extern benötigten Dienste, wie z. B. die Datenbank, Redis oder dem Messaging System äquivalente Lösungen recherchiert, die in einem Docker Container ausgeführt werden können. Diese wurden zusammen mit den Services in einer Docker Compose Datei verdrahtet, um eine Ausführung über einen einzigen Klick zu ermöglichen.

Mein Beitrag

Da ich sehr neugierig auf die Technologie und das Setup war, habe ich intensiv bei diesem Projekt unterstützt, um das Entwicklererlebnis zu verbessern und die künftige Bereitstellbarkeit in die Cloud zu ermöglichen. Dazu habe ich mich um die Recherche nach Lösungen für Bibliotheken und abhängigen Diensten gekümmert, um die Ausführbarkeit in Docker möglich zu machen. Des Weiteren erstellte ich die Build-Definitionsdateien (Dockerfiles) und analysierte die Images mit „dive“. Zum Schluss verheiratete ich die Artefakte über die Docker Compose Definition und ermöglichte die 1-Klick-Ausführung der Umgebung auf den Entwicklungsrechnern.

Eingesetzte Technologien

Die Umsetzung erfolgte mit Docker und Docker Compose. Kubernetes kam erst in einer späteren Iteration zum Einsatz, wo es um die konkrete Bereitstellung in der Cloud ging.

Kundennutzen

Der erste Schritt für das Deployment in die Cloud ist getan. Mithilfe der Ergebnisse aus der Grundlagenarbeit kann der Kunde jederzeit die Bereitstellung in die Cloud veranlassen. Zudem wurde die Auslastung externer Dienstleister verbessert. Somit kann der Kunde das beauftragte Budget besser ausnutzen. Beim Onboarding neuer Mitarbeiter reduzieren sich die Kosten ebenfalls um 11 %, da nun für das Setup der Backend-Umgebung auf dem Entwicklerrechner weniger Schritte notwendig sind und die Ausführbarkeit schneller sichergestellt werden kann.

Sie möchten Ihre Anwendung auf die Cloud-Plattform verlagern und benötigen Unterstützung bei der Umsetzung?