Checker Suite - Kampf gegen inkonsistente Daten

Einem schweizer Internet Provider half ich dabei, seine zahlreichen Umsysteme wieder "In-Sync" zu bringen, dank der Entwicklung einer Checker-Suite.
Problemstellung
Zahlreiche Systeme wurden über Jahre hinweg einseitig miteinander synchronisiert, ohne Modifikationen in den Child-Systemen zu unterbinden. Die Konsequenz: Inkonsistente Datenbestände über alle Systeme hinweg. Dies verunmöglichte die Automatisierung von Prozessen und die weitere digitale Transformation des Kunden.
Lösung
Durch die Entwicklung einer Checker-Suite, welche alle Datenquellen und Systeme anbindet und integriert, die Daten abruft, normalisiert und mit zahlreichen APIs und Datastores verifiziert, konnte ein sauberer Datenbestand wiederhergestellt werden.
Etwaige Inkonsistenzen werden nun proaktiv erkannt und durch die nahtlose Integration in die ITSM Plattform "ServiceNow" auch zeitnah gemeldet und bereinigt.
Umsetzung
Welchen Daten kann man trauen, wenn alle Systeme korrumpiert sind? Wie geht man vor, um dieses Problem zu lösen?
Zu Beginn wurde eine Bestandesaufnahme mit den Lead-Engineers aus allen Bereichen durchgeführt. Es zeigte sich rasch, dass zur Erkennung und Bereinigung zahlreiche Upstream-Systeme von anderen Unternehmen notwendig würden. Da wo das nicht möglich war, mussten andere Möglichkeiten gesucht werden.
Ich entschied mich, eine serviceorientierte MVC-Anwendung aufzubauen und alle internen Umsysteme erstmals anzubinden. Diese bestanden aus diversen Datastores (MySQL, MSSQL, MongoDB), APIs (REST, SOAP) und diversen Prüflisten (CSV, XML). Anschliessend machte ich mich mit der Datenstruktur vertraut, baute entsprechende Entitäten, setzte diese in Relation zueinander und hydrierte und normalisierte diese mit den Rohdaten aus den Umsystemen.
Mit den strukturierten Daten im Zugriff konnte man Arbeiten. Als nächstes integrierte ich alle Upstream-Systeme, welcher zur Plausibilisierung benötigt wurden. Hierzu zählten unter anderem die APIs von Swisscom (WSG und B2B), der Schweizer Post, dem Handelsregisteramt, Moneyhouse, Cisco, VMWare, Microsoft Dynamics und viele weitere.
Als letzter Schritt definierten wir eine Vielzahl an Use-Cases pro Umsystem und überlegten uns einen Prozess, wann die Daten als valide galten. Hier war viel Know-How der internen Business Prozesse notwendig - am Ende lief es aber oft auf "Try-and-Error" hinaus. Es entstand eine Checker-Suite, welche auf Knopfdruck die internen Systeme und die teils komplexen internen Business Prozesse überprüfen und bei Inkonsistenzen alarmieren konnte.
Für die Checker-Suite selbst nutzte ich OOP
-Techniken und baute auf den SOLID
- und DRY
-Prinzipien auf. Das Ergebnis war eine abstrakte Lösung, welche schnell um weitere Checks erweitert werden konnte.
Zum Schluss ergänzte ich die Lösung um eine REST-API und liess das Ganze als Container auf Kubernetes laufen. Der Kunde integrierte die API in seine interne ITSM-Plattform "ServiceNow", womit eine proaktive Überwachung und Alarmierung ermöglicht und etwaige Inkonsistenzen frühzeitig erkannt wurden.
Meine Arbeiten
- Analyse: Reverse-Engineering der Datenquellen und Aufbau der diversen Test-Cases nach Umsystem mit den internen Lead-Engineers.
- Konzeption: Erstellen eines Software-Konzepts für eine flexible, ausbaubare, performante Checker-Suite.
- Proof of Concept: Prüfen der Machbarkeit mittels eines PoCs und lokalen Test-Instanzen diverser Datenquellen.
- Umsetzung: Entwicklung einer MVC-Anwendung, integrieren der diversen Datenbanken und APIs, CLI-Tools, Bereitstellen via REST-API, Alarmierung via Mail.
- Testing: Erstellung einer Vielzahl an Unit- und Functional-Tests.
- Deployment: Veröffentlichung als Container auf einem internen Kubernetes-Cluster.
- Dokumentation: Festhalten der Architektur, der diversen Test-Cases, der Datenstruktur und der API.
Tech-Stack
- Backend:
- Laminas
- laminas-di und laminas-servicemanager zur Dependency Injection und als Instanzmanager
- laminas-filter und laminas-validator zur Filterung und Validierung der Rohdaten
- laminas-hydrator zur Hydrierung und De-Hydrierung der Daten/Objekte
- laminas-db zur Anbindung diverser Datenbanken (MySQL, MSSQL, MongoDb)
- laminas-http zur Anbindung diverser REST-APIs (u.a. Swisscom, ServiceNow, Cisco, uvw.)
- laminas-diactoros für PSR kompatible HTTP Request- und Response-Objekte
- laminas-soap zur Anbindung diverser SOAP-Schnittstellen (u.a. Swisscom, Navision/Dynamics)
- laminas-ldap und laminas-authentication zur Anbindung des internen Active Directory und zur Authentifizierung der internen Benutzer
- laminas-mail zur Alarmierung
- laminas-log fürs Logging
- laminas-cache für einen Object- und Mem-Cache
- brennerm/check-mk-web-api zur Anbindung der CheckMK API
- mlocati/ip-lib zur Normalisierung der IP-Daten (Herzlichen Dank an Michele Locati und alle Mitwirkende für die tolle Arbeit!)
- Frontend: laminas-view (MVC) mit diversen HTML/CSS-Templates
- Deployment: Als Container auf dem internen Kubernetes-Cluster des Kunden
Fazit
Bei dem Projekte zeigte sich, wie wichtig ein sauberes Fundament ist. Geht man beim Wachstum des eigenen Unternehmens zu schnell vor, ohne regelmässig die technischen Schulden abzubauen, kommt man irgendwann an einen Punkt wo Innovation verunmöglicht wird. Das zur Lösung des Problems benötigte Reverse-Engineering war nicht immer einfach und sehr aufwändig, da die Know-How-Träger der Legacy-Systeme und Datenkonstrukte längst nicht mehr im Unternehmen tätig waren.
Durch die Datenbereinigung konnte der Kunde seine digitale Transformation nach langem Stillstand wieder aufnehmen. Die proaktive Überwachung ganzer Business-Prozesse über mehrere Systeme hinweg, ermöglichte es dem Kunden am Ende seinen Endkunden wieder den gewohnten Service zu bieten.