2017-12-11

Ausfall der Citavi-Cloud am 9.12.2017 - Hintergrundinfos

Seit 90 Tagen läuft der Beta-Test von Citavi 6. Eine wichtige neue Funktion ist die Möglichkeit, Citavi-Projekte in der Cloud zu speichern. Am Samstag, 9. Dezember 2017 kam es von 15 bis 18 Uhr zu Störungen bei der Arbeit mit Cloud-Projekten. Dadurch sank die durchschnittliche Verfügbarkeitsrate auf 99,86%.
Unsere Entwickler haben den Vorfall untersucht und stellen Ihnen die Ergebnisse ihrer Recherchen vor. Wir informieren Sie, welche Schritte wir jetzt unternehmen, um eine Wiederholung des Vorfalls zu vermeiden.

Wie hat sich der Ausfall bemerkbar gemacht?

Sie konnten keine Cloud-Projekte öffnen oder Änderungen in Cloud-Projekten oder deren Offline-Kopien speichern.

Wie konnte es dazu kommen?

Citavi Cloud-Projekte nutzen die Infrastruktur der Microsoft Cloud («Azure»). Wir betreiben auf Azure eine «WebApp» mit mehreren Instanzen, welche die Anfragen von Citavi 6 entgegennehmen und verarbeiten. (Eine WebApp-Instanz entspricht ungefähr einem Webserver.)Die WebApp-Instanzen kommunizieren mit vielen weiteren Diensten, zum Beispiel mit der Datenbank, mit dem Datei-Speicher oder mit einem Cache-Dienst. Die Zugangsdaten zu diesen Diensten sind in unserem Programmcode so verschlüsselt, dass sie nur mit einem bestimmten Zertifikat gelesen werden können. (Wir verwenden dies u.a. als Sicherheitsmaßnahme für den Fall, dass einer unserer Entwicklercomputer gestohlen wird.) Das Zertifikat ist auch in unserer WebApp hinterlegt, damit die laufenden Instanzen Zugang zu Datenbank, Speicher, Cache usw. erhalten. Die Entschlüsselung erfolgt beim Start einer Instanz mit einem so genannten «Lazy»-Aufruf. Der Wert wird einmalig entschlüsselt und anschliessend im Arbeitsspeicher vorgehalten.
Azure startet WebApp-Instanzen regelmäßig neu, um aktuelle Sicherheitspatches zu installieren oder andere Wartungsarbeiten durchzuführen. Da immer mehrere Instanzen laufen, führt dies zu keinen Unterbrechungen.
Am Samstag, 9. Dez. 2017 um 15 Uhr wurde eine unserer WebApp-Instanzen neu gestartet. Bei der Entschlüsselung der Zugriffsdaten für den Cache kam es zu einem Fehler beim Abruf des Zertifikats. Der Fehler trat innerhalb der Azure-Infrastruktur auf und lässt sich nicht reproduzieren. (Er trat nach vielen tausend Starts zum ersten Mal auf.) Er hätte unter normalen Umständen auch keine Konsequenzen gehabt, weil bei einer Wiederholung des Vorgangs alles einwandfrei funktioniert hätte.
Wir hatten mit diesem Fehler in unserem Programmcode nicht gerechnet. Statt die Entschlüsselung zu wiederholen, enthielt der Arbeitsspeicher nun ein defektes «Lazy»-Objekt. Das führte zu einem Folgefehler bei jedem Cache-Aufruf und schlussendlich dazu, dass Citavi Cloud-Projekte nicht mehr geöffnet oder bearbeitet werden konnten.
Weil nur eine Instanz betroffen war, bekam Citavi for Windows außerdem das Signal, dass die Cloud verfügbar sei. Darum hat Citavi nicht wie erwartet reagiert und Ihre Änderungen an einem Cloud-Projekt nicht im lokalen Projekt-Cache zwischengespeichert. Alle Änderungen, die Sie in der o.g. Zeitspanne gemacht hatten, waren damit verloren.

Was machen wir jetzt besser?

Als Konsequenz aus dem Vorfall werden wir alle Stellen überprüfen, die mit Lazy-Konstrukten arbeiten und sie so umprogrammieren, dass die Initialisierung im Falle eines Fehlers wiederholt wird.