Service Discoveries

08734031c152fb64f70dc38a4f632cee?s=47 fraosug
January 17, 2017

Service Discoveries

Im Cloud-Umfeld wird bei Laständerungen horizontal skaliert und werden Wartungen wie patchen u.ä. oft durch rebuild der gesamten Maschine durchgeführt.

Auftauchen und Verschwinden ganzer Maschinen bedingt Auftauchen und Verschwinden des Service. Auf einen Service wird dann über ggf schnell wechselnde tcp endpoints zugegriffen. Unter der Voraussetzung, daß die Services tatsächlich stateless oder aber daß die Applikation state redundant sind, kann dies sehr schnell erfolgen. Klassisches Konfigurationsmanagement erreicht die erforderlichen Geschwindigkeiten nicht.

Verteilte key-val DBs und Autoregistrierung von Services lösen das Problem, Service Consumers die Partner bekannt zu machen über a) DNS SRV records oder b) watches und config file templates.

08734031c152fb64f70dc38a4f632cee?s=128

fraosug

January 17, 2017
Tweet

Transcript

  1. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Service Discoveries

    Christopher J. Ruwe cjr@cruwe.de 17. Januar 2016
  2. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität whoami Christopher

    J. Ruwe freiberuflicher IT-Infrastruktur Consultant (Unix, Netzwerke) DevOps Engineer and Consultant Linux, FreeBSD, Solaris
  3. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Outline Kontext

    Problemstellung Folgerung Lösung Realität Anwendungsfälle Beispiel: etcd, fleetd und confd / go template fleetd confd - go template
  4. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität Problemstellung Dienste werden zunehmend als verteilte Systeme realisiert
  5. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität Problemstellung Dienste werden zunehmend als verteilte Systeme realisiert A distributed system is a collection of independent computers that appears to its users a a single coherent system. (Tanenbaum, Van Steen, Distributed Systems, 2nd ed., 2007)
  6. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität Problemstellung Dienste werden zunehmend als verteilte Systeme realisiert A distributed system is a collection of independent computers that appears to its users a a single coherent system. (Tanenbaum, Van Steen, Distributed Systems, 2nd ed., 2007) für die Schnittstellen zwischen den einzelnen Komponenten ist Adressierung zentral, ggf. zzgl. einer Gewichtung
  7. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität Problemstellung Dienste werden zunehmend als verteilte Systeme realisiert A distributed system is a collection of independent computers that appears to its users a a single coherent system. (Tanenbaum, Van Steen, Distributed Systems, 2nd ed., 2007) für die Schnittstellen zwischen den einzelnen Komponenten ist Adressierung zentral, ggf. zzgl. einer Gewichtung verteilte Systeme werden gerne horizontal skaliert (neo.germ., coll.: „scaling out")
  8. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität Folgerung durch horizontale Skalierung wird die Adressierung an den Schnittstellen der Komponenten dynamisch
  9. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität Folgerung durch horizontale Skalierung wird die Adressierung an den Schnittstellen der Komponenten dynamisch deswegen muß zur Laufzeit die Konfiguration oft und nicht vorhersagbar angepaßt werden
  10. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität Folgerung durch horizontale Skalierung wird die Adressierung an den Schnittstellen der Komponenten dynamisch deswegen muß zur Laufzeit die Konfiguration oft und nicht vorhersagbar angepaßt werden zentrale Mechanismen (operator action oder config management) eignen sich nicht mehr besonders (zu langsam!)
  11. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität Lösung wenn ein Sub-System → Komponente des verteilten Systems instantiiert wird, meldet sich diese Komponente bei einer zentralen Instanz an
  12. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität Lösung wenn ein Sub-System → Komponente des verteilten Systems instantiiert wird, meldet sich diese Komponente bei einer zentralen Instanz an verläßt diese Komponente das System, meldet sie sich ab
  13. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität Lösung wenn ein Sub-System → Komponente des verteilten Systems instantiiert wird, meldet sich diese Komponente bei einer zentralen Instanz an verläßt diese Komponente das System, meldet sie sich ab verlieren die Zentrale oder Komponenten des Systems die Verbindung zu der Einzelkomponente, wird diese als failed deklariert
  14. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität ein Beispiel: verteilte key-value DB „etcd" Raft consensus algorithm (Ongaro, Ousterhout, In Search of an Understandable Consensus Algorithm, 2014)
  15. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität ein Beispiel: verteilte key-value DB „etcd" Raft consensus algorithm (Ongaro, Ousterhout, In Search of an Understandable Consensus Algorithm, 2014) http://thesecretlivesofdata.com/raft/
  16. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität ein Beispiel: verteilte key-value DB „etcd" Raft consensus algorithm (Ongaro, Ousterhout, In Search of an Understandable Consensus Algorithm, 2014) http://thesecretlivesofdata.com/raft/ leader election / voting, Changes nur über den Leader
  17. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Problemstellung Folgerung Lösung

    Realität ein Beispiel: verteilte key-value DB „etcd" Raft consensus algorithm (Ongaro, Ousterhout, In Search of an Understandable Consensus Algorithm, 2014) http://thesecretlivesofdata.com/raft/ leader election / voting, Changes nur über den Leader change → log → notify → commit → notify → consensus
  18. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Anwendungsfälle Beispiel:

    etcd, fleetd und confd / go template fleetd confd - go template Anwendungsfälle shared configuration of a distributed system → service registry
  19. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Anwendungsfälle Beispiel:

    etcd, fleetd und confd / go template fleetd confd - go template Anwendungsfälle shared configuration of a distributed system → service registry Bsp.: (stateless) Container Cluster (CoreOS, Borg, Kubernetes)
  20. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Anwendungsfälle Beispiel:

    etcd, fleetd und confd / go template fleetd confd - go template „etcd”-Datensatz 1 core@NL -AMS -30 beae0b98ec45b54c4c43724bf6e1cf ~ $ etcdctl ls --recursive /_coreos.com /_coreos.com/fleet 3 /_coreos.com/fleet/state /_coreos.com/fleet/state/named@1.service 5 [...] /_coreos.com/fleet/unit 7 /_coreos.com/fleet/unit /02 ca6fd1c6d416139fad85361136c42db7f9d307 [...] 9 /_coreos.com/fleet/engine /_coreos.com/fleet/engine/version 11 /_coreos.com/fleet/job /_coreos.com/fleet/job/named@3.service 13 /_coreos.com/fleet/job/named@3.service/target -state /_coreos.com/fleet/job/named@3.service/object 15 [...] /_coreos.com/fleet/lease 17 /_coreos.com/fleet/lease/engine -leader /_coreos.com/fleet/machines 19 /_coreos.com/fleet/machines /62 e225f2e320d7418b118c7c4b374868 [...]
  21. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Anwendungsfälle Beispiel:

    etcd, fleetd und confd / go template fleetd confd - go template „etcd”-Registration und -Abfrage ExecStartPost =-/usr/bin/etcdctl mkdir /services 2 ExecStartPost =-/usr/bin/etcdctl mkdir /services/my ExecStartPost =/bin/bash -c \ 4 'etcdctl set /services/my/%n 6 "%H $(cat /etc/motd.d/info.conf | grep Public | 8 cut -f 3 -d" "):8080"' 2 core@NL -AMS -30 beae0b98ec45b54c4c43724bf6e1cf ~ $ etcdctl get /servies/my/<unitname >@1.service 4 <hostname > 108.61.188.92:8080
  22. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Anwendungsfälle Beispiel:

    etcd, fleetd und confd / go template fleetd confd - go template „fleetd services" [Service] 2 ExecStartPre =-/usr/bin/docker rm -vf named ExecStartPre =/usr/bin/docker build -t \ 4 <dckrreg >:<port >/cjr/named \ https :// github.com/<bla >.git#:named 6 ExecStart =/usr/bin/docker run \ --name named \ 8 --hostname named \ -p 53:53/ udp \ 10 -p 53:53 \ -v /data/bind9/named.conf.local:/etc/ bind/named.conf.local \ 12 -v /data/bind9/db:/data \ <dckrreg >:<port >/cjr/named 14 ExecReload =/usr/bin/docker restart named ExecStop=-/usr/bin/docker rm -vf named
  23. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Anwendungsfälle Beispiel:

    etcd, fleetd und confd / go template fleetd confd - go template „fleetd section” 1 [X-Fleet] Conflicts=named@ *. service 3 MachineMetadata=ENTRYPOINT=FALSE 1 $> fleetctl start named@1.service $> fleetctl list -unit -files
  24. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Anwendungsfälle Beispiel:

    etcd, fleetd und confd / go template fleetd confd - go template „fleetd controlled cluster” [cjr@lamport :/home/cjr] 2 $ fleetctl_ams list -unit -files 4 UNIT DSTATESTATE TARGET 6 confd_@1.service launched .../108.61.99.168 named@1.service launched .../108.61.188.92 8 named@2.service launched .../108.61.99.168 named@3.service inactive - 10 nginx_prel.service launched .../108.61.188.92 nginx_prod@1.service launched .../108.61.188.92 12 nginx_prod@2.service inactive -
  25. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Anwendungsfälle Beispiel:

    etcd, fleetd und confd / go template fleetd confd - go template „etcd - confd” - config [template] 2 src = "haproxy.cfg.tmpl" dest = "/etc/haproxy/haproxy.cfg" 4 keys = [ "/service/app" 6 ] check_cmd = "echo checking && 8 haproxy -c -f {{ .src }}" reload_cmd = "echo reloading && 10 haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid 12 -st $(cat /var/run/haproxy.pid)"
  26. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Anwendungsfälle Beispiel:

    etcd, fleetd und confd / go template fleetd confd - go template „etcd - confd” - template [...] 2 listen appname bind :80 4 mode http balance roundrobin 6 option forceclose option forwardfor 8 {{range getvs "/service/my/*"}} 10 server {{.}} check {{end}} 12 [...]
  27. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Anwendungsfälle Beispiel:

    etcd, fleetd und confd / go template fleetd confd - go template Das war etcd
  28. Service Discoveries Christopher J. Ruwe cjr@cruwe.de Kontext Realität Anwendungsfälle Beispiel:

    etcd, fleetd und confd / go template fleetd confd - go template Das war etcd weiter geht’s mit dem Stefan und consul nach der Maus ...