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
Hacker News yorumu
Her uygulama sunucusunun SQLite veritabanı dosyasını kopyalayıp periyodik olarak değiştirdiği modele ilgi var
Redis'in okuma/yazma gecikmesi, sorgulanan anahtar sayısıyla orantılı
Veri seti 1,2 milyon öğe gibi görünse de aslında büyük değil
mmapdesteklese IP listesini doğrudan kullanmak daha iyi olurduNeon iç hackathon'unda Redis protokolünü Postgres sorgularına dönüştüren bir Node.js sunucusu yazıldı
RailsWorld 2023'te Redis hakkında olumsuz bir hava vardı
SQLite, sunucu tarafında replikasyon olmadan iyi çalışan niş bir kullanım senaryosu gibi görünüyor
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
Benchmark yapmak, çok hassas sayılarla insanın kendini kandırdığı karanlık bir sanattır