1 puan yazan GN⁺ 2025-04-02 | 1 yorum | WhatsApp'ta paylaş

Edge replikasyonu için yeni bir yaklaşım

  • Veri senkronizasyonu düşünüldüğünden daha zor bir problem. Mevcut çözümler ya tüm veri kümesini istemciye senkronize ediyor ya da mantıksal değişiklikleri izleme yaklaşımını benimsiyor.
  • Graft, bu sorunları çözmek için tasarlandı ve basit fiziksel replikasyonu verimli mantıksal replikasyonla birleştiren açık kaynaklı bir depolama motoru.

Tembel senkronizasyon: Kendi hızınızda senkronize olun

  • Graft, istemcinin ne zaman senkronize olacağını seçmesine izin vererek ağa aralıklı olarak bağlanan edge ortamları için uygun hale geliyor.
  • Sunucu, istemcinin son snapshot'ından sonra değişen sayfaların dizinini sunuyor; istemci de yalnızca ihtiyaç duyduğu verileri seçerek alabiliyor.

Kısmi senkronizasyon: Yalnızca gerekeni senkronize edin

  • Edge ortamlarında tüm veri kümesini indirmek mümkün olmadığından, Graft yalnızca gerekli sayfaları seçerek alan kısmi senkronizasyonu destekliyor.
  • Graft, yaygın tahmin algoritmalarını ve alan bilgisini kullanarak ihtiyaç duyulan sayfaları önceden getirebiliyor.

Edge: İhtiyaç duyulan yere yakın senkronizasyon

  • Graft, verileri dünya genelindeki edge sunucuları üzerinden sunarak kullanıcı nerede olursa olsun düşük gecikme ve yüksek yanıt verebilirlik sağlıyor.
  • İstemci hafif olacak şekilde tasarlandığı için tarayıcıya, mobil uygulamalara ve sunucusuz ortamlara kolayca entegre edilebiliyor.

Tutarlılık: Güvenli senkronizasyon

  • Graft, güçlü bir tutarlılık modeli sunarak istemciler arasındaki çakışmaları güvenli biçimde ele alıyor.
  • İstemciler, snapshot isolation modeli sayesinde verinin tutarlı bir görünümünü elde edebiliyor ve yazmalar sıkı biçimde serileştiriliyor.

Graft ile neler yapılabilir?

  • Graft, çeşitli edge-native uygulamalar için güçlü bir temel sunuyor.
  • Offline-first uygulamalar, platformlar arası veri, durumsuz okuma replikaları ve rastgele veri replikasyonu mümkün.

Graft SQLite uzantısı (libgraft)

  • libgraft, SQLite için yerel bir uzantı; istemcinin gerçekten kullandığı veritabanı kısmını çoğaltarak kaynakların kısıtlı olduğu ortamlarda da SQLite çalıştırmayı mümkün kılıyor.
  • Asenkron replikasyon, tembel kısmi replikasyon, snapshot isolation ve point-in-time restore gibi özellikler sunuyor.

Nasıl katkı sağlanır?

  • Graft, GitHub üzerinde geliştiriliyor ve topluluk katkılarını memnuniyetle karşılıyor.
  • Discord'a katılabilir veya e-posta ile geri bildirim gönderebilirsiniz.
  • Graft yönetilen hizmeti için bekleme listesine kaydolabilirsiniz.

Yol haritası

  • Graft hâlâ geliştirme aşamasında; WebAssembly desteği, SQLSync ile entegrasyon ve çeşitli istemci kütüphaneleri için destek gibi planlar bulunuyor.
  • Yazma gecikmesini azaltma, garbage collection, kimlik doğrulama ve yetkilendirme, volume forking ve çakışma işleme gibi özelliklerin de eklenmesi planlanıyor.

Diğer SQLite replikasyon çözümleriyle karşılaştırma

  • Graft; mvSQLite, Litestream, cr-sqlite, Cloudflare Durable Objects, Cloudflare D1, Turso & libSQL, rqlite & dqlite ve Verneuil ile karşılaştırıldığında kendine özgü avantajlar sunuyor.
  • Kısmi replikasyon, rastgele veri yapısı desteği ve edge üzerinde verimli replikasyon başlıca fark yaratan yönleri.

1 yorum

 
GN⁺ 2025-04-02
Hacker News yorumu
  • Tutarlılık modeli anlaşılmıyor

    • Graft istemcisi yerelde commit yapıyor ve uzakta asenkron olarak commit etmeyi deniyor
    • İki istemci aynı snapshot temelinde aynı anda commit yaparsa biri başarılı oluyor, diğeri başarısız oluyor
    • API yalnızca tek bir commit işlemi sunuyor
    • Yerel commit başarılı olduğunda asenkron yayılım başarısız olursa rollback yapılması gereken bir sorun ortaya çıkıyor
    • "Commit" kavramı birden fazla anlamda birbirine karışmış durumda
  • Graft'ın yazarı teşekkürlerini iletiyor

    • Şu anda Washington DC'de Antithesis BugBash'e katılıyor
    • Washington'daki insanlarla tanışmak istiyor
  • Tutarlılık modelinin git'e benzer olduğu düşünülüyor

    • Yerel kopya değiştirilip "push" edildiğinde çakışma çıkabiliyor
    • Çakışmaları temiz biçimde tespit etmenin bir yolu yok
    • Okuma çakışmaları nedeniyle çatışma oluşabiliyor
  • İstemci Graft'ı çektiğinde hangi içeriklerin değiştiğini tam olarak bilebiliyor

    • Cloud-Backed SQLite'ın manifest'i ile karşılaştırılıyor
    • Sunucuda hesaplama gerekmiyor
  • Uygulama ayrıntılarından bahsedilmiyor

    • Uygulama geliştiricisinin senkronizasyonla uğraşmak zorunda kalmayacağı bir senkronizasyon katmanına ihtiyaç var
    • Abonelik olmadan kişisel senkronizasyon desteklenebilir
  • VFS kullanmanın eğlenceli bir "hack" olduğu düşünülüyor

    • Offline-first bir IDE için kendi senkronizasyon motorunu geliştiriyor
    • Ağaç yapısı kullanıldığında çakışma çözümü zorlayıcı oluyor
  • Leap algoritmasını kullanan proje oldukça ilgi çekici

    • SQLite entegrasyonuna odaklanmak kolay olsa da konuya daha genel ve daha düşük seviyeli bir dağıtık depolama problemi olarak yaklaşılıyor
    • Somut deneyim olmadan geliştirilen genel çözümler riskli olabilir
  • Mobil istemci yavaş bir bağlantıdayken sorunlar çıkabilir

    • Yavaş senkronizasyonu algılayıp doğrudan sunucuya sorgu gönderen hibrit bir yaklaşım öneriliyor
  • Sayfayı varsayılan senkronizasyon birimi olarak kullanan yaklaşım ilgi çekici

    • Çok sayıda eşzamanlı kullanıcıyla çakışmalar ortaya çıkabilir
    • OT veya CRDT daha iyi olabilir
  • Oldukça zorlayıcı bir problem

    • Bunu bir React Native uygulamasında denemek istiyor