SQLite tabanlı, dağıtılmış, hataya dayanıklı bir DBMS olan rqlite 6.0'ın piyasaya sürülmesi

SQLite'ı depolama motoru olarak kullanan ve senkronize depolardan oluşan bir kümenin çalışmasını düzenlemenize olanak tanıyan dağıtılmış DBMS rqlite 6.0'ın sürümü sunuldu. Rqlite'ın özelliklerinden biri, dağıtılmış, hataya dayanıklı bir depolamanın kurulum, dağıtım ve bakımının kolaylığıdır; bu, bir şekilde etcd ve Consul'a benzer, ancak anahtar/değer formatı yerine ilişkisel bir veri modeli kullanır. Proje kodu Go'da yazılmıştır ve MIT lisansı altında dağıtılmaktadır.

Tüm düğümleri senkronize durumda tutmak için Raft konsensüs algoritması kullanılır. Rqlite, orijinal SQLite kitaplığını ve standart go-sqlite3 sürücüsünü kullanır; bunun üzerine istemci isteklerini işleyen, diğer düğümlere çoğaltma gerçekleştiren ve lider düğüm seçimi konusunda fikir birliğine varılıp varılmadığını izleyen bir katman başlatılır.

Veritabanında değişiklikler yalnızca lider olarak seçilen düğüm tarafından yapılabilir, ancak yazma işlemlerine sahip bağlantılar aynı zamanda kümedeki diğer düğümlere de gönderilebilir ve bu da isteği tekrarlamak için liderin adresini döndürür (bir sonraki sürümde Taleplerin lidere otomatik olarak iletilmesini ekleme sözü verin). Ana vurgu hata toleransıdır, bu nedenle DBMS yalnızca okuma işlemleriyle ölçeklenir ve yazma işlemleri darboğazdır. Bir rqlite kümesini tek bir düğümden çalıştırmak mümkündür ve bu çözüm, hata toleransı sağlamadan SQLite'a HTTP üzerinden erişim sağlamak için kullanılabilir.

Her düğümdeki SQLite verileri bir dosyada değil, bellekte depolanır. Raft protokolünün uygulanmasıyla katman düzeyinde, veritabanında değişikliklere yol açan tüm SQLite komutlarının kaydı tutulur. Bu günlük, çoğaltma (diğer düğümlerdeki isteklerin çoğaltılması düzeyinde çoğaltma), yeni bir düğüm başlatma veya bağlantı kaybının giderilmesi sırasında kullanılır. Günlüğün boyutunu azaltmak için, belirli sayıda değişiklikten sonra başlayan ve yeni bir günlüğün tutulmaya başlandığı (veritabanının bellekteki durumu) ile ilgili olarak diskte bir anlık görüntünün sabitlenmesine yol açan otomatik paketleme kullanılır. anlık görüntü + birikmiş değişiklik günlüğü ile aynıdır).

Rqlite'ın özellikleri:

  • Ayrı bir SQLite kurulumuna ihtiyaç duymadan bir kümeyi dağıtmak kolaydır.
  • Çoğaltılan SQL depolama alanını hızlı bir şekilde elde etme yeteneği.
  • Çalışma projelerinde kullanıma hazır (Üretim sınıfı).
  • Verileri toplu modda güncellemenize ve kümenin önde gelen düğümünü belirlemenize olanak tanıyan bir HTTP(S) API'sinin varlığı. Ayrıca bir komut satırı arayüzü ve SQLite için oluşturulmuş çeşitli istemci kitaplıklarını kullanma yeteneği sağlar.
  • Diğer düğümleri tanımlamaya yönelik bir hizmetin varlığı, dinamik olarak kümeler oluşturmanıza olanak tanır.
  • Düğümler arasındaki veri alışverişini şifreleme desteği.
  • Okurken verilerin alaka düzeyini ve tutarlılığını kontrol etme düzeyini yapılandırma yeteneği.
  • Mutabakatın belirlenmesine katılmayan ve okuma işlemleri için kümenin ölçeklenebilirliğini artırmak için kullanılan, düğümleri salt okunur modda bağlamaya yönelik isteğe bağlı yetenek.
  • Komutları tek bir istekte birleştirmeye dayalı kendi işlem formlarınız için destek (BEGIN, COMMIT, ROLLBACK, SAVEPOINT ve RELEASE tabanlı işlemler desteklenmez).
  • Sıcak yedeklemeler oluşturma desteği.

Yeni sürüm, okuma ve yazma isteklerini doğru küme düğümlerine yönlendirme sürecini iyileştirerek küme güvenilirliğini artırmayı amaçlayan önemli mimari değişiklikler getiriyor. rqlite düğümleri artık Raft protokolü tarafından düğümler arasında kurulan TCP bağlantılarını kullanarak kendi aralarında birden çok mantıksal bağlantıyı çoğaltabilir. Bir istek lider yetkisi gerektiriyorsa ancak ikincil bir düğüme gönderilirse ikincil düğüm, liderin adresini belirleyebilir ve bunu Raft konsensüs hesaplamaları yapmadan müşteriye iletebilir.

Değişiklik aynı zamanda ayrı bir meta veri senkronizasyon bileşenine olan ihtiyacı da ortadan kaldırdı ve Raft durumu ile meta verilerin ayrı ayrı işlenmesini ortadan kaldırdı. İkincil düğümler artık yalnızca gerektiğinde, yani lider düğümün adresini bulmaları gerektiğinde lider düğüme istek gönderiyor. API, kümedeki diğer düğümlerin durumu hakkında bilgi edinme olanağı sağlar. Komut satırı arayüzüne ".sysdump" komutu eklendi.

Kaynak: opennet.ru

Yorum ekle