12 puan yazan GN⁺ 2024-05-27 | 1 yorum | WhatsApp'ta paylaş
  • Braid, birlikte çalışabilir durum senkronizasyonu için algoritmalar, uygulamalar, araçlar ve standartlar geliştiren açık bir çalışma grubudur.
  • Amaç, ağ tabanlı bilişim sistemleri genelinde dağıtık durumu yerel değişkenler kadar kolay okunup yazılabilir hale getirmektir.
  • Her iki haftada bir yapılan açık toplantılarda uygulama ve sistem gereksinimleri tartışılır, ortak noktalar belirlenir ve paylaşılan protokoller üzerinde uzlaşma aranır.

Braid-HTTP: HTTP için senkronizasyon

  • Braid-HTTP, HTTP'yi durum aktarımından durum senkronizasyonu protokolüne genelleştiren bir uzantıdır.
  • HTTP'ye şu yetenekleri ekler:
    • HTTP kaynakları için sürümleme
    • GET istekleri için abonelik (Subscription)
    • Range istekleri için PATCH
    • OT veya CRDT davranışını tanımlayan Merge-Type
  • Bu özellikler sayesinde web kaynakları birden çok istemci, sunucu ve proxy arasında otomatik olarak senkronize edilebilir; ayrıca birden fazla yazar, keyfi ağ gecikmeleri ve bölünmeleri altında bile tutarlılığı koruyarak eşzamanlı düzenleme yapabilir.
  • Web uygulamaları, Braid uzantılarını kullanarak işbirlikçi düzenleme, sunucusuz çevrimdışı mod ve P2P ağ iletişimi sunabilir.
  • Standart kütüphaneler sayesinde mevcut web uygulamaları ve tarayıcılara bu yetenekler kolayca eklenebilir.
  • Daha fazla ayrıntı için IETF internet taslağına bakılabilir.

Braid protokolünü kullanmak

  • Braid, bugünün web'iyle uyumludur, mevcut tarayıcılarda çalışır ve var olan web uygulamalarına kolayca eklenebilir.
  • Çeşitli diller için kütüphaneler vardır:
    • Javascript: braid-http, braid-protocol
    • Haskell: wai-braid
    • Lua: Paul Kulchenko tarafından geliştiriliyor
  • Chrome'da Braid özellikleri, Braid-Chrome uzantısı kullanılarak etkinleştirilebilir.

Braid senkronizasyon modeli

  • Protokol uygulamaları:
    • braid-http
    • braid-protocol
    • wai-braid
  • Tarayıcı uzantısı:
    • Braid-Chrome
  • Durum soyutlama kütüphaneleri:
    • Braid-Text (metin için)
    • Redwood
    • Statebus
    • Statecraft
  • Algoritmalar:
    • Diamond Types: dünyadaki en hızlı metin CRDT'si
    • Antimatter: dünyadaki ilk history-pruning metin CRDT'si
    • Sync9: metin ve JSON için CRDT+OT
    • SyncX: Sync9
    • Shelf: son derece basit ve kullanışlı bir JSON CRDT'si
    • Diffsync: özyinelemeli üç yönlü birleştirme kullanan CRDT+OT
    • Tiny-Merge: pratik CRDT'ler için iyi tasarlanmış bir kütüphane
    • CR-SQLite: SQLite'ı çok kullanışlı bir CRDT'ye dönüştürür
    • Portals: tüm OT veya CRDT'ler için kopyalama, taşıma ve wrap işlemleri
    • Simpleton: tüm CRDT'ler için çok basit, hızlı ve hafif bir istemci
  • Uyumluluk:
    • Automerge uyumluluğu
    • ShareDB ve Sync9 uyumluluğu

Uygulamalar

  • Bu web sitesinin kendisi
  • Peery View: Braid tabanlı bir P2P itibar sistemi
  • Quiet: torDT kullanan P2P sohbet
  • Wiki

Birlikte çalışmak

  • Bu, açık bir gruptur.
  • Her iki haftada bir Zoom bağlantısı üzerinden genel toplantı yapılır.
  • Yeni ilerlemeler demo edilir, standartlar tartışılır ve dağıtık web inşasına yönelik yaklaşımlar ele alınır.
  • Özel konular için ara toplantılar da düzenli olarak takvime eklenir.

Standartlar nasıl oluşturuluyor

  • Çalışmalar IETF içinde açık şekilde yürütülür.
  • Spesifikasyonlar Braid ve HTTP e-posta listelerinde tartışılır.
  • Github üzerinden Braid spesifikasyonu düzenlenebilir.
  • Bir sorun varsa Github'da issue açılabilir.
  • Bir fikriniz varsa bunu spesifikasyona yazıp Pull Request gönderebilirsiniz.
  • Genel uzlaşıya varıldığında Pull Request kabul edilir.
  • Standart tartışmalarındaki gelişmeleri takip etmek için e-posta listesine abone olabilir ve Github'ı izleyebilirsiniz.
  • Yardıma ihtiyaç varsa Michael Toomim'e e-posta gönderilebilir.

Braid protokolü

  • Braid protokolü, birden çok senkronizasyon algoritmasının ortak bir ağ protokolü üzerinden birlikte çalışabilmesini sağlar.
  • Günümüzün senkronizasyon araçları farklı protokoller kullansa da, ağ mesajları zaman içindeki sürümleri, uzaydaki konumları ve zaman aralıkları boyunca uzaydaki yamaları taşır.
  • Yama kümelerinin birleşimi, braid adı verilen matematiksel bir yapı oluşturur.
  • Braid protokolü, tüm senkronizasyon araçlarının zamandaki değişimi ifade edip bunu tutarlı bir duruma çözümleyebilmesi için standart bir mesaj biçimidir.
  • Veri modelini keşfetmeye yönelik etkileşimli demolar:
    • Braid ile etkileşime geçmek
    • Rastgele braid oluşturmak
  • HTTP üzerinden senkronizasyonla ilgileniyorsanız, protokol spesifikasyonunu inceleyip e-posta listesinde geri bildirim verebilirsiniz.

Protokol yol haritası

  • Mevcut Braid spesifikasyonu, HTTP'yi iki senkronizasyon boyutunda genişletir:
    • Seviye 0: bugünün HTTP'si
    • Seviye 1: push update içeren abonelikler
    • Seviye 2: P2P tutarlılığı (patch, version, merge)
  • Ayrıca aşağıdaki P2P yeteneklerinin prototipleri hazırlanıyor, ancak bunlar henüz standartlaştırılmış değil:
    • Seviye 3: P2P anlambilimi (metotlar, doğrulama, onay)
    • Seviye 4: P2P taşıma (URL, adlandırma, şifreleme, yönlendirme)
  • Açıklamalar için meeting-2'deki Mike sunumuna bakılabilir.
  • Dört alanın tamamında işbirliği memnuniyetle karşılanır.

Braid, senkronizasyon araçlarını birlikte çalışabilir hale getirir

  • Rafie Walker, Braid protokolünü kullanarak bir OT sistemi ile CRDT'yi senkronize ediyor.
  • WebSocket üzerinde bir babel fish bulunuyor; bu sayede ShareDB'nin ağ mesajları Braid mesajlarına ve tersine dönüştürülebiliyor.
  • ShareDB ile Sync9 arasındaki babel fish:
    • Canlı olarak denenebilir.
    • ShareDB protokolüne dair içgörüler sağlayan Seph Gentle'a teşekkürler.
    • Bu babel fish büyük ölçüde tamamlanmış durumda, ancak iki senkronizasyon aracının çakışmaları farklı sıralama düzenlerinde çözmesi durumunu ele almıyor.
    • Bunun için aynı merge type'ın uygulanması gerekiyor (bkz. protokol spesifikasyonu).
  • Automerge gibi CRDT sistemleri için bir babel fish tasarımına da başlanmış durumda.
  • Elinizde bir senkronizasyon aracı varsa, Braid uyumluluk katmanı geliştirmek için birlikte çalışabilirsiniz.

Neden "Braid"?

  • Braid, Braid video oyunu gibi web'e tarihsel zaman yolculuğu ekler.
  • World Wide Web'in her telini örerek web'i daha kalın, daha güçlü ve daha dayanıklı hale getirir.
  • Web standartlarında senkronizasyon ve dağıtık teknolojilere ilişkin farklı bakış açılarını bir araya örer.
  • Braid, senkronizasyon araçlarının ihtiyaç duyduğu bilgileri içeren hem matematiksel hem de bilgisayarda kullanılan bir veri yapısıdır.
  • Düzenlemeleri braid'in yamaları olarak ifade ederek, birden çok senkronizasyon aracının birlikte çalışabilmesini sağlar.

GN⁺ görüşü

  • Braid protokolü, farklı senkronizasyon algoritmalarını birleştirebilen güçlü bir araç ve dağıtık sistemlerde tutarlılığı korumada büyük fayda sağlayabilir.
  • Hem CRDT hem de OT desteği sunması, işbirlikçi uygulama geliştirenler için oldukça faydalı olacaktır.
  • Braid-HTTP uzantılarının mevcut web uygulamalarına kolayca entegre edilebilmesi, geliştiricilerin yeni teknolojileri benimsemesinin önünde büyük bir engel olmayacağını gösteriyor.
  • Braid'in açık toplantıları, topluluk katılımını teşvik ediyor ve farklı görüşlerin toplanarak daha iyi standartlar oluşturulmasına fırsat veriyor.
  • Çoklu dil desteği, geliştiricilerin Braid'i tercih ettikleri dilde kullanabilmesini sağlayarak daha fazla geliştiricinin katılımına uygun bir ortam oluşturuyor.

1 yorum

 
GN⁺ 2024-05-27
Hacker News görüşü

Hacker News yorumları derleme özeti

  • Yeni braid-text kütüphanesi yakında çıkıyor

    • Web uygulamalarına işbirlikçi düzenleme özelliğini kolayca eklemeyi sağlayan bir kütüphane tanıtılıyor.
    • Node.js uygulamalarına basitçe eklenebiliyor ve WebSocket gerektirmiyor.
    • simpleton birleştirme türünü kullandığı için istemci tarafında geçmiş ek yükü yok.
    • Sürüm geçmişi, Braid-Chrome uzantısı üzerinden görülebiliyor.
  • URL'de sürüm numarası yer almıyor

    • Sürüm numarası URL'ye dahil edilmiyor, ayrı bir header ile gönderiliyor.
    • Belirli bir sürüme bağlantı vermek zor.
    • Senkronizasyonun HTTP ile bu kadar sıkı bağlı olması gerekip gerekmediği sorgulanıyor.
  • HTTP genişletmek yerine mevcut standartları kullanma tercihi

    • HTTP'yi genişletmek yerine mevcut standartları kullanmak daha iyi olabilir.
    • partial PUT yerine PATCH kullanmak daha uygun olabilir.
  • Dağıtık altyapı için avantajlı

    • Braid'in bulut olmadan da cihazlar arası durum senkronizasyon maliyetini düşürebileceği belirtiliyor.
    • Merkezi olmayan altyapılar için avantajlı.
  • Daha genel bir event streaming hedefi olasılığı

    • Tekil kaynak değişikliklerine abone olunabiliyor.
    • Bunun daha genel bir event streaming hedefini amaçlayıp amaçlamadığı soruluyor.
  • WebDAV ile karşılaştırma

    • WebDAV'a benziyor ama daha güçlü özellikler sunduğu söyleniyor.
    • HTTP üzerinde ayrı bir katman kurmanın daha iyi olabileceği öne sürülüyor.
  • Kullanım alanına dair soru

    • Bu kütüphanenin nerede kullanılabileceğine dair soru soruluyor.
    • Kullanım senaryosu net görünmüyor.
  • İlgili bağlantılar

    • Braid: Synchronization for HTTP ile ilgili bağlantılar paylaşılıyor.
  • Yalnızca gerçek zamanlı olup olmadığı

    • Yalnızca gerçek zamanlı kullanım için olup olmadığı ve geçmiş temizleme özelliği bulunup bulunmadığı soruluyor.
    • İstemcilerin nadiren bağlandığı durumlara dair endişeler var.
  • HTTP'nin doğası

    • HTTP'nin bir istek-yanıt protokolü olduğu ve durum aktarımını ele almadığı belirtiliyor.
    • Braid-HTTP'nin bir durum senkronizasyon protokolü olarak genişletildiği açıklaması tuhaf bulunuyor.