K2 nedir?
Cloudflare, geliştirici platformuna K2 adlı yeni bir olay akışı (event streaming) servisi ekledi. Servis şu anda genel beta aşamasında. K2, üretici (producer) ile tüketici (consumer) sistemlerini birbirinden ayırarak aradaki veri akışını güvenli biçimde tamponluyor.
Geleneksel RPC mimarilerinde üretici ve tüketicinin hem zamanlama hem de ölçek olarak uyumlu olması gerekir. Tüketici yavaş kalırsa veya bir alt servis çökerse olaylar kaybolabilir. K2, araya dayanıklı bir log koyarak bu sorunu çözüyor.
Nasıl çalışıyor?
K2, olayları sıralı bir log olarak saklıyor. Tüketiciler bu logu farklı biçimlerde okuyabiliyor: okumaları bir tüketici grubuna bölebiliyor ya da tüm mesajları tüm tüketicilere iletebiliyor. Servis tamamen sunucusuz çalışıyor ve uzun süreli saklamayı destekliyor; böylece tüketici uzun süre kapalı kalsa bile veri kaybolmuyor.
Neden Kafka değil?
Cloudflare, K2'yi ilk olarak Basin Pipelines için kenarda (edge) dayanıklı bir tampon katmanı ihtiyacıyla geliştirdi. Pipelines, 335'ten fazla şehre yayılan Cloudflare kenar altyapısında çalışıyor. Bu ortamda makineler küçük ve kısa ömürlü, ağ ise çoğunlukla genel internet üzerinden. Bu nedenle Kafka gibi geleneksel dağıtık sistem yazılımlarını çalıştırmak zor.
Cloudflare bunun yerine zaten sahip olduğu güçlü durum katmanına, yani R2 nesne depolamaya yaslandı. R2, yüksek dayanıklılığı güçlü tutarlı API'lerle birleştiriyor. Çoğaltma ve uzlaşma (consensus) yükünü depolama katmanına devretmek, uygulama katmanını çok daha basit, ucuz ve hızlı hale getiriyor.
Nesne depolama üzerinde log
R2, diğer nesne depoları gibi ekleme (append) işlemini desteklemiyor; bunun yerine tam dosyalar yazmak gerekiyor. K2, yazmaları önce kenar servisinde bellekte biriktiriyor, kısa bir beklemenin ardından tüm olayları tek bir segment dosyası olarak yazıyor. Sıralama ve artan offset'ler, ayrı bir koordinasyon servisine ihtiyaç duymadan R2'nin atomik işlemleriyle sağlanıyor.