Sayı 59

Netflix’ten iki yazı, ikisi de aynı soruya cevap: maliyeti düşürürken sistemi nasıl kırmazsın? Biri yüz binlerce konteynerin boyutunu otomatik küçültüyor ve bir hatadan dürüstçe ders çıkarıyor; diğeri eski veriyi pahalı diskten ucuz depolamaya taşıyor.

Günün kapağı Netflix Tech Blog 14 Ekim 2026 15 dk okuma orta

Konteyner boyutunu makine ayarlasın: Netflix’in otomatik küçültme sistemi ve kendi hatasından dersi

Netflix Stratum Media Processing: Automated Container Right-Sizing · Netflix Technology Blog

Stratum, Netflix’in kodlama, paketleme, denetleme ve kalite puanlama gibi medya işlerini yürüten serverless platformu; günde yüz binlerce konteyner yönetiyor. Fonksiyon sahipleri CPU, bellek, disk ve ağ sınırlarını YAML’la yazıyor. Pratikte yeni bir fonksiyonun yapılandırması başka bir fonksiyondan kopyalanıyor ya da en kötü senaryoya göre ayarlanıyor ve bir arıza çıkana kadar kimse dönüp bakmıyor. Altyapı ve codec’ler değiştikçe doğru değer sessizce kayıyor. Netflix ölçeğinde küçük bir fazlalık hızla çarpılıyor. Çözüm, çalışan konteynerleri insan olmadan güvenle küçülten Stratum Resource Tuner (SRT); kullanımı tüm kaynak kullanımının yüzde 70-80’ini oluşturan, gecikmeye duyarlı olmayan yüksek hacimli işlerle başlanmış. Sistem her kaynak türü için fonksiyon sahibinin açıkça seçmesiyle devreye giriyor.

Akış beş adım: metrik topla, öneri üret, deneylerle doğrula, uygula ya da reddet, uyguladıktan sonra izle. Metrikler sub-dakika çözünürlükle akıp kısa vadeli sorgular için Elasticsearch’e, aylarca geçmiş için Iceberg tablolarına yazılıyor. Günlük bir iş son ayın kullanımından öneri üretiyor ve kuralı kaynağın doğasına göre ayırıyor: CPU ve ağ, sıkıştırılabilir kaynaklar olduğu için p99’a boşluk bırakmadan hedefleniyor (sınıra ara sıra çarpan konteyner biraz yavaşlar). Bellek ve disk ise p99,9’a güvenlik payıyla hedefleniyor, çünkü tükenince OOM ve OOD gibi sert hatalar oluşuyor. Bir önerinin mutlak kazancı çok küçükse atılıyor; bellek ve disk için tek turda en fazla yüzde 15 küçültme sınırı da erken üretim koşularından öğrenilmiş bir emniyet. Örneğin bir kodlama fonksiyonunda 18.000 MB bellek 15.300 MB’a, 8 çekirdek 4’e önerilmiş.

Emniyet ağı: daha büyük konteynerle yeniden dene. Öneriler geçmiş veriye dayandığı için hiç görülmemiş ağır bir istekle karşılaşabilir. Her ayarlanmış konteynerde bir izleyici, bellek kullanımı (cache’siz) yüzde 85’i ya da disk yüzde 95’i aşarsa yürütmeyi iptal edip işi 1,5 kat büyük konteynere kuyruğa yeniden koyuyor. Böylece günlük yapılandırma sıkı tutulabiliyor; nadir aykırı durumlar için baştan büyük ayırmak gerekmiyor. (Gerçek OOM olayını yakalamak mimari nedenlerle zor olduğundan eşik geçici bir çözüm olarak kullanılıyor.)

Doğrulama iki aşamalı. Önce sentetik deney: üretim trafiğinden yalıtık bir ortamda iki küme (mevcut ve önerilen yapılandırma) aynı istek kümesini aynı anda işliyor, 1-2 saat sürüyor. Sonra üretim deneyi: gerçek trafiğin yaklaşık yüzde 90’ı ana kümede, yüzde 5’i mevcut yapılandırmalı bir temel kümede, yüzde 5’i önerilen yapılandırmalı deney kümesinde; bir günden bir haftaya sürebiliyor ve gerileme görünürse erken iptal ediliyor. Karşılaştırma ana küme ile değil benzer boyutlu temel küme ile yapılıyor ki trafik profilleri kıyaslanabilir olsun. İki kontrol var: yeniden deneme oranı (bellek ve disk küçültmede deney boyunca en fazla yüzde 1) ve ortanca çalışma süresi (iş yüküne göre en fazla yüzde 10-15 yavaşlama). Geçerse uygulanıyor, geçmezse mevcut yapılandırma korunuyor.

Uygulamadan sonra izleme ve yaşanan hata. Doğrulamayı geçen bir öneri bile sonradan kırılabilir: kod, girdi parametreleri ya da altyapı değişebilir. Bu yüzden 90 gün izleniyor (30 dakikalık hızlı ve 24 saatlik yavaş pencere). Yazının en değerli kısmı bir olay: bir fonksiyonun belleğinde yüzde 50 küçültme tüm doğrulamaları geçmiş ve iki hafta kararlı çalışmış, sonra beklenmedik bir trafik değişimi yeniden deneme oranını yüzde 60’ın üstüne çıkarmış. O zaman otomatik rollback yoktu, mühendisler elle müdahale etti. Dersler: otomatik rollback (son 30 dakikada yüzde 3 yeniden deneme uyarı, yüzde 10 otomatik rollback; 24 saatte yüzde 2’de ikisi birden) eski kararlı yapılandırmaya dönüyor, kasıtlı olarak akıllı bir ayar yerine basit tutulmuş; bellek ve disk küçültme yüzde 15’lik adımlarla ve her adımda kararlılık doğrulanarak yapılıyor; tüm fonksiyonlarda otomasyonu kapatan global bir acil anahtar eklendi; yeni deneyler arasında yaklaşık bir hafta bekleme süresi zorunlu.

Öne çıkanlar

  1. Sıkıştırılabilir kaynakta (CPU, ağ) agresif, sert hata veren kaynakta (bellek, disk) temkinli ol.
  2. Küçültme önerisini üretimde canlı trafiğin küçük bir dilimiyle, mevcut yapılandırmayla yan yana denemek, tahminden güvenilirdir.
  3. Nadir aykırı durumlar için ‘büyük konteynerle yeniden dene’ emniyeti, günlük yapılandırmayı sıkı tutmayı mümkün kılar.
  4. Doğrulamayı geçen değişiklik de kırılabilir: izleme ve otomatik rollback son güvenlik katmanıdır.
  5. Büyük değişikliği tek hamlede değil küçük adımlarla yap ve her adımı doğrula.
  6. Her otomasyonun bir kill switch olmalı.

Neden önemli?

Maliyet optimizasyonu, ölçüm ve güvenlikle birleşmeyince bir arıza üreticisine dönüşür. Bu yazı otomasyonun ‘öner, dene, uygula, izle, geri al’ döngüsünü ve kendi hatasından çıkarılan kuralları açıkça gösteriyor; Netflix’in yüzde 50’lik küçültmeden sonra yüzde 15’lik adımlara geçmesi bunun en somut kanıtı.

Pratikte

Ölçek farklı ama düşünce aynı. Docker ya da bir sunucuda bellek sınırı verirken ‘en kötü durum’ tahmin etmek yerine kullanımı bir hafta ölç, p99’a bak ve bir güvenlik payı ekle. Spring Boot için JVM’de -Xmx ve container memory limit değerlerini Actuator/Micrometer metrikleriyle karşılaştır. Küçültmeyi tek adımda değil yüzde 15’lik adımlarla yap ve her adımdan sonra hata oranına bak. Canlıda bir strateji ya da konfigürasyon parametresini değiştirirken de aynı fikir: yeni değeri önce küçük bir trafik dilimiyle eskisiyle yan yana çalıştır (canary), farkı ölç, sonra genişlet; kötüleşirse otomatik olarak eskiye dön.

Sözlük

right-sizing
Bir kaynağın (CPU, bellek) gerçek kullanıma uygun boyuta ayarlanması.
p99 / p99.9
Ölçümlerin yüzde 99 ya da 99,9’unun altında kaldığı değer; ortalamanın göremediği uçları gösterir.
OOM (out of memory)
Bir sürecin ayrılan belleği aşıp işletim sistemince sonlandırılması.
canary / baseline cluster
Değişikliği küçük bir trafik dilimiyle, değişmemiş eşdeğer bir kümeyle karşılaştırarak deneme düzeni.
kill switch
Otomasyonu ya da özelliği anında devre dışı bırakan genel anahtar.
Orijinali oku

Kısa kısa

Netflix Tech Blog 14 Ekim 2026 10 dk okuma ileri

Soğuk veriyi diskte değil yedekte oku: Netflix TimeSeries’in tiered storage yolculuğu

TimeSeries Tiered Storage Journey: Kafka/Flink Streams to Native Cassandra Cold Reads

Netflix’in TimeSeries Abstraction’ı, zamansal olay verisini yüksek hacimde saklayan ve sorgulayan platform; en büyük veri kümeleri artık birden çok petabayt. Düşük milisaniye gecikme için ayarlı sıcak depoda bu kadar veri tutmak pahalı. Oysa sorguların çoğu yakın olaylara gidiyor, eski veri yalnızca ara sıra denetim ve inceleme için gerekiyor. Hedef: yakın veriyi hızlı depoda, eskisini ucuz nesne depolamada tutmak ve API’yi değiştirmemek. Yazı iki çözümü sırayla anlatıyor.

Çözüm 1: Kafka/Flink ile S3’e akıtma. Veri Cassandra’ya yazılırken eş zamanlı olarak S3’e de akıyor. Flink, olayları saat içindeki olay zamanına göre Parquet dosyalarına topluyor; günlük bir sıkıştırma (compaction) işi küçük dosyaları günlük tek bir optimize dosyada birleştiriyor: 4-8 MB’lık küçük satır grupları (aralık okumayı ucuzlatır), zamana göre sıralama ve Bloom filtreleri (EVCache’te cache’te, gereksiz S3 okumalarını atlamak için). Bir günlük veriyi okumak en çok üç ardışık S3 okuması gerektiriyor ve sistem küresel olarak saniyede 1.250 soğuk okuma işledi. Ama akış altyapısı pahalı ve ekibin nöbet kapsamını genişletiyor.

Çözüm 2: Cassandra’yı doğrudan yedeklerinden okutmak. Netflix zaten felaket kurtarma için Cassandra’yı düzenli olarak S3’e yedekliyor. Fikir: ayrı bir veri aktarımına para ödemek yerine soğuk veriyi bu yedeklerden oku. Bir zaman dilimi soğuk sınırı aştığında yazılmaya kapanıp değişmez oluyor; bu değişmezlik her şeyi mümkün kılıyor. Üç parça: ReadOnlyCompactionStrategy (ROCS) SSTable’ları bir kez token aralıklarıyla hizalıyor (çakışma azalır, tek bir okuma çok dosyaya dokunmaz); Cassandra 4.1’in takılabilir Memtable özelliği soğuk tabloların okumalarını yedek depolamaya yönlendiriyor (Data.db dışındaki küçük bileşenler node’a indirilip sorgu planlamada kullanılıyor); ve Cassandra sanal tabloları, ROCS’un bittiğini ve yedeğin tam alındığını doğruluyor. Soğuk okumalar CPU’yu daha çok yorduğundan sıcak yolu bozmasın diye isteğe bağlı olarak ayrı, daha küçük ve ucuz bir Cassandra kümesinden sunulabiliyor.

Sonuç: 15 PB’tan fazla sıkıştırılmış veri Cassandra soğuk katmanında; bölge başına saniyede binlerce okuma; önceki soğuk depolamaya göre p90 gecikme yaklaşık yüzde 30 iyileşmiş, p99 yaklaşık 500 ms’nin altında.

Öne çıkanlar

  1. Verinin değişmez hâle geldiği an, onu ucuz depolamaya taşımanın güvenli andır.
  2. Zaten var olan bir yedek, ikinci bir veri kopyası ve ikinci bir hat olmadan soğuk katman olabilir.
  3. Her yeni akış altyapısı nöbet yükü getirir; mevcut parçayı yeniden kullanmak operasyonu azaltır.
  4. Soğuk okumaları ayrı bir kümeye taşımak, sıcak yolu korur.

Pratikte

Büyük bir geçmiş veri setinde (örneğin 1 TB piyasa verisi) aynı mantık geçerli: son birkaç haftanın verisi hızlı SSD’de ya da Postgres’te kalsın, eskisi sıkıştırılmış Parquet dosyaları olarak ucuz diskte ya da S3’te dursun ve zamana göre partition’lanmış olsun. Backtest’lerin çoğu zaten eski veriyi tarar; DuckDB ya da pandas Parquet’i doğrudan okur. Veri bir kez yazılıp değişmediği için backup ve arşiv aynı dosya olabilir.

Sözlük · 4 terim
tiered storage
Veriyi erişim sıklığına göre hızlı-pahalı ve yavaş-ucuz depolama katmanlarına dağıtma.
SSTable
Cassandra’nın diskte tuttuğu değişmez, sıralı veri dosyası.
Parquet
Analitik okuma için tasarlanmış sütunlu dosya biçimi.
Bloom filter
Bir öğenin kesin olarak yok olduğunu ucuz biçimde söyleyen olasılıksal veri yapısı.
Orijinali oku