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
- Sıkıştırılabilir kaynakta (CPU, ağ) agresif, sert hata veren kaynakta (bellek, disk) temkinli ol.
- Küçültme önerisini üretimde canlı trafiğin küçük bir dilimiyle, mevcut yapılandırmayla yan yana denemek, tahminden güvenilirdir.
- 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.
- Doğrulamayı geçen değişiklik de kırılabilir: izleme ve otomatik rollback son güvenlik katmanıdır.
- Büyük değişikliği tek hamlede değil küçük adımlarla yap ve her adımı doğrula.
- 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.