Nachrichten

Planet Cassandra: PROS bietet Airline-Verfügbarkeit mit Cassandra

Houston,

 

22. Oktober 2013.

Von Hari Krishnan und Christian Hasker

TL;DR: PROS ist ein Big-Data-Softwareunternehmen mit präskriptiver Analytik in seiner Software, die es seinen Kunden erleichtert, ihre Daten zu analysieren und die Erkenntnisse und Anleitungen zu erhalten, um ihre Preisgestaltung, ihren Vertrieb und ihr Umsatzmanagement zu optimieren.

PROS verwendet Cassandra als verteilte Datenbank für Dienste mit geringer Latenz und hohem Durchsatz, die Echtzeit-Workloads mit Hunderten von Aktualisierungen pro Sekunde und Zehntausenden von Lesevorgängen pro Sekunde verarbeiten. So gibt es beispielsweise einen Echtzeitdienst, der die Verfügbarkeit von Fluggesellschaften dynamisch berechnet und dabei Daten zur Umsatzkontrolle und Lagerbestände berücksichtigt, die sich mehrere hundert Mal pro Sekunde ändern können. Dieser Dienst wird mehrere Tausend Mal pro Sekunde abgefragt, was zu Zehntausenden von Datenabfragen führt. Unsere Backend-Speicherschicht für diesen Dienst ist Cassandra.

Für ihre Echtzeitlösung benötigte PROS einen verteilten Cache, der hochverfügbar, leicht skalierbar, mit einer masterlosen Architektur, mit Datenreplikation in nahezu Echtzeit auch über Rechenzentren hinweg und mit Lese- und Schreibvorgängen in Echtzeit ausgestattet ist. PROS hat Cassandra gegen Oracle Berkeley DB, Oracle Coherence, Terracotta, Voldemort und Redis getestet. Apache Cassandra führte die Liste mit Leichtigkeit an.

Hari, danke, dass Sie zu uns gekommen sind. Es wäre toll, wenn Sie uns zu Beginn ein wenig darüber erzählen könnten, was PROS macht und welche Rolle Sie dabei spielen.

PROS ist ein Big-Data-Softwareunternehmen. Die Big-Data-Wissenschaft und die präskriptiven Analysen in unserer Software ermöglichen es unseren Kunden, ihre Daten zu analysieren und Einblicke und Anleitungen zur Optimierung ihrer Preisgestaltung, ihres Vertriebs und ihres Umsatzmanagements zu erhalten. Der Software-Stack von PROS ist eine Kombination aus umfangreichen Backend-Aufgaben und Echtzeit-Anwendungen und -Services.

Wir haben über 600 Implementierungen unserer Lösungen in mehr als 50 Ländern und in über 30 Branchen abgeschlossen. Unsere wichtigsten Branchen sind derzeit die Fertigung, der Handel, Dienstleistungen und die Reisebranche. Ich bin ein Architekt bei PROS. Mein Hauptaugenmerk liegt auf Echtzeit- und Big-Data-Architekturen und -Lösungen.

Ihre Plattform optimiert also den Verkauf für viele Branchen, aber Sie konzentrieren sich auf die Reisebranche. Welche Art von Daten analysieren Sie denn? Es ist eine Art Empfehlungsmaschine für den Vertrieb, oder?

Wir analysieren die Verkaufstransaktionen. Auf der Reiseseite können Sie sich das als Buchungen vorstellen und auf der B2B-Seite sind das Verkaufstransaktionen. Wir wenden Data Science auf historische Daten an, um präskriptive Analysen und Leitlinien für die Preisgestaltung, den Vertrieb und die Umsatzkontrolle zu erstellen.

Okay, prima. Es wäre sehr hilfreich, wenn Sie ein wenig darüber sprechen könnten, wie Sie Cassandra einsetzen, für welche Anwendung Sie es verwenden und was es tut.

Wir verwenden Cassandra als verteilte Datenbank für Dienste mit geringer Latenz und hohem Durchsatz, die Echtzeit-Workloads mit Hunderten von Aktualisierungen pro Sekunde und Zehntausenden von Lesevorgängen pro Sekunde verarbeiten. Wir haben zum Beispiel einen Echtzeitdienst, der die Verfügbarkeit von Fluggesellschaften dynamisch berechnet und dabei Daten zur Umsatzkontrolle und Lagerbestände berücksichtigt, die sich mehrere hundert Mal pro Sekunde ändern können. Dieser Dienst wird mehrere Tausend Mal pro Sekunde abgefragt, was zu Zehntausenden von Datenabfragen führt. Unsere Backend-Speicherschicht für diesen Dienst ist Cassandra.

Einige unserer SaaS-Angebote nutzen Cassandra als Backend-Speicher, um eine Kombination aus Echtzeit- und Hadoop-basierten Batch-Workloads zu verarbeiten.

Wenn wir also über Hadoop und Cassandra nebeneinander sprechen, Sie die Daten aus Cassandra nehmen und sie in Hadoop einspeisen und darauf Batch- und Analysefunktionen ausführen, und diese dann wieder in Cassandra einspeisen, können Sie dann ein wenig darüber sprechen?

Ja, wir nutzen die Hadoop-Integration von Cassandra. Unsere Hadoop-Jobs ziehen Daten aus Cassandra ab, wenden auftragsspezifische Transformationen oder Analysen an und pushen Daten zurück in Cassandra. Wir verwenden für diese Integration nicht die Datastax Enterprise Edition, sondern nur die Open-Source-Hadoop-Installation mit Cassandra.

Okay, großartig. Als Sie über Ihren Anwendungsfall sprachen, der offensichtlich sehr gut zu den Stärken von Cassandra passt, wie sind Sie auf Cassandra aufmerksam geworden und haben sich für die Lösung entschieden?

Als wir 2010 die funktionalen und nicht-funktionalen Fähigkeiten unserer Echtzeitlösung verbesserten, erkannten wir den Bedarf an einem verteilten Cache, der hochverfügbar, leicht skalierbar, mit einer Master-losen Architektur, mit Datenreplikation in nahezu Echtzeit auch über Rechenzentren hinweg und mit Lese- und Schreibzugriffen in Echtzeit ausgestattet ist. Wir haben Cassandra gegen Oracle Berkeley DB, Oracle Coherence, Terracotta, Voldemort und Redis evaluiert. Zusätzlich zu den bereits erwähnten technischen Kriterien haben wir auch die Kosten, die Benutzerfreundlichkeit und die Unterstützung der Projektgemeinschaft als wichtige Bewertungskriterien herangezogen. Apache Cassandra hat die Liste ganz klar angeführt. Die Wahl hat sich für uns bisher sehr gut bewährt. Wir haben festgestellt, dass es sehr vielseitig ist - ein solider Key-Value-Paar-Speicher sowie ein Speicher mit umfangreichen Datenmodellierungsfunktionen.

Apache Cassandra entwickelt sich schnell weiter, und wir lernen und verstehen seine Fähigkeiten - insbesondere im Bereich der Datenmodellierung. Wir sehen es als eine verteilte NoSql-Datenbank der Wahl für unsere Big-Data-Dienste und -Lösungen.

Sie haben über Datenmodellierung gesprochen, was war Ihr Hintergrund? Hatten Sie einen relationalen Hintergrund und wie war es, das Datenmodell zu erlernen, und welche Ratschläge würden Sie anderen Leuten geben, die sich mit dieser Sache befassen wollen?

Ich komme sowohl aus dem relationalen als auch aus dem Key-Value-Pair NoSQL-Bereich. Wir wollten einen Key-Value-Speicher durch etwas ersetzen, das besser für die Echtzeit-Replikation und Datenverteilung geeignet ist. Wir haben viel über Dynamo, das CAP-Theorem und ein mögliches Konsistenzmodell gelesen. Cassandra passte sehr gut zu diesem Modell, und der Umstieg auf Cassandra war für uns relativ unkompliziert und technisch einfach. Als wir mehr über die Möglichkeiten der Datenmodellierung lernten, gingen wir allmählich dazu über, Daten zu zerlegen. Wir begannen, zusammengesetzte Spalten und breite Zeilenfunktionen intensiv zu nutzen.

Mein Ratschlag wäre: Wenn Sie von einem relationalen Datenbankhintergrund mit starker ACID-Semantik kommen, dann nehmen Sie sich die Zeit, das eventuelle Konsistenzmodell zu verstehen. Verstehen Sie die Architektur von Cassandra sehr gut und was es unter der Haube tut. Mit Cassandra 2.0 erhalten Sie leichtgewichtige Transaktionen und Trigger, die jedoch nicht mit den traditionellen Datenbanktransaktionen vergleichbar sind, mit denen Sie vielleicht vertraut sind. Zum Beispiel gibt es keine Fremdschlüssel-Beschränkungen... das muss von Ihrer Anwendung gehandhabt werden. Verstehen Sie Ihren Anwendungsfall und Ihre Datenzugriffsmuster genau, bevor Sie Daten mit Cassandra modellieren. Lesen Sie die gesamte verfügbare Dokumentation.

Sie haben Lightweight-Transaktionen und Auslöser erwähnt. Sind Sie schon bei 2.0, haben Sie das im Blick?

Ja, wir beginnen, mit diesen Funktionen zu experimentieren. Im Moment arbeiten wir noch mit 1.2. Wir verwenden sehr häufig breite Zeilen, und in 2.0 gibt es schöne Optimierungen für das Zwischenspeichern breiter Zeilen. Viele unserer Anwendungen verwenden häufig Transaktionen, und die von 2.0 gebotenen Möglichkeiten werden sehr nützlich sein.

Okay, ausgezeichnet. Können Sie ein wenig über die Umgebung sprechen, in der Cassandra läuft: Hardware, Anzahl der Knoten, solche Dinge?

Sicher. Die meisten unserer derzeitigen Produktionsumgebungen werden vor Ort in den Rechenzentren unserer Kunden gehostet. Die Implementierungen der Kunden sind natürlich je nach ihren Anforderungen sehr unterschiedlich. Im Moment laufen alle unsere Bereitstellungen auf Linux x86/64-Servern mit 8 bis 24 Kernen. Einige Bereitstellungen verwenden SSD für schnellen Zugriff, andere wiederum Spinning Discs. Einige unserer Bereitstellungen erstrecken sich über drei Rechenzentren mit ebenso vielen Clustern, andere über zwei Rechenzentren mit einem einzigen Cluster, und die häufigste Variante ist natürlich ein einziges Rechenzentrum mit einem einzigen Cluster. Die Anzahl der Knoten variiert zwischen drei und zehn pro Rechenzentrum, und die Datengröße pro Rechenzentrum beträgt in der Regel etwa 100 GigaByte.

Wir beginnen mit der Bereitstellung auf Windows Azure für unsere SaaS-Angebote. Bei diesen Bereitstellungen geht es um sehr große verteilte Datensätze. Wir arbeiten an der Überwindung einiger Plattformbeschränkungen zur Unterstützung von Bereitstellungen in mehreren Rechenzentren.

Okay, brillant. Möchten Sie noch etwas hinzufügen? Das war fantastisch, vielen Dank.

Sicher. Ich denke, wenn wir uns verschiedene Cloud-Angebote und -Plattformen wie GoogleCompute Engine und Windows Azure ansehen, würden wir gerne eine bessere Unterstützung für die wichtigsten Cloud-Plattformen entwickeln.

Wir setzen mehrere Rechenzentren ein, die in der Regel nicht zueinander offen sind. Wir haben festgestellt, dass die Notwendigkeit von Cassandra, die Knoten in allen Rechenzentren vollständig zu öffnen, eine ziemliche Einschränkung darstellt. Das schränkt uns auf die Bereitstellung mehrerer Ringe ein, die synchron gehalten werden müssen. Der Synchronisationsmechanismus ist etwas, das wir im Moment entwickeln und verwalten müssen, aber ich hoffe, dass sich auch in diesem Bereich etwas entwickeln wird. Ein einziges Master-Rechenzentrum und mehrere schreibgeschützte Slave-Rechenzentren sind durchaus üblich. Redis leistet in diesen Szenarien gute Arbeit bei der Einweg-Replikation. Vielleicht ist die Lösung in diesem Fall ein hybrider Einsatz von Cassandra und Redis.

Schließlich möchte ich noch die Apache Cassandra-Community selbst hervorheben: Planet Cassandra ist hervorragend. Es ist eine großartige Online-Informationsquelle, die Inhalte von Stackoverflow, Twitter und Slideshare zusammenfasst. Die DataStax-Dokumente sind fantastisch, ich empfehle jedem, sich die Dokumentation genau anzusehen und durchzulesen. Ich muss auch auf den IRC-Kanal Cassandra auf freenode hinweisen. Er war sehr nützlich für uns, als wir eine neue Snitch-Implementierung geschrieben haben, um Ring über NAT-NAT-Netzwerke zu unterstützen. Also, vielen Dank.