Wydanie rqlite 7.0, rozproszonego, odpornego na błędy systemu DBMS opartego na SQLite

Nastąpiło wydanie rozproszonego systemu DBMS rqlite 7.0, który wykorzystuje SQLite jako silnik przechowywania danych i pozwala na organizowanie pracy klastra z magazynów zsynchronizowanych ze sobą. Jedną z cech rqlite jest łatwość instalacji, wdrażania i konserwacji rozproszonej, odpornej na awarie pamięci masowej, nieco podobnej do etcd i Consul, ale wykorzystującej relacyjny model danych zamiast formatu klucz/wartość. Kod projektu napisany jest w Go i rozpowszechniany na licencji MIT.

Aby utrzymać wszystkie węzły w stanie zsynchronizowanym, używany jest algorytm konsensusu Raft. Rqlite wykorzystuje oryginalną bibliotekę SQLite oraz sterownik go-sqlite3, na którym uruchamiana jest warstwa przetwarzająca żądania klientów, wykonująca replikację do innych węzłów oraz monitorująca osiągnięcie konsensusu w sprawie wyboru węzła wiodącego.

Zmian w bazie danych może dokonać jedynie węzeł wybrany jako lider, ale połączenia z operacjami zapisu mogą być także wysyłane do innych węzłów w klastrze, co zwróci adres lidera w celu powtórzenia żądania (w kolejnej wersji będą one obietnica dodania automatycznego przekazywania żądań do lidera). Główny nacisk położony jest na odporność na błędy, więc DBMS skaluje się tylko przy operacjach odczytu, a wąskim gardłem są operacje zapisu. Możliwe jest uruchomienie klastra rqlite z pojedynczego węzła i tego rozwiązania można użyć do zapewnienia dostępu do SQLite przez HTTP bez zapewniania odporności na awarie.

Dane SQLite w każdym węźle nie są przechowywane w pliku, ale w pamięci. Na poziomie warstwy z implementacją protokołu Raft prowadzony jest log wszystkich poleceń SQLite, które prowadzą do zmian w bazie danych. Dziennik ten wykorzystywany jest podczas replikacji (replikacji na poziomie odtwarzania żądań na innych węzłach), podczas uruchamiania nowego węzła lub w celu przywrócenia sprawności po utracie łączności. W celu zmniejszenia rozmiaru logu stosuje się automatyczne pakowanie, które rozpoczyna się po określonej liczbie zmian i prowadzi do utrwalenia migawki, w związku z którą rozpoczyna się utrzymywanie nowego logu (stan bazy danych w pamięci jest identyczny z migawką + skumulowanym dziennikiem zmian).

Funkcje rqlite:

  • Łatwe wdrażanie klastra, bez konieczności osobnej instalacji SQLite.
  • Możliwość szybkiego uzyskania replikowanej pamięci SQL.
  • Gotowy do użycia w projektach produkcyjnych (klasa produkcyjna).
  • Obecność interfejsu API HTTP(S), który umożliwia aktualizację danych w trybie wsadowym i określenie węzła wiodącego klastra. Dostępny jest również interfejs wiersza poleceń i biblioteki klienckie dla różnych języków programowania.
  • Dostępność usługi identyfikacji innych węzłów, umożliwiającej dynamiczne tworzenie klastrów.
  • Wsparcie dla szyfrowania wymiany danych pomiędzy węzłami.
  • Możliwość skonfigurowania poziomu sprawdzania trafności i spójności danych podczas odczytu.
  • Opcjonalna możliwość łączenia węzłów w trybie tylko do odczytu, które nie biorą udziału w ustalaniu konsensusu i służą do zwiększenia skalowalności klastra dla operacji odczytu.
  • Obsługa własnej formy transakcji w oparciu o łączenie poleceń w jednym żądaniu (nie są obsługiwane transakcje oparte na BEGIN, COMMIT, ROLLBACK, SAVEPOINT i RELEASE).
  • Wsparcie dla tworzenia gorących kopii zapasowych.

W nowym wydaniu:

  • Dodano obsługę automatycznego klastrowania rqlite przy użyciu nowej usługi wykrywania węzłów, która może działać w oparciu o rozproszoną pamięć masową Consul i etcd. Usługa umożliwia automatyczne odnajdywanie się węzłów rqlite - administrator musi jedynie uruchomić kilka węzłów na różnych serwerach, podając wspólny adres klastra Consul lub etcd (na przykład „example.com:8500”), a węzły zostaną automatycznie połączone w klaster. Węzeł wiodący okresowo aktualizuje informację o swoim adresie w magazynie Consul lub etcd, co umożliwia późniejszą zmianę lidera bez konieczności rekonfiguracji pozostałych węzłów, a także dodawanie nowych węzłów nawet po zmianie lidera. Starsza usługa trybu Discovery działająca na platformie AWS Lambda została wycofana.
  • Interfejs CLI umożliwia określenie kilku hostów jednocześnie - jeśli pierwszy węzeł będzie niedostępny, skontaktujemy się z kolejnymi hostami.
  • Przerobiono kod do analizowania argumentów wiersza poleceń rqlited.
  • Przestarzały pakiet protobuf został wycofany.
  • Pamięć BoltDB używana w implementacji protokołu Raft została zastąpiona przez bbolt, fork z projektu etcd.

Źródło: opennet.ru

Dodaj komentarz