2 puan yazan GN⁺ 2024-10-15 | 1 yorum | WhatsApp'ta paylaş
  • Her Durable Object’te sıfır gecikmeli SQLite depolama

    • Kenton Varda, Cloudflare’ın Durable Object platformunun bir sonraki sürümünü tanıtıyor. Bu platform yakın zamanda anahtar/değer deposundan SQLite tabanlı tam ilişkisel bir sisteme yükseltildi
    • Durable Objects’in ilk sürümüyle ilgili faydalı arka plan bilgileri için Paul Butler’ın Cloudflare’ın durable multiplayer moat yazısına bakılabilir. Bu yapı, WebSocket tabanlı gerçek zamanlı işbirliği uygulamaları geliştirmede popüler
    • Yeni SQLite tabanlı Durable Objects, büyük ölçekli uygulamaları tasarlamak için dağıtık sistem tasarımında ilgi çekici bir yaklaşım öneriyor
  • Durable Objects’in temel fikri

    • Durable Object, çok hızlı okuma ve yazma performansı sağlamak için uygulama mantığını veriyle aynı fiziksel ana makineye yerleştirir
    • Tek bir nesne, tek bir makinedeki tek bir iş parçacığında çalıştığı için işlem hacmi sınırlıdır. Daha fazla trafiği karşılamak için daha fazla nesne oluşturulur. Her durum biriminin tek bir nesnenin işleyebileceği kadar düşük trafiğe sahip olduğu durumlarda bu yaklaşım en kolay şekilde uygulanır
  • Uçuş rezervasyon sistemi örneği

    • Her uçuş, kendi SQLite veritabanına sahip özel bir Durable Object’e eşlenebilir. Havayolu başına her gün binlerce yeni veritabanı oluşturulur
    • Her DO’nun benzersiz bir adı vardır ve Cloudflare ağı, nesne dünyanın neresinde olursa olsun istekleri ona yönlendirir
  • Teknik ayrıntılar

    • Litestream’den ilhamla, her DO WAL girdilerinin bir dizisini nesne depolamaya sürekli olarak stream eder. Bu işlem her 16MB’de bir veya her 10 saniyede bir toplu olarak yapılır
    • 10 saniyelik pencere içinde dayanıklılığı garanti etmek için yazmalar commit edilir edilmez yakındaki veri merkezlerindeki beş kopyaya iletilir ve üçü onayladığında yazma kabul edilir
  • JavaScript API tasarımı

    • Asenkron değil, bloklayıcı olacak şekilde tasarlanmıştır. Amaç hızlı tek iş parçacıklı kalıcılık işlemleri sunmaktır
    • SQLite’ın iyi yönettiği N+1 sorgu desenini özellikle gösteren örnekler içerir
  • Storage Relay Service

    • Durable Objects’in temelindeki sistemdir ve Cloudflare’ın mevcut D1 SQLite sistemini bir yıldan uzun süredir desteklemektedir
  • Durable Objects’in oluşturulduğu yer

    • Durable Objects oluşturulduktan sonra konum değiştirmez. Varsayılan olarak ilk get() isteğinin yapıldığı veri merkezinde örneklenir
    • Durable Objects’i başka bir konumda manuel olarak oluşturmak için get() çağrısına isteğe bağlı locationHint parametresi verilir
  • where.durableobjects.live sitesi

    • Cloudflare ağı içinde DO’ların nerede oluşturulduğunu takip eden bir sitedir

GN⁺ özeti

  • Cloudflare’ın Durable Objects yapısı, SQLite tabanlı olması sayesinde büyük ölçekli uygulama tasarımına yeni olanaklar sunuyor. Veri ile uygulama mantığını aynı fiziksel ana makinede konumlandırarak yüksek performans sağlıyor
  • Bu sistem özellikle gerçek zamanlı işbirliği uygulamaları için faydalı ve farklı durum birimlerini işleyebilecek esneklik sunuyor
  • Durable Objects, veri dayanıklılığını sağlamak için birden fazla veri merkezinde kopyalar oluşturuyor; bu da kararlılığı ve güvenilirliği artırıyor
  • Bu teknoloji, büyük ölçekli dağıtık sistem tasarımıyla ilgilenen geliştiriciler için ilgi çekici olabilir. Benzer yetenekler sunan sistemler arasında Amazon’un DynamoDB’si ve Google’ın Firestore’u bulunuyor

1 yorum

 
GN⁺ 2024-10-15
Hacker News yorumu
  • Yazma API’si eşzamanlı, ancak gizli bir asenkron bekleme mekanizması var. Yazma başarısız olursa çalışma zamanı yanıtı HTTP hatasıyla değiştiriyor; böylece yazmaları otomatik olarak toplu işleyip başarılı olduğunu varsayabiliyorsunuz

    • Okuma transaction’ları yok, bu yüzden belirli bir andaki snapshot’ı almak zor
    • Her çalışma zamanı örneği 128MB RAM ile sınırlı
    • WebSocket’ler hibernate olabiliyor ve bu sırada ücret işlemiyor. Bu da istemcinin, DO uyurken bile bağlantıyı koruyabilmesini sağlıyor
    • Otomatik RPC özelliği var; bu sayede diğer DO’lar veya worker’larla normal JS çağrıları yapar gibi iletişim kurulabiliyor. Serileştirme ve ayrıştırmayı çalışma zamanı üstleniyor
  • Her DO, WAL girişlerinin sırasını nesne depolamaya stream ediyor; bu işlem her 16MB’de bir veya 10 saniyede bir toplu olarak yapılıyor

    • Dünya genelinde bir yazının okunabilir hale gelmesi 10 saniye sürebilir
    • Bölgesel olarak konuşlandırılmış veritabanı cluster’larının yerini alması zor
  • Durable Object tasarımını beğeniyorum. İç işleyişini anlamak kolay

    • DO, hızlı ve düşük maliyetli gerçek zamanlı deneyimler kurmak için iyi, ancak analytics ve genel görünüm çıkarmak zor
    • Veriyi SQLite’a koyarsanız, çok sayıda küçük SQLite örneğini sorgulayıp sonuçları birleştirmeniz gerekir
  • Durable Objects’in fiziksel olarak nerede bulunduğunu anlamak zor

    • API çağrısının geldiği bölgede mi konumlanıyor diye merak ediyorum
    • DO’nun otomatik olarak başka bir konuma taşınıp taşınamayacağını merak ediyorum
  • Yeni bulut teknolojilerini anlamak zor

    • 15 yılı aşkın web geliştirme deneyimim var, ama bu teknolojilerin bana göre olmadığını hissediyorum
  • Schema migration’ların nasıl ele alınacağını merak ediyorum

    • Veritabanı tenant başına varsa, schema değişikliklerini her DO’ya uygulamak zor olur
  • DO tasarımı ilginç, ama sadece yüksek yük altındaki sistemler ya da oyuncak projeler için uygun olduğunu düşünüyorum

    • Gerçek işlerde kendini kanıtlamış sistemler gerekir, DO ise henüz olgunlaşmış değil
  • DO tasarımından etkilendim. Karmaşık işleri küçük ölçekte ele alış biçiminin gerçek ürün mimarisine benzediğini düşünüyorum

  • CF’nin geliştiricilere DO kullanmalarını önerdiğine dikkat çekiyorum

    • Worker’ın WebSocket bağlantısı 30 saniye sonra zaman aşımına uğruyor ve DO kullanımı tavsiye ediliyor
  • DO’nun MVC mimarisindeki "model"e karşılık gelip gelmediğini merak ediyorum

    • DO’yu tenant başına kullanıp tüm DO’ları nasıl sorgulayabileceğimizi veya aralarında nasıl join yapabileceğimizi merak ediyorum