Konfigurationsmanagement für Microservices mit Spring Cloud Config

Spring Cloud ist eine Zusammenstellung von Werkzeugen, Frameworks, Komponenten und Abstraktionen, die als Toolbox für Cloud-basierte Anwendungen dienen. Ein Teilprojekt ist Spring Cloud Config. In Microservices-Architekturen verteilt es Konfigurationen zur Laufzeit auf die Service-Instanzen.

In Pocket speichern vorlesen Druckansicht
Konfigurationsmanagement für Microservices mit Spring Cloud Config
Lesezeit: 10 Min.
Von
  • Stefan Janser
Inhaltsverzeichnis

In einer Microservice-Architektur sorgt die starke Verteilung der Komponenten für eine deutlich höhere Komplexität beim Konfigurationsmanagement im Vergleich zu klassisch gehosteten Softwaremonolithen. Die Konfiguration umfasst alle Informationen, mit denen eine Applikation in unterschiedlichen Umgebungen lauffähig ist. Dazu gehören Verbindungsparameter zu externen Ressourcen, Log-in-Informationen zu
entfernten Diensten oder Sprach- und Länderspezifika.

Die Konfiguration ist auf die Service-Instanzen zu verteilen. Anpassungen sollen im laufenden Betrieb möglich sein, damit die Applikation möglichst ohne Unterbrechungen verfügbar ist. Auf die Komplexität wirkt sich weiterhin aus, dass sich die auszuspielenden Konfigurationen je nach Umgebung und Release unterscheiden. Um der Komplexität Herr zu werden, findet man bei Spring Cloud im Teilprojekt Spring Cloud Config Komponenten und Dienste, die Konfigurationen verwalten und auf eine Microservice-Infrastruktur verteilen.

Die Architektur von Spring Cloud Config besteht aus einem Server, mehreren Clients und einem Repository, in dem die Konfigurationen abgelegt sind. Als Repositorys werden Git, Subversion und das lokale Dateisystem unterstützt. Die Konfigurationen lassen sich als Java-Properties oder YAML-Dateien formatieren. Durch das Namensschema einer Konfigurationsdatei mit den Elementen <application>-<environment>-<release> lassen sich die Konfigurationen applikations-, umgebungs- und releasespezifisch ablegen. Der Config-Server wertet das Namensschema aus und liefert anhand von Applikationsnamen, Umgebung und Version des Clients die passende Einstellung über eine REST-Schnittstelle.

Die Konfiguration wird grundsätzlich beim Start eines Config-Clients übertragen. Der Client lässt sich so einrichten, dass er einen Konfigurations-Refresh zur Laufzeit auslöst. Um die Konfigurationen konsistent zu halten, wird der Refresh an andere Instanzen über den Spring Cloud Bus propagiert.

Ablauf eines Konfigurations-Refresh (Abb. 1)

Das folgende Tutorial zeigt den Einsatz von Config-Server und Config-Client. Um es nachzuvollziehen, sind Grundkenntnisse in Spring Boot von Vorteil, da Spring Cloud auf dem Framework basiert. Eine Einführung gibt es auf der Spring.io-Website.

Für die Konfiguration legen Entwickler eine Java-Properties-Datei im Git-Repository ab, über die sie Projektnamen mit einem Schlüssel konfigurieren können. Als Test gibt der Client über den Projektnamen eine REST-Schnittstelle zurück. Im zweiten Schritt wird die Infrastruktur so konfiguriert, dass ein Refresh im laufenden Betrieb möglich ist. Um die Auslieferung umgebungsspezifischer Konfigurationen zu simulieren, legen Entwickler in einem weiteren Schritt eine zweite Properties-Dateien im Git-Repository ab. Außer der Datei mit dem Namen config-client.properties für simulierten Normalbetrieb kommt eine Datei für die simulierte Entwicklungsumgebung namens config-client-dev.properties hinzu.

Architektur der Beispielanwendung (Abb. 2)