Mai 5, 2019

Think!First Feldtest - Eine technische Retrospektive

Bei der Durchführung des Think!First Feldtests kamen in rund 170 Tagen zahlreiche Technologien zum Einsatz. Dieser Artikel benennt rückblickend die wichtigsten Zahlen und Fakten.

Think!First Feldtest - Eine technische Retrospektive

Bei der Durchführung des Think!First Feldtests wurden innerhalb von rund 170 Tagen durchgehend zwei Cluster in verschiedenen Datencentern betrieben. Für die Integration in den Grüne Erde Webshop mussten dabei alle Page Requests des Live-Betriebs verarbeitet werden. Je nach Testteilnahme wurde dann entschieden, welche ergänzenden Inhalte im Webshop dargestellt werden.

Bei Entwicklung und Betrieb der verteilten Systeme kamen zahlreiche Opensource-Technologien zum Einsatz. Als Programmiersprachen waren Scala, Ruby, TypeScript und JavaScript dominant.

Application Life-cycle Management

Für das Application Life-cycle Management (ALM) wurden DevOps-Automatisierungen von Attribui und die Opensource-Clustertechnologie von HashiCorp eingesetzt. Aktuelle Services wurden direkt aus dem Version Control Management (VCM) von Atlassian Bitbucket via Terraform in einen Nomad/Consul/Fabio-Cluster auf DigitalOcean veröffentlicht. Auf die veröffentlichten Services wurde via Load Balancer zugegriffen.

Im Webshop wurden dynamisch und asynchron via JavaScript Features in bestehende Webseiten integriert. Das unter Einhaltung aller Anforderungen an Datenschutz und ethische Ansprüche.

Nomad Cluster - Jobs
Nomad Cluster - Servers

Das Setup

Application Cluster

Der Application Cluster diente zur zuverlässigen Verfügbarmachung aller (Micro-)Services. Als Betriebssystem diente CoreOS. Dazu wurden Clients in Native JS/SCSS und in Angular veröffentlicht, sowie APIs, die durch die OpenAPI Spezifikation beschrieben wurden (2. 0 und 3.0). Zusätzlich wurden Test- und Abnahmesysteme und auch Tools zur Arbeit mit RESTful APIs und OpenAPI-Dokumentation für das Projekt-Team verfügbar gemacht.

Im Verlauf des Feldtests wurden 10 Systemupdates automatisiert durchgeführt.

Fabio Routing Table

OpenAPI / Swagger

Alle Features, Änderungen und Fixes wurden durch ein standardisiertes ALM ausgeliefert. Die serverseitige Kommunikation erfolgte via RESTful API und wurde durch die OpenAPI-Spezifikation dokumentiert.

Swagger UI - Think!First API

Datenbank-Cluster

Für die Datenverwaltung wurde ein Cluster der dokumentenbasierten Datenbank MongoDB auf Amazon AWS aufgesetzt. Die Nodes liefen in einer Virtual Private Cloud (VPC) auf europäischer Infrastruktur. Alle Daten wurden verschlüsselt gespeichert und regelmäßige Backups automatisiert abgelegt.

Für den Datenbank-Cluster erfolgte ein Whitelisting der IPs von Entwicklungs-, Test- und Live-Systemen. Für alle anderen IPs war er nicht erreichbar.

MongoDB Datenbankaktivität

Web-Sicherheit

Die erlaubten Kommunikationsziele wurden auf ein Minimum reduziert und es wurde sichergestellt, dass nur freigegebene und getestete Scripts eingesetzt werden.

Monitoring

Ein umfangreiches Monitoring ermöglichte die Kontrolle von Verfügbarkeit, Zugriffen, Zugriffszeiten und prognostizierten Systemveränderungen.

Wochenstatistik während des Feldtests

Der Feldtest

Eingehende HTTP-Anfragen wurden mehrmals pro Sekunde an einzelne Services delegiert. Saisonal abhängig waren permanent zwischen 20 und 80 Datenverbindungen zum Datenbank-Cluster geöffnet. Alle für den Feldtest interessanten Interaktionen wurden mittels Event Sourcing festgehalten. Levels einzelner wiederkehrender TeilnehmerInnen wurden entsprechend dynamisch aggregiert. Dazu wurden Aktoren-Systeme in Scala und Reactive Streams verwendet. Insgesamt wurden rund 20.000 relevante Events aufgezeichnet. Die durchschnittliche Session-Dauer betrug 9 Minuten. Durchschnittlich wurden 66 Ereignisse und Aktionen pro TeilnehmerIn registriert.