Hochverfügbarer Java-Enterprise-Betrieb

Java ist nach wie vor eine der weit verbreitetsten Programmiersprachen. Vor allem im Enterprise-Umfeld ist der Einsatz von Java bei der Entwicklung von Webapplikationen oft Alternativlos. Dementsprechend hatten wir die Anforderung, für einen unserer Kunden eine Infrastruktur aufzusetzen, in dem eine Java-Applikation ausfallsicher laufen kann. Als Datenspeicher nutzt die Applikation eine MySQL-Datenbank.

Die Funktionsfähigkeit der Anwendung steht und fällt mit der Verfügbarkeit der Datenbank, also war es notwendig, die Datenbank mit entsprechender Replikation laufen zu lassen. Dazu verwenden wir MariaDB mit der Replikations-Schicht Galera mit einer Multi-Master-Replikation.

Die Applikations-Server benutzen eine aktuelle Tomcat-Version mit der entsprechenden Applikation und einem davorgeschalteten HTTP-Loadbalancer (von Amazon AWS). Der Datenbankzugriff der Java-Apps läuft aber nicht direkt auf die DB-Server sondern über eine zwischengeschaltete Instanz von HAProxy. So ist es uns möglich, Fehlerzustände der Datenbank schneller zu erkennen und auf noch intakte Nodes umzuschwenken, ohne dass die Applikation selbst Kenntnis über den Zustand der Datenbank haben muss.

Mit dieser Architektur erreichen wir eine Performance von über 1500 möglichen HTTP-Requests pro Sekunde, im Schnitt liegt die Last im Normalbetrieb bei ca. 60 Requests/s.

SwitchDB

Mein erstes Projekt an der Universität, bzw. das Projekt, wofür ich ursprünglich eingestellt wurde, war die SwitchDB.

Das Netzwerk der Universität besteht aus über 200 Switches, zusammen über 6.000 Ethernet-Ports besitzen. Jeder dieser Ports muss Standort- und nutzungsabhängig konfiguriert werden. Da es verschiedene Abteilungen gibt, die jeweils unterschiedliche Berechtigungen haben sollen (z. B. sollte der IT-Beauftragte der Informatik nur die dort lokalisierten Switches konfigurieren können, aber nur mit den VLANs, die zur Informatik gehören – und nicht die der z. B. Mathematik). Desweiteren gab es Rollen, die Ports nur aktivieren/deaktivieren können sollen, ohne weitere Einstellungen zu verändern; außerdem welche, die globalen (oder auch limitierten) reinen Lesezugriff haben sollten. Kurzum: Das Rechtemodell war sehr umfangreich und komplex und keine uns bekannte Lösung hatte bei Projektstart die erforderlichen Funktionen, um dies entsprechend abzubilden.

Daher wurde die Entwicklung der SwitchDB beschlossen: Ein webbasiertes, in PHP geschriebenes Tool zur Verwaltung des kompletten Universitätsnetzwerkes. Als Datenspeicher diente eine MySQL-Datenbank, die Verbindung zu den Switches wurde über das SNMPv2-Protokoll umgesetzt.

Änderungen werden direkt per SNMP an Switches übertragen, damit ist auch der Erfolg oder eventuelle Fehler bei der Konfiguration direkt kontrollierbar. Umfangreiche Cronjobs scannen in regelmäßigen Abständen das gesamte Netzwerk, um den aktuellen Zustand in der Datenbank abbilden und darauf aufbauend detaillierte Informationen zur Verfügung stellen zu können. Später wurden noch zeitbasierte Änderungen (für z. B. terminierte Veranstaltungen) implementiert. Über Das Neighbour Discovery Protocol konnten außerdem neu angeschlossene Switches automatisch erkannt und integriert werden. Ein Dienst zum Empfangen von SNMP-Traps ermöglichte sogar direkte Reaktionen auf gerade aufgetretene Events (z. B. „Endgerät eingesteckt“, „Switch rebooted“, etc.). Über das implementierte Rechtemanagement konnte für jede zu setzende Eigenschaft pro Rolle sowohl gültige Werte als auch bis auf den Port genau Zugriffe geregelt werden.