Kafka Yerine Go: Solo Dev'in Sharded WAL'lı Flux Kütüphanesi
Solo geliştirici, Kafka/Redis yerine Go'da sharded, WAL destekli Flux kütüphanesini yazdı; olay toplulaştırma ve çökme güvenliği sağlıyor.
Tek başına bir sosyal platform geliştiren bir mühendis, yüksek hacimli olayları anahtara göre gruplayıp toplu (batch) şekilde veritabanına yazma ihtiyacını Kafka veya Redis gibi ağır altyapılar kurmadan çözmek istedi. Sonuç olarak Go dilinde Flux adını verdiği, işlem içi (in-process) çalışan, sharding tabanlı ve isteğe bağlı write-ahead log (WAL) içeren bir kütüphane geliştirdi. Anahtarlar N adet buffer'a dağıtılarak kilit çekişmesi azaltılıyor, her shard kendi kilidine sahip oluyor ve batch'ler boyut ya da zaman eşiğine göre flush ediliyor.
Kütüphane, SyncAlways, SyncPeriodically ve SyncOS olmak üzere üç farklı dayanıklılık seviyesi sunuyor; böylece geliştirici throughput ile veri güvenliği arasındaki dengeyi kendi seçebiliyor. Silme işlemleri tombstone yaklaşımıyla O(1) karmaşıklıkta yapılıyor ve tembel (lazy) sıkıştırma ile temizleniyor. Benchmark sonuçlarına göre shard sayısı arttıkça saniyedeki işlem sayısı 5,9 milyondan 11,5 milyona kadar çıkıyor; WAL yazma hızı ise senkronizasyon moduna bağlı olarak saniyede 4.200 ile 1,25 milyon yazma arasında değişiyor.
Projenin race detector ile eşzamanlılık testlerinden ve çökme sonrası kurtarma (crash-recovery) testlerinden geçtiği belirtiliyor. Flux, halihazırda üretimde oy sayaçları, kullanıcı itibarı ve veritabanları arası senkronizasyon gibi eventually-consistent senaryolarda kullanılıyor. Geliştirici, kod tabanının büyük ölçüde yapay zeka destekli yazıldığını ancak mimari kararları kendisinin verdiğini açıklıyor ve projeyi GitHub üzerinden paylaşarak topluluktan geri bildirim istiyor.