Wydanie rqlite 6.0, rozproszonej, odpornie działającej bazy danych na bazie SQLite

Została wydana wersja rozproszonej bazy danych rqlite 6.0, która wykorzystuje SQLite jako silnik przechowywania i umożliwia organizację pracy klastra z synchronizowanymi magazynami. Wśród cech rqlite wyróżnia się łatwość instalacji, wdrożenia i utrzymania rozproszonego systemu składowania o wysokiej dostępności, porównywalnego z etcd i Consul, ale wykorzystującego relacyjną model pracy z danymi zamiast formatu klucz/wartość. Kod projektu został napisany w języku Go i jest udostępniany na licencji MIT.

Do utrzymania wszystkich węzłów w synchronizowanym stanie stosowany jest algorytm osiągania konsensusu Raft. Rqlite używa oryginalnej biblioteki SQLite oraz standardowego sterownika go-sqlite3, na których działa warstwa przetwarzająca zapytania klientów, realizująca replikację na inne węzły i monitorująca osiągnięcie konsensusu dotyczącego wyboru lidera.

Zmiany w bazie danych mogą być wprowadzane tylko przez węzeł wybrany jako lider, ale połączenia z operacjami zapisu mogą być kierowane również do innych węzłów klastra, które zwrócą adres lidera w celu powtórzenia zapytania (w następnej wersji obiecują dodać automatyczne przekazywanie zapytań do lidera). Główny nacisk kładzie się na wysoką dostępność, dlatego system baz danych skaluje się tylko przy operacjach odczytu, a operacje zapisu są wąskim gardłem. Można uruchomić klaster rqlite z jednego węzła, a to rozwiązanie może być używane do organizacji dostępu do SQLite przez HTTP bez zapewnienia dostępności.

Dane SQLite na każdym węźle są przechowywane nie w pliku, a w pamięci. Na poziomie warstwy implementującej protokół Raft prowadzi się log wszystkich komend SQLite, prowadzących do zmian w bazie danych. Log ten jest wykorzystywany podczas replikacji (replikacja na poziomie odtwarzania zapytań na innych węzłach), uruchamiania nowego węzła lub przywracania po utracie łączności. Aby zmniejszyć rozmiar logu, stosuje się automatyczne pakowanie, które uruchamia się po określonej liczbie zmian i prowadzi do zapisania na dysku zrzutu stanu, w odniesieniu do którego zaczyna się prowadzić nowy log (stan bazy danych w pamięci jest identyczny ze zrzutem + nagromadzonym logiem zmian).

Cechy rqlite:

  • Łatwość wdrażania klastra bez potrzeby osobnej instalacji SQLite.
  • Możliwość szybkiego uzyskania replikowanej bazy danych SQL.
  • Gotowość do użycia w projektach roboczych (klasa produkcyjna).
  • Dostęp do API HTTP(S), które pozwala na aktualizację danych w trybie wsadowym oraz określenie wiodącego węzła klastra. Oferowany jest również interfejs wiersza poleceń i możliwość korzystania z różnych bibliotek klienckich stworzonych dla SQLite.
  • Dostępność usługi do wykrywania innych węzłów, umożliwiającej dynamiczne tworzenie klastrów.
  • Wspieranie szyfrowania wymiany danych między węzłami.
  • Możliwość konfigurowania poziomu sprawdzania aktualności i spójności danych podczas odczytu.
  • Opcjonalna możliwość podłączania węzłów w trybie tylko do odczytu, które nie biorą udziału w ustalaniu konsensusu i są używane do zwiększenia skalowalności klastra w operacjach odczytu.
  • Wsparcie dla własnej formy transakcji na podstawie łączenia poleceń w jednym zapytaniu (transakcje oparte na BEGIN, COMMIT, ROLLBACK, SAVEPOINT i RELEASE nie są wspierane).
  • Wsparcie dla tworzenia gorących kopii zapasowych.

W nowej wersji wprowadzono znaczące zmiany architektoniczne, mające na celu zwiększenie niezawodności klastra poprzez poprawę procesu kierowania zapytań do odpowiednich węzłów klastra w przypadku odczytu i zapisu. Węzły rqlite teraz mogą multiplexować między sobą kilka logicznych połączeń, korzystając z połączeń TCP ustanowionych między węzłami protokołem Raft. Jeśli zapytanie wymaga uprawnień wiodącego węzła, ale jest wysyłane do węzła podrzędnego, węzeł podrzędny może określić adres lidera i przekazać go klientowi, bez przeprowadzania konsensusu w protokole Raft.

Zmiana ta pozwoliła również na eliminację osobnego komponentu do synchronizacji metadanych oraz wykluczenie osobnego przetwarzania stanu Raft i metadanych. Węzły podrzędne teraz kierują zapytania do węzła wiodącego tylko w razie potrzeby, gdy trzeba uzyskać adres wiodącego węzła. W API dodano możliwość uzyskiwania informacji o stanie innych węzłów w klastrze. Do interfejsu wiersza poleceń dodano polecenie „.sysdump”.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster