Editörden

Bugünün kapağı, bu arşivdeki en dürüst yazı olabilir: Netflix'in ilk sürümü yerel ortamda kusursuz çalışmış, üretimde ise her şey kırılmış — ve hepsini tek tek anlatıyorlar. Yanında Meta'nın çekirdek zamanlayıcısıyla 28% gecikme kazandığı yazı var; ikisi birlikte "ölçek nedir" sorusunun iyi bir cevabı.

Günün Kapağı
Netflix Tech Blog 13 Temmuz 202623 dk okuma ileri

"Yerelde mükemmel çalıştı": Netflix'in servis haritası üretimde nasıl kırıldı

Building Service Topology at Scale: Architecture, Challenges, and Lessons Learned · Netflix Technology Blog

Netflix'in mühendisleri servis bağımlılıklarının gerçek zamanlı ve birleşik bir görünümüne ihtiyaç duyuyordu: sorunları daha hızlı gidermek, bir arızanın etki yarıçapını (blast radius) anlamak ve dağıtık mimaride yol bulmak için. Çözüm çok kaynaklı: eBPF ağ akışları, IPC metrikleri ve dağıtık izleme (tracing) verileri, birbirinden fiziksel olarak ayrı grafik katmanlarında toplanıp ayrı ayrı ya da birleşik sorgulanabiliyor.

Ama yazının değeri mimaride değil, itirafta. Kendi cümleleriyle: ilk sürüm yerel ortamda kusursuz çalıştı. Üretim başka bir hikâyeydi. Sonra sayıyorlar: Kafka tüketicileri geride kaldı. Örnekler bellek yetersizliğine düştü. Bazı düğümler diğerlerinin 100 katı trafik aldı. Çöp toplama (GC) duraklamaları, asıl iş mantığından daha fazla CPU tüketti.

Mimarideki temel karar akış-öncelikli (streaming-first) olmak. Geleneksel servis topolojisi sistemleri toplu işleme kullanır: veriyi saatlik ya da günlük toplar, sonra tam anlık görüntüleri saklar. Orta ölçekte çalışır ama temel bir sorunu vardır — veriyi gördüğünde zaten eskimiştir. Bir üretim arızası sırasında bu işe yaramaz. Netflix bunun yerine çok-bölgeli Kafka akışlarından akış kayıtlarını ve Sunucu Gönderimli Olaylar (SSE) üzerinden IPC metriklerini sürekli alıp reaktif pipeline'lardan geçiriyor.

Öne çıkanlar

  • "Bazı düğümler 100 kat trafik aldı" — dağıtık sistemlerde en sinsi problem sıcak nokta (hot partition): ortalama iyi görünür, birkaç düğüm yanar.
  • GC duraklamalarının iş mantığından fazla CPU yemesi, JVM tabanlı yüksek hacimli sistemlerin klasik tuzağı.
  • Toplu işleme yerine akış: arıza anında saatlik özet işe yaramaz, gerçek zamanlı gerekir.
  • Katmanları fiziksel olarak ayırmak, her veri kaynağının bağımsız ölçeklenmesini ve sorgulanmasını sağlıyor.
  • Yazı bir başarı hikâyesi değil, açıkça bir öğrenme yolculuğu olarak sunuluyor.

Neden önemli?

Yeni mezun bir mühendisin en zor öğrendiği şey, "çalışıyor" ile "ölçekte çalışıyor" arasındaki farktır. Bu yazı o farkı listeleyerek gösteriyor: aynı kod, aynı mantık — ama veri hacmi ve eşzamanlılık değişince tamamen farklı bir sistem. Bu tür açık sözlü yazılar, yıllarca üretim deneyimi olmadan öğrenilemeyecek şeyleri öğretir.

Sende karşılığı

Bu yazıyı iki kere oku ve şu üç şeyi not al. Bir: sıcak nokta problemi — Tradebot'ta veriyi sembole göre bölümlediysen, işlem hacminin %60'ı BTC'deyse o bölüm diğerlerinin katbekat yükünü taşır. Bölümleme anahtarını seçerken dağılıma bak, isme değil. İki: tüketici geride kalması (consumer lag) — bir kuyruk sisteminde en kritik metrik budur ve mutlaka alarma bağlanmalıdır; Redis Streams ya da Kafka fark etmez. Üç: GC — Java tarafında yüksek hacimli bir servis yazıyorsan, GC log'larını açıp duraklama sürelerine bakmayı öğren. "Uygulama yavaş" şikâyetlerinin şaşırtıcı bir kısmının cevabı orada.

Sözlük

blast radius etki yarıçapı
Bir bileşen arızalandığında etkilenen diğer bileşenlerin kapsamı.
eBPF eBPF
Linux çekirdeğinde güvenli şekilde kod çalıştırıp ağ ve sistem olaylarını gözlemlemeyi sağlayan teknoloji.
consumer lag tüketici gecikmesi
Bir kuyruk tüketicisinin, üretilen mesajların ne kadar gerisinde kaldığı; kuyruk sistemlerinin en kritik sağlık metriği.
hot partition sıcak bölüm
Yükün dengesiz dağılması sonucu diğerlerinden kat kat fazla trafik alan bölüm ya da düğüm.
garbage collection (GC) pause çöp toplama duraklaması
JVM'in kullanılmayan belleği temizlerken uygulamayı kısa süre durdurması; sık olursa gecikmeyi ciddi bozar.
Orijinali oku

Kısa Kısa

Meta Engineering 13 Temmuz 20265 dk okuma ileri

Çekirdek zamanlayıcısını değiştirerek p99 gecikmesinde %28 kazanç

Modernizing the Meta Ads Service With an Open-Source Kernel Scheduler

Meta'nın reklam sunum filosu saniyede ortalama 5 milyondan fazla istek işliyor — günde 400 milyarın üzerinde. Bu ölçekte birkaç milisaniyelik gecikme bozulması ciddi iş etkisi yaratıyor.

Problem bir Linux çekirdek yükseltmesiyle çıkmış: v6.6'da gelen EEVDF zamanlayıcısı, reklam sunumunda gecikme regresyonuna ve sıralanan reklam sayısında düşüşe yol açmış. Çözüm için sched_ext'e gitmişler — çekirdek v6.12'de resmen giren, BPF tabanlı genişletilebilir zamanlayıcı çerçevesi. Yani zamanlama politikasını bir BPF programı olarak yazıp iş yüküne özel hâle getiriyorsun; çekirdek olaylar üzerinden bu programa çağrı yapıyor (thread uyanması, kuyruğa alma, dağıtım).

Sonuçlar somut: reklam getirme aşamasında p99 gecikmede %28 azalma, 3,28 megawatt güç tasarrufu ve sıralanan reklam sayısında %1,1 artış.

  • Genel amaçlı bir zamanlayıcı iyileştirmesi, belirli bir iş yükü için regresyon olabilir — "daha iyi" her zaman bağlama bağlıdır.
  • sched_ext, Google'ın ghOSt yazarlarıyla ortak tasarlanıp upstream Linux'a girmiş; yani bu bir Meta içi çatal değil, herkesin kullanabileceği bir çerçeve.
  • Güç tasarrufunun metrik olarak raporlanması, ölçekte performansın aynı zamanda bir enerji meselesi olduğunu gösteriyor.

Sende karşılığı

Çekirdek zamanlayıcısı yazmayacaksın, ama iki fikri al. Birincisi p99 kavramı: ortalama gecikme yalan söyler, kullanıcı deneyimini belirleyen kuyruk gecikmesidir. Kendi API'nde ortalama değil p95/p99 ölç — Spring Boot Actuator + Micrometer ile birkaç satırda çıkar. İkincisi: bir bağımlılığı yükselttiğinde performansın iyileşeceğini varsayma. Meta gibi ölç. Küçük ölçekte bile bir kütüphane sürümü yükseltmesinden sonra temel bir benchmark koşturmak, seni ileride günlerce hata avından kurtarır.

Sözlük

p99 latency p99 gecikmesi
İsteklerin %99'unun altında kaldığı süre; en yavaş %1'i temsil eder ve kullanıcı deneyimini ortalamadan çok daha iyi anlatır.
scheduler zamanlayıcı
İşletim sisteminde hangi işin hangi CPU'da ne zaman çalışacağına karar veren çekirdek bileşeni.
BPF BPF
Çekirdek içinde güvenli, doğrulanmış küçük programlar çalıştırmayı sağlayan mekanizma.
Orijinali oku
Cloudflare Blog 13 Temmuz 20266 dk okuma orta

Bot fare hareketini taklit edemiyor: bilek fiziği bir sinyal

Introducing Precursor: detecting agentic behavior with continuous client-side signals

Cloudflare, oturum bazlı istemci tarafı doğrulama sistemi Precursor'ı duyuruyor. Mevcut durum şu: Turnstile günde yaklaşık 3 milyar kez çalışıyor ama yalnızca kritik anlarda (giriş, kayıt, ödeme). Bu, uygulamanın geri kalanında — insanların ve botların tüm kullanıcı yolculuğu boyunca nasıl etkileştiğinde — bir görünürlük boşluğu bırakıyor.

Yazının en keyifli kısmı sinyal tasarımı. Bir bot geliştiricisi fare hareketini insan gibi göstermeye çalıştığında genelde Gauss gürültüsü ya da rastgele gecikmeler ekliyor. Ama insan hareketi sadece "gürültülü" değil, fizikle kısıtlı: insan fare hareketi çoğu zaman bir yaydır — bileğin hareket açısı ve önkolun dönüşüyle sınırlıdır. Ayrıca bilişsel yük var: bir insanın onay kutusunu görmesiyle tıklaması arasında ölçülebilir bir gecikme oluyor.

  • İyi bir sinyal taklit edilmesi zor olandır; rastgelelik eklemek fiziksel kısıtları taklit etmez.
  • Tek bir ana bakmak yerine tüm oturumu değerlendirmek, her karara çok daha fazla sinyal katıyor.

Sende karşılığı

Buradaki düşünce biçimi genel: sahtesi yapılması zor olan sinyali seç. Kendi sistemlerinde de aynı soruyu sor — KlioAI'da abonelik doğrulamasını istemciden gelen bir bayrağa mı bakarak yapıyorsun? O taklit edilebilir. Sunucu tarafında mağaza makbuzunu doğrulamak taklit edilemez. Genel kural: güvenlik kararını, saldırganın kontrol ettiği bir veriye dayandırma. Bir de gizlilik tarafına dikkat et — davranışsal sinyal toplamak güçlü bir araç ama toplanan verinin kapsamı ve saklama süresi açıkça tanımlanmalı.

Sözlük

behavioral signal davranışsal sinyal
Kullanıcının etkileşim biçiminden (hareket, zamanlama, sıra) çıkarılan, kimlik doğrulamaya yardımcı veri.
bot mitigation bot azaltma
Otomatik istemcileri tespit edip engelleme ya da sürtünme ekleme pratiği.
Orijinali oku
AWS Architecture Blog 13 Temmuz 20267 dk okuma başlangıç

Petabyte'larca video: kısmi göç bile maliyeti ciddi düşürüyor

Unlocking the future of video data: March Networks cloud storage on AWS

Kurumsal video gözetim sistemleri binlerce lokasyonda petabyte'larca veri üretiyor. Klasik model her sahada yerel kayıt cihazları ve sunucular — yerel kontrol sağlıyor ama parçalı depolama ortamları yaratıyor ve sık donanım genişletmesi gerektiriyor. Saklama süreleri uyumluluk ve sorumluluk gerekçeleriyle uzadıkça altyapı ihtiyacı hızla büyüyor.

March Networks çözümü S3 ve S3 Glacier üzerine kurmuş. Yazının en pratik gözlemi şu: kısmi göç bile işe yarıyor — yalnızca uzun vadeli saklama ve uyumluluk arşivlerini buluta taşımak bile altyapı maliyetini ciddi düşürüyor.

  • Sıcak veri (son günler, sık erişilen) ile soğuk veri (arşiv) farklı depolama katmanlarına ait; ikisini aynı yerde tutmak pahalı.
  • Göç bir "ya hep ya hiç" kararı değil — en pahalı ve en az erişilen dilimle başlamak en yüksek getiriyi verir.

Sende karşılığı

Depolama katmanlama (storage tiering) fikrini küçük projelerinde de kullan. Tradebot'taki 1 TB geçmiş veri muhtemelen tek bir yerde duruyor; ama son 3 ayın verisiyle 2 yıl önceki veriye erişim sıklığın aynı değil. Eski veriyi sıkıştırılmış Parquet olarak ucuz depolamaya, sıcak veriyi hızlı diskte tutmak hem maliyeti hem sorgu süresini düşürür. Aynı mantık PostgreSQL'de tablo bölümleme (partitioning) ile de kurulabilir — eski bölümleri ayrı tablespace'e alabilirsin.

Sözlük

storage tiering depolama katmanlama
Veriyi erişim sıklığına göre farklı maliyet/hız seviyelerindeki depolama katmanlarına yerleştirme.
cold storage soğuk depolama
Nadiren erişilen veri için kullanılan, çok ucuz ama erişimi yavaş depolama sınıfı.
Orijinali oku