Webseite wird regelmäßig kurzzeitig unvollständig oder fehlerhaft dargestellt
Verfasst: 14 Okt 2024, 14:31
Da es keine WeeWX-Abteilung gibt, setze ich das mal hierhinein. Dabei bin ich mir gar nicht so sicher, ob das überhaupt ein WeeWX-spezifisches Thema ist und nicht WsWin genau so betrifft. Also:
Jeder Nutzer wird es schon einmal beobachtet haben: Da ruft man die Wetter-Website auf und erhält nur eine unvollständige, beschädigt wirkende Seite oder gar Fehlermeldung 404 oder 403. Ein Klick auf Reload wenige Sekunden später, und alles ist wieder in Ordnung. Die Ursache liegt bei der Art und Weise, wie die Webseiten aktualisiert werden. Das geschieht so, daß zunächst lokal die Seiten neu erzeugt und dann auf den Server hochgeladen werden, oft mittels FTP. Und während die Dateien geschrieben werden, ist die alte Datei nicht mehr verfügbar und die neue noch nicht vollständig. Wenn man die Seite genau in dem Moment abruft, bekommt der Browser nur die unvollständige Datei und zeigt dementsprechend keine richtige Seite an.
Man könnte jetzt denken, das ist nur eine sehr kurze Zeit, und das passiert auch nur alle fünf Minuten. Ich gucke aber auch regelmäßig in die "Google Search Console", und da zeigt sich, daß Google diese Momente dennoch findet und sich darüber beschwert.
Nun habe ich darüber nachgedacht, wie man das Problem umgehen könnte. Unter Linux tut man das üblicherweise so, daß man die neue Datei zuerst unter einem anderen Namen schreibt und anschließend in den richtigen Namen umbenennt, wobei automatisch die alte Datei verschwindet, und die Definition sagt ausdrücklich, daß dieser Vorgang atomar ist, also daß kein anderes Programm und kein anderer Benutzer da zwischen dem Entfernen der alten Datei und dem Umbenennen reinkommt. So bekommt man immer eine vollständige Datei. Leider bietet FTP diese Funktion nicht. Und viele Webspace-Provider bieten nur FTP an. Alternativen gäbe es nämlich, zum Beispiel rsync. Um das freizuschalten, braucht man ein größeres und teureres Paket, als es für eine Wetter-Website nötig ist.
Was es beim Provider aber fast immer gibt, ist eine Datenbank. Und die hat ein Transaktionsmanagement, das heißt, der geänderte Datensatz wird erst zurückgeliefert, wenn er vollständig geschrieben ist, und bis dahin der alte, ebenfalls vollständig. Zusammen mit PHP kann man das zur Bereitstellung der Webseiten nutzen. Diesen Ansatz habe ich programmiert. Daraus ist der SQL Upload Generator entstanden, und er funktioniert auch ganz gut.
Nachteile gibt es natürlich auch. Wenn Seiten nur in größeren zeitlichen Abständen aktualisiert werden müssen, dann vermittelt das Umschreiben der Webseiten in PHP-Scripte dem Reportgenerator den Eindruck, daß die Datei noch nicht existiert und deshalb jedes Mal neu erzeugt werden muß. Und da Python, in dem WeeWX geschrieben ist, unheimlich langsam ist, merkt man das auch, wenn man Vorgänge unnötig oft ausführt. Dafür habe ich noch keine vernünftige Lösung gefunden.
Jeder Nutzer wird es schon einmal beobachtet haben: Da ruft man die Wetter-Website auf und erhält nur eine unvollständige, beschädigt wirkende Seite oder gar Fehlermeldung 404 oder 403. Ein Klick auf Reload wenige Sekunden später, und alles ist wieder in Ordnung. Die Ursache liegt bei der Art und Weise, wie die Webseiten aktualisiert werden. Das geschieht so, daß zunächst lokal die Seiten neu erzeugt und dann auf den Server hochgeladen werden, oft mittels FTP. Und während die Dateien geschrieben werden, ist die alte Datei nicht mehr verfügbar und die neue noch nicht vollständig. Wenn man die Seite genau in dem Moment abruft, bekommt der Browser nur die unvollständige Datei und zeigt dementsprechend keine richtige Seite an.
Man könnte jetzt denken, das ist nur eine sehr kurze Zeit, und das passiert auch nur alle fünf Minuten. Ich gucke aber auch regelmäßig in die "Google Search Console", und da zeigt sich, daß Google diese Momente dennoch findet und sich darüber beschwert.
Nun habe ich darüber nachgedacht, wie man das Problem umgehen könnte. Unter Linux tut man das üblicherweise so, daß man die neue Datei zuerst unter einem anderen Namen schreibt und anschließend in den richtigen Namen umbenennt, wobei automatisch die alte Datei verschwindet, und die Definition sagt ausdrücklich, daß dieser Vorgang atomar ist, also daß kein anderes Programm und kein anderer Benutzer da zwischen dem Entfernen der alten Datei und dem Umbenennen reinkommt. So bekommt man immer eine vollständige Datei. Leider bietet FTP diese Funktion nicht. Und viele Webspace-Provider bieten nur FTP an. Alternativen gäbe es nämlich, zum Beispiel rsync. Um das freizuschalten, braucht man ein größeres und teureres Paket, als es für eine Wetter-Website nötig ist.
Was es beim Provider aber fast immer gibt, ist eine Datenbank. Und die hat ein Transaktionsmanagement, das heißt, der geänderte Datensatz wird erst zurückgeliefert, wenn er vollständig geschrieben ist, und bis dahin der alte, ebenfalls vollständig. Zusammen mit PHP kann man das zur Bereitstellung der Webseiten nutzen. Diesen Ansatz habe ich programmiert. Daraus ist der SQL Upload Generator entstanden, und er funktioniert auch ganz gut.
Nachteile gibt es natürlich auch. Wenn Seiten nur in größeren zeitlichen Abständen aktualisiert werden müssen, dann vermittelt das Umschreiben der Webseiten in PHP-Scripte dem Reportgenerator den Eindruck, daß die Datei noch nicht existiert und deshalb jedes Mal neu erzeugt werden muß. Und da Python, in dem WeeWX geschrieben ist, unheimlich langsam ist, merkt man das auch, wenn man Vorgänge unnötig oft ausführt. Dafür habe ich noch keine vernünftige Lösung gefunden.