surech.ch – Homepage von Stefan Urech

Praktizierender Zyniker und Freidenker

Preisanzeige im Fahrplan – Technischer Hintergrund

| 3 Kommentare

Seit heute werden im Online-Fahrplan auf sbb.ch direkt die Preise angezeigt!
Preianzeige für die Strecke Bern - Luzern
In diese Bericht erfahrt ihr aus erster Hand einige Details über den technischen Hintergrund und die Herausforderungen bei der Umsetzung. Und ich erkläre, warum nicht für alle Strecken ein Preis angezeigt wird.

Die Aufgabe war klar: Im Fahrplan soll pro Verbindung der halbe Preis für die zweite Klasse angezeigt werden. Bisher musste der Kunde dafür in den Shop einsteigen, was definitiv zu umständlich war.

Die Herausforderung: Der Fahrplan ist eine der am meisten aufgerufenen Internetseiten der Schweiz. Der Spitzenwert im letzten Jahr waren über 100’000 Fahrplan-Anfragen pro Stunden. Dies entspricht fast 28 Anfragen pro Sekunde, kurzfristig kann es aber auch deutlich mehr sein.
Trotzdem soll der Kunde den Preis möglichst schnell angezeigt bekommen. Und die dahinter liegenden Systeme müssen weiter stabil laufen, auch wenn der Fahrplan einmal ausserordentlich oft aufgerufen wird.

Man besucht den Fahrplan, um eine Zugverbindung von A nach B zu erhalten. Um dies weiterhin jederzeit und sehr schnell gewährleisten zu können, werden die Preise asynchron geladen. Das heisst, die Seite mit den ermittelten Verbindungen wird zuerst ohne Preise ausgeliefert und vom Browser sofort angezeigt. Erst danach wird über einen Ajax-Call für alle angezeigten Verbindungen die Preise ermittelt und nachträglich in die Seite eingefügt.

Über eine künstliche Begrenzung der Aufrufe unserer Schnittstelle stellen wir sicher, dass die Backend-Systeme auch bei hoher Last stabil laufen. Denn diese bedienen auch den Webshop, die iPhone-App, die Schaltersoftware und noch viele mehr. Da zeigen wir lieber mal keinen Preis an, als dass uns das ganze System wegen zu hoher Last um die Ohren fliegt 😉

Den Preis bei jedem Aufruf neu zu Berechnen, würde zu lange dauern. Deshalb greifen wir auf eine Datenbasis zurück, welche die Preise für gut 3 Millionen Verbindungen enthält. Diese ergibt sich aus allen Möglichkeiten, zwischen den 2000 am meisten benutzten Bahnhöfen zu reisen. Dabei ist allerdings folgendes zu beachten: Der Fahrplan benutzt ein anderes System zur Reisebildung als wir intern zur Ermittlung dieser 3 Millionen Verbindungen benutzen. Es kann also sein, dass der Fahrplan zwar eine Verbindung zwischen A und B anzeigt, wir diese aber nicht in unserer Datenbasis führen. Entsprechend könnten wir dafür auch keinen Preis anzeigen.

Um die Anzeige weiter zu beschleunigen, setzen wir auf Caching, genauer auf einen Second Level Cache. Dabei wird zuerst geschaut, ob die Verbindung bereits geladen wurde. Wenn nicht, wird in der Datenbank nachgeschaut. Erst wenn auch dort nichts vorhanden ist, wird unsere Preisberechnung angeworfen. Diese läuft auf einem Hostsystem, auf welches wir nur beschränkt zugreifen dürfen. Wenn für eine Verbindung noch kein Preis ermittelt wurde, das Kontingent für den Zugriff auf das Hostsystem aber schon ausgeschöpft ist, wird kein Preis angezeigt. Dies führt dazu, dass gerade bei selten angefragten Verbindungen zuerst nichts angezeigt wird. Wiederholt man die Anfrage aber einige Minuten später wieder, erscheint der Preis.

Zum Schluss noch einige oft gestellte Fragen, welche ich an dieser Stelle gerne beantworte:

Was für ein Preis wird angezeigt?
Es handelt sich um den halben Preis für eine einfache Fahrt in der zweiten Klasse.

Bei meiner Haus-Strecke wird nie ein Preis angezeigt!
Es werden nur Preise für Strecken zwischen den 2000 am meisten benutzen Bahnhöfen angezeigt. Liegt der Abfahrt- oder Zielort ihrer Anfrage an einem seltener benutzen Bahnhof wird leider kein Preis angezeigt.

Eben wurde kein Preis angezeigt, jetzt aber schon. Warum?
Der Fahrplan wird gerade sehr oft aufgerufen. Dabei kann es vorkommen, dass zugunsten der Stabilität unserer Systeme nicht immer ein Preis angezeigt wird.

Zwischen Bern und Luzern werden unterschiedliche Preise angezeigt!
Tatsächlich gibt es verschiedene Strecken, welche man auf unterschiedlichem Wege erreichen kann. Und diese Wege können einen anderen Preis haben. Konkret kann man von Bern nach Luzern entweder über Langnau im Emmental fahren oder via Olten/Zofigen. Letzteres kostet 18.–, während für die Reise durchs Emmental nur 16.50 bezahlt werden müssen.

Werden auch für Strecken ins Ausland die Preise angezeigt?
Nein, es werden nur für Verbindungen innerhalb der Schweiz die Preise angezeigt.

Werden die Preise auch im Fahrplan in der App auf meinem iPhone/Android angezeigt?
Nein, leider noch nicht.

3 Kommentare

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.