Apache Cassandra – Gdy Kasia gubi CQL-e

cassandra

Mieliście kiedyś taką sytuację przy Apache Cassandra, że aplikacja robi UPDATE na bazie danych ale nigdzie nie ma śladu po tym UPDATE? Jak już jej trochę poużywałeś, to prawdopodobnie znasz temat. Jak dopiero z nią zaczynasz…

W projekcie używamy Cassandry która, póki co, na każdym ze środowisk składa się z jednego node-a. Każdy z serwisów ma swój keyspace. Wszystko pięknie działało. Nie było problemów.

Do czasu. Była potrzeba przepisania jednego z serwisów i tymczasowo dwa serwisy (a czasami jeden serwis i jedna maszyna deweloperska) biły pod jeden keyspace. I pojawił się problem.

Na jednym środowisku działa, na drugim nie, na środowisku deweloperskim serwisy działają, ale testy wykonywane na innej maszynie już nie. I to na jednym node-ie. WTF.

Po 2 tygodniach… Ostatecznie okazało się że winowajcą był czas. a właściwie jego rozsynchronizowanie. Szczegóły czemu można znaleźć tutaj lub w dokumentacji Scylla (taka Cassandra w C++). Starsze zapytanie miało nowszy timestamp. W Cassandrze UPDATE działa prawie jak INSERT, więc o ile był klucz, było ok.

WniosEK

  • Synchronizacja czasu (NTP) serwera i serwisów – obowiązkowo

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *