Her Durable Object’te sıfır gecikmeli SQLite depolama
(simonwillison.net)-
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ılocationHintparametresi verilir
- Durable Objects oluşturulduktan sonra konum değiştirmez. Varsayılan olarak ilk
-
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
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
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
Durable Object tasarımını beğeniyorum. İç işleyişini anlamak kolay
Durable Objects’in fiziksel olarak nerede bulunduğunu anlamak zor
Yeni bulut teknolojilerini anlamak zor
Schema migration’ların nasıl ele alınacağını merak ediyorum
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
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
DO’nun MVC mimarisindeki "model"e karşılık gelip gelmediğini merak ediyorum