Veritabanı olmadan yüksek erişilebilirliğe sahip bir web servisi kurmak
Keşif
- Yeni bir startup için genellikle Rails, Django, Node gibi web framework'leri ve MySQL, PostgreSQL, MongoDB gibi veritabanları seçilir
- Peki web servisi ile veritabanı instance'ını tek bir yapıda birleştirebilseydiniz? Tüm verileri RAM'de tutan bir yaklaşımla bu mümkün
- RAM'i veritabanı olarak kullanınca verileri SQL sorgularıyla serileştirmek gerekmez
- İndeksler, bellek içi hash tabloları kullanılarak uygulanabilir
- Arka plan işleri, büyük bir proses içindeki thread'lerle yürütülebilir
- Proses çökerse, RAM'in düzenli snapshot'larını alıp değişiklikleri diske yazarak kurtarma yapılabilir
Ölçekleme
- Yüksek erişilebilirlik talep eden müşteriler ortaya çıktığında, Raft uzlaşma algoritması kullanılarak sunucular çoğaltılır
- Lider sunucu devre dışı kalırsa yeni bir lider seçilir ve istekleri işlemeye devam eder
- Bu yöntemle sunucuları yeniden başlatmadan rolling deploy yapılabilir
Ayrıştırma
- Büyük müşterilerin sayısı arttığında, web servisi sharding ile bölünerek yönetilebilir
- Her kurumsal müşteriye özel bir cluster sağlanır
- Başlıca darboğaz, commit thread'inin performansı olabilir
Bizim stack'imiz
- Common Lisp kullanılıyor: çoklu thread desteği güçlü ve kod hot reloading için uygun
- bknr.datastore ve bknr.cluster kullanılıyor: Raft implementasyonu için Baidu'nun Braft kütüphanesi kullanılıyor
- Görsel dosyaları depolamak için EFS kullanılıyor: hata işleme ve test açısından S3'e göre daha kolay
Özet
- Bu mimari yeni startup'lar için uygundur ve Common Lisp kullanıldığında pek çok araç zaten hazırdır
- bknr.datastore, Braft ve Raft'a katkı sunanlara teşekkür edilir
GN⁺ özeti
- Bu yazı, veritabanı olmadan yüksek erişilebilirliğe sahip bir web servisi kurmak için yeni bir mimari tanıtıyor
- RAM veritabanı olarak kullanılıyor ve Raft uzlaşma algoritmasıyla yüksek erişilebilirlik sağlanıyor
- Common Lisp ile çoklu thread ve kod hot reloading desteği sunuluyor
- Bu mimari yeni startup'lar için uygun; hızlı geliştirme ve debug imkanı veriyor
- Benzer özelliklere sahip projeler arasında Redis ve Memcached bulunuyor
1 yorum
Hacker News görüşü
SQLite kullanmadan kendi transaction log'unu oluşturmak garip
MySQL, Postgres, Redis, MongoDB vb. kullanmadan kendi bellek içi veritabanını yapmak karmaşık
MySQL veya Postgres'in temel yönlerini öğrenmek istememek zaman kaybı
HashiCorp'un Nomad, Consul, Vault'una benzer bir mimari
RAM'in çok ucuz olduğuna dair bir yanlış kanı var
Dosya sistemi dizinlerini tablo, JSON dosyalarını satır olarak kullanan bir proje görmüştüm
İlişkisel veritabanı kullanmak daha güvenilir
Karmaşıklıktan kaçınmak için kendi Raft consensus katmanını implement etmişler
Modern masaüstü ve mobil uygulamalar sık sık SQLite gibi veritabanları kullanıyor
Kendi bellek içi veritabanını kurmak, Postgres veya SQLite kurmaktan daha kolay değil