Cassandra, oh Cassandra

  • September 16, 2017

Es war einmal Cassandra.

Cassandra lebte in einem Wald von handgepflegten Gewächsen, umgeben von allerlei Wust und Stützen.

Ich las vor einiger Zeit einmal einen Comicstrip, in dem ein Programmierer vor seinem Chaos sitzt und sich dachte “Oh god.. I did it again”.
Dies beschreibt ein Phänomen, welches ich gerne “Kartenhausprogrammierung” nenne. Man arbeitet wild drauf los und es geht immer der Nase nach, bis man entweder fertig ist (und darauf bangt, dass alles für immer und ewig funktioniert) oder von vorne anfängt.

Vor nicht all zu langer Zeit, habe ich anderen die Programmierung als etwas kreatives beschrieben. Insbesondere solchen, die, nach eigener Auffassung besonders kreativ sind und von programmieren nichts verstehen.

Im letzten Jahr allerdings, habe ich viele Dinge dazugelernt und bin um die ein oder andere Erkenntnis reicher.

Insbesondere die Softwareentwicklung im Team und auf professioneller Basis, ist sehr weit entfernt vom träumerischen formen digitaler Lehmklumpen.
Es ist viel mehr ein berechnendes konstruieren eines Werkes. Ein Ausmessen und anpassen, sodass beim letzlichen Guss alles passt und jeder Tropfen den richtigen Pfad entlangfließt. Mit etwas Agilität ist man dann auch wieder beim Lehm, aber weit weniger matschig.

Bevor ich dies lernen durfte und bevor ich viele Stunde auf der Konsole geritten bin, kam ich in die Verlegenheit ein Backend für eine nicht näher bezeichnete Anwendung aufzusetzen. Die Vorgabe war: Nutze Apache Usergrid!

Zu Beginn der Entwicklungsphase, trug Usergrid noch die Versionsnummer 0.1.2. Im Verlauf der Entwicklung schritt die Versionierung fort bis zu 1.2. Zu Veröffentlichung war Version 2.1 erreicht, zu welcher wir sogar kompatibel waren. Somit stiegen wir gleich um.

Docker war uns noch fremd und so habe ich Usergrid, Elastic Search und auch Cassandra manuell aufgesetzt, ohne allzu genau zu wissen, was ich da eigentlich tat. Mit viel Fleiß und dem Lesen einiger Handbücher gelang es schließlich, die drei Komponenten in Einklang zu bringen.

Wachstum

Nun wuchs die App beständig, mehr Nutzer kamen hinzu, die Last des Servers wuchs und wuchs. Zwischendurch sammelten wir etwas Erfahrung mit Docker und entschieden uns so, dem absehbaren Bedarf zur Skalierung, durch den Umbau des Backends in eine Docker Umgebung, entgegen zu kommen.

Schnell fand ich gut vorbereitete Images zum schnellen aufziehen eines ein-knoten Usergrids.

Ein frisches Backend war hiermit innerhalb weniger Minuten einsatzbereit und unsere Augen, sowie unsere Freude, groß.

Und dann kam Cassandra…

  • Nicht kompatibel
  • Update Prozess
  • Erkenntnis: Ich Depp
  • Nehmen wir halt 1.2
  • Im- und Export von- und zu Cassandra

Mit etwas mehr Worten drückt sich diese Liste wie folgt aus:

Zu Beginn der Entwicklung wurde Cassandra 1.2 eingesetzt, da dies, wie so vieles, eine Abhängigkeit war. Nun ist Cassandra 1.2 zwar auch mit dem neueren Usergrid 2.1 kompatibel, aber nicht so richtig gut. Usergrid hätte da lieber auch die Version 2.1. Passende Container gab es ja und mit der 2.1/2.1 Kombi war auch alles dufte.

Nun mussten natürlich die Daten überführt werden. Und da begann das Drama, denn obwohl Cassandra 1.2 und 2.1 beide mit Usergrid 2.1 funktionieren, können sie untereinander nicht mehr so gut. Wer kommt denn auch darauf, dass es hier zu Problemen kommen könnte. Etwa jemand der Manuals liest? Vielleicht. Bestimmt. Ich könnte mich beißen.

Hat man eine Datenbasis in C1.2 und möchte diese in C2.1 einsetzen, so steht einem ein beschwerlicher Weg bevor. Von Version zu Version gibt es Upgrade Werkzeuge, welche die Daten so konvertieren, dass die Folgeversion damit arbeitet. Kein Werkzeug gibt es aber, wenn man größere Sprünge machen will. Somit mussten parallel C1.2 C2.0 (noch eine Dazwischen) und letztlich C2.1 aufgesetzt werden um die Daten anschließend durch alle Instanzen hindurch zu migrieren.

Das an sich hat funktioniert, wenn auch beschwerlich. Das Resultat wollte dann aber nicht mehr mit Usergrid. DennUsergrid behauptet die Daten seien so inkompatibel. Es lässt sich also vermuten, dass unterwegs doch etwas schief gelaufen ist (auch wenn die Daten ordentlich vorliegen) oder Usergrid selbst sich anders verhält, je nachdem welche Cassandra Version angeschlossen ist.

Letzten Endes habe ich dann einen eigenen Container geschrieben, der einfach eine Cassandra 1.2 Instanz beherbergt und diesen mit in den Cluster gebracht.

Man hätte es auch gleich so machen können.

Was haben wir gelernt?

  1. Lies
  2. Machs nicht so kompliziert
  3. Lies
  4. Machs nicht so kompliziert
  5. Ihr wisst schon.

Weitere Beiträge

20 Stunden Einweisung

Sommer 2017, Bad Dürkheim. Zum ersten mal sehe ich eine…
Weiter lesen

Der erste Alleinflug

Samstag, der 6. Juni 2917. Die Ausbildung zum UL-Schein beginnt mit…
Weiter lesen

Platzrunden

Jeder Flugschüler kennt es. Platzrunde um Platzrunde nähert man sich…
Weiter lesen

Als ich aus Versehen nach Österreich fuhr

Sommer 2009 - Ein Revival, wenn man so möchte. Der Beitrag Erinnerung, Fliegen…
Weiter lesen