1 puan yazan GN⁺ 2024-09-26 | 1 yorum | WhatsApp'ta paylaş

Arka plan

  • Wafris, açık kaynaklı bir web uygulaması güvenlik duvarı şirketi ve Rails middleware istemcisi sunuyor
  • İlk v1 istemcisi yerel bir Redis veri deposu gerektiriyordu, ancak artık SQLite kullanan v2 istemcisini yayımladı
  • Bu yazı, Redis'ten SQLite'a geçiş karar sürecini, performans değerlendirmelerini ve mimari değişiklikleri ele alıyor

Özet

  • SQLite, Redis ve geleneksel RDBMS'ler (Postgres/MySQL) kendi avantaj ve dezavantajlarına sahip
  • Bu veri depoları birbirinin yerine bire bir kullanılamaz ve bunu denemek sorunlara yol açabilir
  • Bu yazı, Redis tabanlı v1 istemcisinin SQLite tabanlı v2 istemcisine nasıl yeniden kurgulandığını açıklıyor

Bu değişikliği zorunlu kılan neydi?

  • Wafris'in amacı, geliştiricilerin sitelerini kolayca koruyabilmesini sağlamak
  • v1 istemcisi bir Redis veri deposu kullanıyordu, ancak birçok kullanıcı Redis dağıtımıyla ilgili sorunlar yaşadı
  • Kullanıcıların Redis yöneticisi olma yükünü azaltmak için SQLite'a geçildi

Hız nedir?

  • Redis, geleneksel RDBMS'lere kıyasla hızlıdır, ancak yine de yönetilmesi gereken birçok unsur vardır
  • Bulut ortamlarında ağ gecikmesi büyük bir sorun haline gelir
  • SQLite, ağ gidiş-dönüş süresini azaltarak daha yüksek performans sunabilir

Monolitik varsayım

  • Birçok dağıtık uygulama, Redis kullanımında sorunlara yol açar
  • Redis kullanımının karmaşıklığını azaltmak için mimari yeniden düşünüldü

SQLite'ın benimsenmesi

  • SQLite, ağ IO darboğazlarını azaltır
  • SQLite, istemci/sunucu veritabanlarıyla değil, dosya açma (fopen()) ile rekabet eder

SQLite ve Redis karşılaştırmalı ölçümü

  • SQLite, belirli kullanım senaryolarında Redis'ten yaklaşık 3 kat daha hızlıdır
  • Ağ gecikmesi hesaba katılmasa bile SQLite daha hızlıdır

Grafiklerde eksik kalanlar

  • SQLite performansı benchmark'ta daha kötü görünse bile, gerçek ortamda ağ gecikmesi nedeniyle daha hızlı olabilir
  • SQLite yatay ölçeklendirmeyi kolaylaştırır ve kullanıcıların kurulum ile yapılandırma yükünü azaltır

Senkronizasyon mimarisi kurmak

  • v1'de (Redis), kullanıcı kuralları güncellediğinde güncellemeler Redis veri deposuna yazılıyordu
  • v2'de (SQLite), istemci periyodik olarak güncellenmiş kuralları kontrol ediyor ve yeni SQLite veritabanını indiriyor

SQLite dağıtık mimarisi

  • Veritabanı darboğazı sorununu çözmek için SQLite DB her bir hesaplama örneğine senkronize ediliyor

Sonuç

  • SQLite tabanlı v2 mimarisi, birçok sitenin saldırılara dayanmasına ve çevrimiçi kalmasına yardımcı oluyor
  • Kullanıcıya daha az yük bindirirken daha güvenli ve güvenliği güçlendirilmiş bir internet sunuyor

GN⁺ özeti

  • Bu yazı, Redis'ten SQLite'a geçiş sürecini ve bunun nedenlerini açıklıyor
  • SQLite, ağ gecikmesini azaltarak performansı artırıyor ve kullanıcıların kurulum ile yapılandırma yükünü azaltıyor
  • SQLite'ın dağıtık mimarisi, veritabanı darboğazı sorununu çözüyor
  • Yazı, web uygulaması güvenlik duvarını kolay dağıtılabilir ve hızlı çalışır hale getirmenin yollarına dair içgörü sunuyor

1 yorum

 
GN⁺ 2024-09-26
Hacker News yorumu
  • Her uygulama sunucusunun SQLite veritabanı dosyasını kopyalayıp periyodik olarak değiştirdiği modele ilgi var

    • Web uygulama güvenlik duvarı kuralları için kullanılıyor
    • Özellik bayrağı yapılandırması için de kullanılabilir
    • Özellik bayraklarında güncellemenin birkaç saniye sürmesi sorun değil
  • Redis'in okuma/yazma gecikmesi, sorgulanan anahtar sayısıyla orantılı

    • Postgres ve Redis kullanan monolitik bir uygulama iyi çalışmıştı
    • Redis tek iş parçacıklı olduğu için yoğun okuma işlemleri diğer işleri yavaşlatabilir
    • Redis, bir anahtarı veya küçük ve sabit bir anahtar kümesini okuyup yazarken iyi
    • SQLite'ın yerel bir Redis instance'ına kıyasla daha iyi performans göstermesi ilginçti
  • Veri seti 1,2 milyon öğe gibi görünse de aslında büyük değil

    • IPv4 adresleri 4,8 MB, basit sıkıştırmayla daha da küçülebilir
    • Ruby mmap desteklese IP listesini doğrudan kullanmak daha iyi olurdu
  • Neon iç hackathon'unda Redis protokolünü Postgres sorgularına dönüştüren bir Node.js sunucusu yazıldı

    • Eğlenceli bir hack projesiydi
  • RailsWorld 2023'te Redis hakkında olumsuz bir hava vardı

    • Redis sunucusunun gerekli olduğu varsayılıyordu
    • Redis ile deneyim az olduğu için mevcut ekosistemin Redis'e karşı olup olmadığı merak ediliyor
  • SQLite, sunucu tarafında replikasyon olmadan iyi çalışan niş bir kullanım senaryosu gibi görünüyor

    • Başka bir alternatif olarak belleğe yüklenmiş statik dosyalar kullanılabilir
    • SQLite iyi bir alternatif
  • Redka adında, Redis'i SQLite ile gerçekleştiren bir proje var

  • En iyi alıntı: "SQLite istemci/sunucu veritabanlarıyla rekabet etmez. SQLite, fopen() ile rekabet eder."

  • Redis, geleneksel RDBMS'lere kıyasla hızlı ama yönetim gerektiriyor

    • Her veritabanı belli düzeyde yönetim gerektirir
    • Join'leri dert etmezsen satır ekleme ve sorgulama da çok hızlıdır
  • Benchmark yapmak, çok hassas sayılarla insanın kendini kandırdığı karanlık bir sanattır