F£¼r¢â‚¬©s Karma: Konfiguration zur Laufzeit - doag.org Allt£¤gliche Konfigurations£¤nderungen Wenn eine

  • View
    1

  • Download
    0

Embed Size (px)

Text of F£¼r¢â‚¬©s Karma: Konfiguration zur Laufzeit - doag.org...

  • .consulting .solutions .partnership

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

    JavaLand – 9. März 2016

  • 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

  • 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

  • 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

  • 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

  • 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?

  • 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?

  • 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

  • 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

  • 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

  • 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

  • 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");

  • 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/

  • // 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.

  • 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

  • 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

  • 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

  • CoreOS etcd + Hightower´s confd

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

Recommended

View more >