Transcript
Page 1: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

.consulting .solutions .partnership

Fürs Karma: Konfiguration zur Laufzeit Alexander Schwartz, Principal IT Consultant

JavaLand – 9. März 2016

Page 2: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Konfiguration zur Laufzeit

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 2

Alltägliche Konfigurationsänderungen 1

Archaius: Zugriff auf sich ändernde Konfigurationen 2

etcd: Zentrale Konfigurationsdatenbank 3

Consul und Ribbon: Service Discovery für Clients 4

Togglz: Aktivieren von neuen Funktionen steuern 5

Besser mit Konfiguration zur Laufzeit? 6

Page 3: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Mein Sponsor und Arbeitgeber – msg systems ag

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 3

1980 gegründet

mehr als 5.500 Kollegen

727 Mio € Umsatz 2015

24 Länder

in 14 Städten

in Deutschland präsent

Page 4: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Wer ich bin – Alexander Schwartz

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 4

13 Jahre Java

7 Jahre PL/SQL

7 Jahre

Absatzfinanzierung

3,5 Jahre Direktbank

1 Frau

2 Kinder

458 gefundene

Geocaches

@ahus1de

Page 5: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Konfiguration zur Laufzeit

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 5

Alltägliche Konfigurationsänderungen 1

Archaius: Zugriff auf sich ändernde Konfigurationen 2

etcd: Zentrale Konfigurationsdatenbank 3

Consul und Ribbon: Service Discovery für Clients 4

Togglz: Aktivieren von neuen Funktionen steuern 5

Besser mit Konfiguration zur Laufzeit? 6

Page 6: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Alltägliche Konfigurationsänderungen

Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster erfolgen

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 6

Die Kundendatenbank hat eine neue IP-

Adresse, bitte passe die Konfiguration der

Online-Registrierung an.

Kein Problem, habe ich geändert, ich muss die

Anwendung heute Nacht nur noch neu starten!

Bin ich ein Held, weil ich mitten in

der Nacht aufstehe, um die

Anwendung neu zu starten?

Page 7: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Alltägliche Konfigurationsänderungen

Wenn neue Funktionen durch ein Deployment aktiviert werden, ist ein Fallback schwierig möglich

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 7

Die neue Funktion in der Anwendung, könnt ihr

die bitte freischalten?

Ok, dann rollen wir die neue

Anwendungsversion jetzt aus. Dann können

alle Anwender darauf zugreifen.

Sollte man das wirklich an

einem Freitagabend tun?

Page 8: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Alltägliche Konfigurationsänderungen

Konfigurationen zur Laufzeit spart Zeit und Nerven – und vermeidet Wartungsfenster

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 8

• Parameter der Anwendung zur Laufzeit ändern

Ziel-Adressen für Server

Verzeichnisnamen

Timeouts und fachliche Parameter

• Zentrale Konfigurationsdatenbank

Konfigurationsparameter

Service-Discovery

• Aktivieren von neuen Funktionen steuern

Für bestimmte Kunden oder Nutzer

Für einen Teil der Kunden

Zeitgesteuerte Aktivierung

Page 9: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Alltägliche Konfigurationsänderungen

Karma: Jede unserer Handlungen hat eine Folge für uns selbst

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 9

• Wir sind verantwortlich für unser Tun

• Konfigurationsänderung soll zum gewünschten Ergebnis führen

– ohne andere zu beeinträchtigen

• Einsicht: Konfigurationen ändern sich regelmäßig

• Güte: Wir sind freundlich zu den Nutzern und brauchen

dafür kein Wartungsfenster

• Bescheidenheit: Wir verzichten darauf, als „Helden“

die Konfiguration mitten in der Nacht zu ändern

Page 10: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Konfiguration zur Laufzeit

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 10

Alltägliche Konfigurationsänderungen 1

Archaius: Zugriff auf sich ändernde Konfigurationen 2

etcd: Zentrale Konfigurationsdatenbank 3

Consul und Ribbon: Service Discovery für Clients 4

Togglz: Aktivieren von neuen Funktionen steuern 5

Besser mit Konfiguration zur Laufzeit? 6

Page 11: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Netflix Archaius

Netflix Archaius regelt den Zugriff auf Parameter für Java-Clients

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 11

1. Laden von Konfigurationdaten

aus: Properties-Dateien, URLs, Datenbanken

2. Kaskadierte Konfigurationen

für: Standardeinstellungen, verschiedene Umgebungen,

einzelne Server

3. Typsicherer Zugriff auf den aktuellen Wert

4. Callbacks, wenn sich ein Wert ändert

Quelle: http://en.wikipedia.org/wiki/Archaius_tigris

(CC) Hans Stieglitz

Page 12: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Netflix Archaius

Beim Start kann zusätzlich eine Umgebung mitgegeben werden

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 12

java

-Darchaius.deployment.environment=test

...

# database.properties

db.url=jdbc:postgresql://localhost:5432/standard-db

# database-test.properties

db.url=jdbc:postgresql://localhost:5432/test-db

// Java Startup

ConfigurationManager.loadCascadedPropertiesFromResources("database");

Page 13: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Netflix Archaius

Die Java-Anwendung wird mit Angabe der Konfigurationsdatei gestartet

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 13

java -Darchaius.configurationSource.additionalUrls=file:///.../archaius.properties

-Darchaius.fixedDelayPollingScheduler.delayMills=1000

-Darchaius.fixedDelayPollingScheduler.initialDelayMills=1000

–jar application.jar

# archaius.properties

app.timeout=1000

app.url=http://myserver:3000/

Page 14: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

// construct type safe accessor for property

DynamicIntProperty timeoutProperty =

DynamicPropertyFactory.getInstance()

.getIntProperty("app.timeout", 10);

// access current value

int timeout = timeoutProperty.get();

// get notified once the value changes

timeoutProperty.addCallback(() -> {

System.out.println("property has changed: " + property.get());

});

Netflix Archaius

Archaius ermöglicht typsicheren Zugriff auf den aktuellen Wert

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 14

Callbacks werden aufgerufen, wenn sich ein Parameterwert ändert.

Page 15: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Netflix Archaius

Überlegungen Pro und Kontra Archaius

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 15

Pro:

• Konfigurationen können wie gehabt als Datei ausgerollt werden (z. B. mit Chef, Puppet, Ansible, Salt)

• Verschiedene Ablagemöglichkeiten außer Dateien werden unterstützt

• Hierarchische Struktur vereinfacht die Konfiguration

• Erprobte Bibliothek basierend auf der Apache Commons Configuration API

• Callback-Funktion ermöglicht komplexe Rekonfiguration

Kontra:

• Zeitgleiche konsistente Änderung mehrerer Parameter kann je nach Ablageart eine Herausforderung sein

Ähnliche Projekte und Weiterentwicklungen:

Apache DeltaSpike, Apache Commons Configuration 2.0 und Archaius 2.0, Apache Tamaya

Page 16: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Konfiguration zur Laufzeit

16

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016

Alltägliche Konfigurationsänderungen 1

Archaius: Zugriff auf sich ändernde Konfigurationen 2

etcd: Zentrale Konfigurationsdatenbank 3

Consul und Ribbon: Service Discovery für Clients 4

Togglz: Aktivieren von neuen Funktionen steuern 5

Besser mit Konfiguration zur Laufzeit? 6

Page 17: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

CoreOS etcd

etcd ist eine zentrale Konfigurationsdatenbank

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 17

Geeignet für Konfiguration und Service Discovery

• Einfach: HTTP/REST mit JSON

• Zuverlässig: hochverfügbar und konsistent

• Sicher: optional mit SSL-Client-Zertifikaten

• Schnell: mehrere Tausend Schreiboperationen pro Sekunde

Operationen: GET/PUT/DELETE/CAS/WAIT/TTL

# PUT

curl -L -X PUT http://127.0.0.1:4001/v2/keys/foo-service/container1 –d value="localhost:1111"

# GET

curl -L http://127.0.0.1:4001/v2/keys/foo-service/container1

# WAIT

curl -L http://127.0.0.1:4001/v2/keys/foo-service?wait=true\&recursive=true

Page 18: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

CoreOS etcd + Hightower´s confd

Wenn sich Werte in etcd ändern, aktualisiert confd die Konfiguration

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 18

confd

Page 19: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

CoreOS etcd + Hightower´s confd

Wenn sich Werte in etcd ändern, aktualisiert confd die Konfiguration

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 19

• Service-Beschreibung (*.toml)

• Vorlage für die Konfigurationsdatei (*.tmpl)

# nginx.toml

[template]

src = "nginx.tmpl"

dest = "/etc/nginx/sites-enabled/app.conf"

keys = [ "/foo-service" ]

check_cmd = "/usr/sbin/nginx -t"

reload_cmd = "/usr/sbin/service nginx reload"

# nginx.tmpl

upstream app_pool {

{{ range getvs "/foo-service/*" }}

server {{ . }};

{{ end }}

}

confd

Page 20: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

CoreOS etcd + Jurmous´ Java Client

Jurmos Java Client spricht etcd über ein Java API an

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 20

• Java-API für alle etcd-Funktionen

• Implementiert auf Basis von Netty (für asynchrones, non-blocking IO)

// Simple put

etcd.put("/foo-service/container1","localhost:1111").send();

// Wait for next change on foo

EtcdResponsePromise<EtcdKeysResponse> promise = etcd.getDir("/foo-service/")

.recursive().waitForChange().send();

// Java 8 lambda construction

promise.addListener(promise -> {

// do something with change

});

Page 21: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

CoreOS etcd

Überlegungen Pro und Kontra etcd

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 21

Pro:

• Einfacher Zugriff (REST), einfache Installation (Go-Binary), Transport-Sicherheit (SSL)

• Änderungen werden sofort an die Clients weitergegeben

• Generische Struktur für flexiblen Einsatz

Kontra:

• Keine Zugriffsbeschränkung für einzelne Clients

• Junges Open-Source-Projekt

Ergänzungen und Alternativen:

• Vulcan (HTTP Load Balancer, Konfigurationsablage in etcd)

• SkyDNS (Servicediscovery über DNS, Datenablage in etcd)

• Apache Zookeeper (zentrale Konfigurationsdatenbank und Synchronisation)

• Hazelcast (Leader Election, Distributed Locks, Topics, In-Memory-Data-Grid)

• Netflix Eureka (Servicediscovery)

• Hashicorp Consul (Servicediscovery und Konfigurationsdatenbank)

Page 22: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Konfiguration zur Laufzeit

22

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016

Alltägliche Konfigurationsänderungen 1

Archaius: Zugriff auf sich ändernde Konfigurationen 2

etcd: Zentrale Konfigurationsdatenbank 3

Consul und Ribbon: Service Discovery für Clients 4

Togglz: Aktivieren von neuen Funktionen steuern 5

Besser mit Konfiguration zur Laufzeit? 6

Page 23: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Hashicorp Consul

Consul

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 23

Geeignet für Service Discovery, Konfiguration und Monitoring

• Einfach: HTTP/REST mit JSON

• Zuverlässig: hochverfügbar und konsistent

• Sicher: eingebaute Access Control Lists und Verschlüsselung

Haupt-Sponsor: HashiCorp (die, die auch Vagrant machen)

Homepage: https://www.consul.io/

Page 24: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Netflix Ribbon

Ribbon

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 24

Geeignet für Client-Seitiges Load-Balancing

• Ribbon arbeitet gut zusammen mit Feign: Typsichere Web-APIs

• Feign arbeitet gut zusammen mit Hystrix: Roboste Synchrone Schnittstellen

Haupt-Sponsor: Netflix

Homepage: https://github.com/Netflix/ribbon/

Page 25: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Consul und Ribbon

Der Client nimmt direkt Verbindung mit dem funktionierenden Service auf

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 25

Ein hochverfügbares

Consul-Server-Ensemble

(für Key-Value-Store

und Service-Catalog)

Services

Client

Page 26: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Consul und Ribbon

Anwendungs-Code für Ribbon

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 26

MyService api = HystrixFeign.builder()

.contract(new JAXRSContract())

.encoder(new JacksonEncoder())

.decoder(new JacksonDecoder())

.client(RibbonClient.builder()

.lbClientFactory(new ConsulLbFactory())

.build())

.target(MyService.class, "http://web");

api.call();

Page 27: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Consul und Ribbon

Glue-Code für Ribbon und Consul

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 27

public class ConsulLbFactory implements LBClientFactory {

private Map<String, LBClient> clients = new HashMap<>();

public synchronized LBClient create(String clientName) {

LBClient client = clients.get(clientName);

if(client == null) {

ILoadBalancer lb = new ConsulLoadBalancer(clientName);

IClientConfig clientConfig = new DefaultClientConfigImpl();

clientConfig.loadDefaultValues();

client = LBClient.create(lb, clientConfig);

clients.put(clientName, client);

}

return client;

}

}

public class ConsulLoadBalancer extends BaseLoadBalancer {

public ConsulLoadBalancer(String serviceName) {

Consul consul = Consul.builder().build();

HealthClient client = consul.healthClient();

ServiceHealthCache svHealth = ServiceHealthCache.newCache(client, serviceName);

svHealth.addListener(map -> {

List<Server> newServers = new ArrayList<>();

map.forEach((hostAndPort, serviceHealth) ->

newServers.add(new Server(hostAndPort.getHostText(),

hostAndPort.getPort())));

setServersList(newServers);

});

/* ... */

}

}

Page 28: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Consul und Ribbon

Überlegungen Pro und Kontra Service Discovery mit Consul

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 28

Pro:

• Kontakt zu Services ohne Single Point of Failure

• Fertige Bibliotheken verfügbar

• Dezentrales Monitoring von Services

• GUI für Key-Value-Store und Monitoring

• Zusätzliche Semantik für Services (statt nur Key-Value-Store)

Kontra:

• Zusätzliche Bibliotheken in Projekt

Page 29: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Konfiguration zur Laufzeit

29

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016

Alltägliche Konfigurationsänderungen 1

Archaius: Zugriff auf sich ändernde Konfigurationen 2

etcd: Zentrale Konfigurationsdatenbank 3

Consul und Ribbon: Service Discovery für Clients 4

Togglz: Aktivieren von neuen Funktionen steuern 5

Besser mit Konfiguration zur Laufzeit? 6

Page 30: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Togglz: Feature Toggles für Java

Togglz schaltet Funktionen eines Programms zur Laufzeit ein und aus

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 30

Szenarien:

• Noch nicht freigegebene Funktionen sind nur in Testumgebungen aktiv

• Aktivierung und Deaktivierung kann über ein Web-Frontend erfolgen

• Über Regeln können Funktionen z. B. für ausgewählte Nutzer oder zeitgesteuert aktiviert werden

Page 31: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Togglz: Feature Toggles für Java

Togglz hat eine Web-Oberfläche für Änderungen

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 31

Status und Rollout-Strategie können für jedes Feature zur Laufzeit geändert werden.

Page 32: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Togglz: Feature Toggles für Java

Die Feature Toggles werden im Programmcode abgefragt

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 32

Einzelne Features werden als Enums im Java-Code deklariert.

Anschließend werden sie im Java-Code abgefragt, bevor der neue Code ausgeführt wird.

// declaration and documentation of features

public enum Features implements Feature {

@Label("First Feature")

FEATURE_ONE;

public boolean isActive() {

return FeatureContext.getFeatureManager().isActive(this);

}

} // making use of toggles within the code

if(Features.FEATURE_ONE.isActive()) {

// do new exciting stuff here

}

Page 33: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Togglz: Feature Toggles für Java

Überlegungen Pro und Kontra Feature Toggles

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 33

• Feature Toggles sind ein bekanntes und gut verstandenes Pattern

• Es gibt verschiedene Implementierungen für verschiedene Programmiersprachen

• Feature Toggles machen Tests komplexer

• Wenn ein neues Feature erfolgreich ausgerollt ist, sollte das Feature Toggle entfernt werden

Der zusätzliche Aufwand von Feature Toggles lohnt sich:

• Bei häufigen Releases (Continuous Delivery), damit fertige Features nicht von unfertigen Features

blockiert werden

• Wenn langlaufende Feature-Branches mit anschließendem Merge vermieden werden

• Wenn aus einem graduellen Rollout Informationen für die Fertigstellung des Features gewonnen werden

können

Page 34: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Konfiguration zur Laufzeit

34

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016

Alltägliche Konfigurationsänderungen 1

Archaius: Zugriff auf sich ändernde Konfigurationen 2

etcd: Zentrale Konfigurationsdatenbank 3

Consul und Ribbon: Service Discovery für Clients 4

Togglz: Aktivieren von neuen Funktionen steuern 5

Besser mit Konfiguration zur Laufzeit? 6

Page 35: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Konfiguration zur Laufzeit

Besser mit Konfiguration zur Laufzeit? Ja!

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 35

Zugriff auf sich ändernde Konfigurationen

• Hilft bereits bei der Entwicklung der Anwendung

• Minimaler initialer Aufwand, große Flexibilität für die Produktion

Zentrale Konfigurationsdatenbank

• Anwendungsübergreifende Konfiguration

• Service-Discovery in Cloud-Szenarien

Feature Toggles

• Wenn es Entwicklung und Deployment vereinfacht

• Wenn frühe Rückmeldung zu einem Feature aus der Produktion

einen fachlichen Nutzen hat

@ahus1de

Page 36: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

Konfiguration zur Laufzeit

Links

© msg | Konfiguration zur Laufzeit | Alexander Schwartz | JavaLand 2016 | 9. März 2016 36

Netflix Archaius: https://github.com/Netflix/archaius

Apache Commons Configuration:

http://commons.apache.org/proper/commons-configuration/

Apache Tamaya: http://tamaya.incubator.apache.org/

Übersicht über verschiedene Methoden:

http://javaeeconfig.blogspot.de/2014/08/

overview-of-existing-configuration.html

HashiCorps Consul für Service Discovery,

Monitoring und Konfigurationsmanagement

http://heise.de/-3040847

Saltstack and Consul Examples

https://github.com/ahus1/saltconsul-examples

Togglz: http://www.togglz.org/

Übersicht über Feature Toggle Implementierungen:

http://www.beautifulbuilds.com/feature-toggle-frameworks-list/

@ahus1de

CoreOS etcd: https://github.com/coreos/etcd

Jurnous etcdj: https://github.com/jurmous/etcd4j

Vulcan: http://www.vulcanproxy.com/

SkyDNS: https://github.com/skynetservices/skydns

Netflix Eureka: https://github.com/Netflix/eureka

Hazelcast: http://hazelcast.com/

Apache Zookeeper: https://zookeeper.apache.org/

Netflix exhibitor: https://github.com/Netflix/exhibitor

HashiCorp Consul: http://consul.io/

Page 37: Für‘s Karma: Konfiguration zur Laufzeit - doag.org · Alltägliche Konfigurationsänderungen Wenn eine Konfigurationsänderung einen Neustart erfordert, so kann dies nur im Wartungsfenster

.consulting .solutions .partnership

Alexander Schwartz

Principal IT Consultant

+49 171 5625767

[email protected]

@ahus1de

msg systems ag (Headquarters)

Robert-Buerkle-Str. 1, 85737 Ismaning

Germany

www.msg-systems.com


Recommended