Hystrix & Archaius – Dynamische Konfiguration zur Laufzeit

Keine Kommentare

Wer sich mit Hystrix aus dem Hause Netflix beschäftigt und es im besten Fall auch einsetzt, ist mit sehr großer Wahrscheinlichkeit schon einmal der Bibliothek Archaius begegnet. Doch was ist Archaius und welche Möglichkeiten bieten sich mir? Habe ich vielleicht etwas im Einsatz, dessen Potenzial ich noch nicht erkannt habe? Welche Vorteile bieten sich mir bei einer dynamischen Konfiguration zur Laufzeit? Diesen und anderen Fragen möchte ich im folgenden Blog nachgehen.

Einen ersten Einblick hat euch mein Kollege Felix Braun zum Einsatz von Hystrix bereits gegeben, daher werde ich auf die Vorteile von Hystrix nicht im Detail eingehen und verweise auf seinen Artikel Fehlertoleranz statt Hochverfügbarkeit.

Dynamische Konfiguration

Wer von uns ist nicht schon durch die Deployment-Hölle gegangen und ist bei der Suche nach den richtigen Properties verzweifelt?

  • Wieso läuft das bei meinem Kollegen und nicht bei mir?
  • Welche Properties brauche ich bei der lokalen Entwicklung?
  • Wo muss die Datei liegen?
  • Wie war die URL von dem Customer REST Endpoint?

Eine deutliche Verbesserung verspricht uns hier die dynamische Konfiguration, die es uns ermöglicht, einen zentralen Ort zu definieren, unter dem wir alle Properties verwalten können. Fairerweise sei gesagt, dass dieses Vorgehen auch die ein oder andere Gefahr birgt.

Was erreichen wir durch die dynamische Konfiguration?

  • Zieladressen von Servern ändern
  • Timeouts verändern
  • Features abhängig vom Request-Context aktivieren/deaktivieren
  • Features für einen definierten Zeitraum aktivieren
  • Einfaches Service Discovery (nicht vergleichbar mit Eureka und Co.)
  • KEINE Re-Deployments der Anwendung(en) bei Konfigurationsänderungen

Archaius

archaius
Flickr: Rod Waddingtons

Archaius stammt ebenfalls aus dem Hause Netflix und wurde 2012 veröffentlicht. Wie bei allen Open-Source Projekten könnt ihr euch aktiv an der Weiterentwicklung beteiligen. Ihr findet die aktuellen Sourcen unter Archaius @ GitHub.

Dank Archaius haben wir nun die Möglichkeit einer mehrstufigen Konfiguration. Hierbei bleibt uns das gute alte Property-File erhalten und dient Archaius als Fallback-Variante. Fallback? Ja genau, Archaius kann von uns so konfiguriert werden, dass zum Start unserer Anwendung zuerst im Classpath nach einer config.properies Datei gesucht wird.

Quelle: Netflix @ GitHub
https://github.com/Netflix/archaius/wiki/Overview

Darauf aufbauend setzt Archaius auf eine Composite-Configuration. Dabei reicht die config.properties im Classpath unter „/META-INF/config.properties“ aus, um eure Anwendung zu starten und sie mit einer Default-Konfiguration zu bestücken. Wurden von uns keine weiteren Quellen definiert, unter denen Archaius nach unseren Properties suchen soll, startet die Anwendung mit den Werten aus dem Property File. Haben wir weitere Quellen definiert, werden unsere lokalen Werte überschrieben. Es werden dabei nur die Werte überschrieben, die von Archaius remote gefunden wurden. Alle anderen behalten ihren Wert.

Das folgende Code-Beispiel zeigt euch eine Composite-Configuration, die mit einem CoreOS etcd Server als weitere Quelle zusammenarbeitet.

 
AbstractPollingScheduler scheduler = new FixedDelayPollingScheduler();
 
// Step 1: init ConcurrentcompositeConfiguration
ConcurrentCompositeConfiguration compositeConfig = new ConcurrentCompositeConfiguration();
 
// Step 2: load config.properties from META-INF 
ClasspathPropertiesConfiguration.initialize();
 
// Step 3: CoresOS Etcd service configuration
DynamicWatchedConfiguration etcdConfiguration = createEtcdConfiguration();
 
if (etcdConfiguration != null)
   compositeConfig.addConfiguration(etcdConfiguration, "etcd override configuration");
 
// Step 3: put all together
ConfigurationManager.install(compositeConfig);

Ich verwende in meinem Beispiel einen CoreOS etcd Server, um meine Konfiguration abzulegen.

Archaius unterstützt dabei unter anderem die folgenden Sourcen:

  • Files
  • Remote URLs
  • JDBC
  • REST
  • AWS Dynamo DB
  • Apache ZooKeeper
  • CoreOS etcd

Auch hier habt ihr wieder die Möglichkeit, euch aktiv an der Weiterentwicklung zu beteiligen und könnt, falls notwendig, weitere Adapter schreiben und über einen Pull-Request an Netflix zurückspielen.

CoresOS ETCD

Wie bereits erwähnt, nutze ich einen etcd Server von CoreOS, um meine Konfiguration abzulegen und diese via REST Endpoint mit Archaius zu überwachen. Wenn ihr eure Applikation hochgefahren habt, wird Archaius die Quellen eurer Konfiguration in regelmäßigen Abständen abfragen und auf Veränderungen reagieren. Über die Property „archaius.fixedDelayPollingScheduler.initialDelayMills“ könnt ihr den Default Value von 30000 ms verändern.

Benjamin Wilms

Benjamin Wilms arbeitet als IT Consultant und Software Developer am Standort Solingen. In seiner +1-Zeit beschäftigt er sich mit den neuesten Technologien aus dem Java-Umfeld und versucht, während der Entwicklung von kleinen Prototypen, ein Gespür dafür zu bekommen, ob diese neuen Technologien reif für den Einsatz in einem seiner nächsten Projekte beim Kunden sind.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Artikel von Benjamin Wilms

Web

Vaadin Christmas Meetup in Düsseldorf

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.