MoR: Consul & Distributed systems are hard
Mit Consul, vorgestellt vom Zweitag-Mitarbeiter Stephan Epping, und einem Erfahrungsbericht aus der Praxis zu verteilten Systemen, vorgetragen durch Michael Schäfermeyer von Inverse, hatten wir zwei hoch interessante Themen anzubieten.
Stephan Epping: Consul
Consul ist ein Open-Source-Tool der Firma Hashicorp und dient zur Konfiguration von Clustern, die ausfallsicher und skalierbar sein müssen. Es bietet dabei die folgenden drei Hauptmerkmale:
- Service Discovery
- Failure Detection und Health Checks
- Verteilter Key-Value-Store
Für die Konfiguration und das Monitoring des Clusters bietet Consul verschiedene Schnittstellen an, z.B. gibt es die Möglichkeit, die Service Discovery über DNS, HTTP oder RPC abzubilden. Die Failure Detection ist sehr effizient über ein so genanntes Gossip-Protokoll umgesetzt - dafür nutzt Consul das Serf Protokoll, welches ebenfalls von Hashicorp entwickelt wurde und auf dem bekannten SWIM-Protokoll basiert. Zusätzlich erlauben so genannte Health Checks, die lokal auf den einzelnen Knoten ausgeführt werden, ein effizientes Monitoring des aktuellen Zustands des Clusters. Dadurch lässt sich die Last auf dem Cluster optimal verteilen.
Überlastungen von einzelnen Knoten können frühzeitig erkannt und automatisiert abgefangen werden. Das Herzstück von Consul ist der integrierte und verteilte Key-Value-Store, in dem alle Informationen des Clusters hinterlegt sind. Dazu gehören die Liste aller Knoten, deren Services und deren Status. Zudem lassen sich eigene Daten im Store hinterlegen, die beispielsweise zur (Re-(Konfiguration der einzelnen Knoten benutzt werden können.
Der Key-Value-Store basiert auf einer Implementation des bekannten Raft Consensus Protokolls, das die Konsistenz des Stores sicherstellt. Durch die offene und flexible Architektur von Consul lassen sich viele Use-Cases abbilden, und es existieren bereits viele Erweiterungen, die den Einsatz von Consul weiter erleichtern. Insgesamt besticht Consul durch seine reichhaltigen Features und die einfache Integration in ein Infrastruktur-Setup.
Michael Schäfermeyer: Distributed systems are hard… Wie wir unser CMS gerettet haben
Bei Michael Schäfermeyers Vortrag ging es um die Schwierigkeit der Entwicklung verteilter Systeme in unzuverlässigen Netzwerken. Im Speziellen bot er Einblicke in die Entwicklung des Content Management Systems (CMS) von Inverse, bei dem eben solche Netzwerke (zum Beispiel auf Konferenzen oder nahezu überall in New York) die Nutzung einer klassischen, auf REST-basierenden API für die Synchronisation komplexer Datenstrukturen nahezu unmöglich machen.
Als Lösungsansatz wurde der von Google entwickelte DiffSync Algorithmus vorgestellt, der speziell für die Synchronisation von verschiedenen Clients und Servern in unzuverlässigen Netzwerken geeignet ist. Ein Vorgänger dieses Algorithmus wurde zum Beispiel in einer frühen Version von Google Docs eingesetzt.
Mit der Nutzung von Websockets wurde bei Inverse eine Lösung geschaffen, welche auch bei schwierigen Situationen eine reibungslose Nutzung des CMS ermöglicht und darüber hinaus sogar das kollaborative Arbeiten an verschiedenen Standorten an einem Artikel ermöglicht. Wie üblich wurde Michael hierbei nicht müde, die Vorzüge des Phoenix-Frameworks, welches auf Elixir basiert und nahezu alle System bei Inverse betreibt, herauszustellen.
Über Monster on Rails
Die „Monster on Rails“ User Group Münster beschäftigt sich mit Themen rund ums Software Engineering, insbesondere Ruby und Ruby on Rails, diskutiert aber auch über Technologien, die um das Ruby-Ökosystem herum existieren, wie z. B. Javascript, Elixir, Go, Docker und NoSQL. In der Regel treffen wir uns immer am letzten Donnerstag im Monat. Nach einign Vorträgen zum jeweiligen Thema beenden wir den Abend in entspannter Atmosphäre bei einem Bier. Wir freuen uns über jedes neue Gesicht!