Allspaw'ın Kitabı Neyi Çözer
Bitirmeme Disiplini
John Allspaw, Flickr'de patlamacı bir büyüme döneminde operasyonları yönetmektense sonra 'The Art of Capacity Planning' (O'Reilly, 2008; ikinci baskı 2017) yazmıştır. Tezi: kapasite planlaması, bir defaya mahsus elektronik tablo alıştırması değildir. Ölçüm, tahmin & mühendislik yargısını birleştiren bir süregelen disiplindir. Bu üçten herhangi birini atlarsanız, ya üretimde kapasite tükenirsiniz ya da işlememeyen donanıma para harcarsınız.
Kapasite planlaması iki arıza modunun arasında bulunur:
- Yetersiz sağlama: hizmetler sıcakta çalışır, gecikme süresi yükselir, hata oranları artar, müşteriler ayrılır. Büyüme aşamasında kullanıcıları kaybetmenin en hızlı yolu.
- Fazla sağlama: donanım %10 kullanım oranında bulunur, finans bütçenin neden büyümeye devam ettiğini sorar. Bütçe incelemesinde başınızı kaybetmenin en hızlı yolu.
Sanat, bu iki uçurum arasında koridoru bulmak & iş yükü değiştikçe içinde kalmaktır.
Üç temel soru her kapasite alıştırmasını yönlendirir:
- Elimizde ne var? Somut birimler cinsinden mevcut kapasite: saniye başına istekler, saniye başına sorgular, gigabayt depolama, eşzamanlı bağlantılar.
- Ne lazımdır? Açık belirsizlik sınırları olan gelecek bir tarihte tahmin edilen talep.
- Ne zaman harekete geçmeliyiz? Satın alma, sağlama veya ölçeklendirme için başlangıç süresi. Bulut bunu dakikalara indirgeyebilir; şirket içi aylar anlamına gelebilir.
Neden Elektronik Tablo Olamaz
Bir e-ticaret şirketi kapasite planlamasını yılda bir kez Kasım ayında önceki 12 ayın trafiğini doğrusal olarak tahmin ederek yapar. Özel sunucularda çalışırlar ve satın alma için başlangıç süresi 6 haftadır. Trafikleri güçlü haftalık mevsimsellik (3x hafta sonu zirvesi), güçlü yıllık mevsimsellik (5x Kara Cuma) & üç yıldan beri %40 yıl-yıl büyümektedir.
İş Yükü ile Kullanım
İki Farklı Sayı, İkisi de Gerekli
Kapasite planlaması, takımlar iki temel boyuttan yalnızca birini ölçtüğünde başarısız olur.
İş yükü: sistemin dışarıdan aldığı talep. Saniye başına istekler, dakika başına işlemler, saniye başına megabayt, eşzamanlı kullanıcılar. İş yükü, dünyanın sizden ne istediğini açıklar.
Kullanım: bu talebe hizmet verirken sistemin ne kadar dolu olduğu. CPU yüzdesi, kullanılan bellek, kuyruk derinliği, ağ bant genişliği, disk IOPS. Kullanım, sistemin bu talep altında nasıl hissettiğini açıklar.
Yalnızca iş yükü ne geldiğini söyler ama bunu servis edip edemeyeceğinizi söylemez. Yalnızca kullanım ne kadar doluyunuz olduğunu söyler ama yarın ne bekleyeceğinizi söylemez. Her ikisine ihtiyacınız var, yan yana çizilmiş, kapasite kararları almak için.
Kapasite oranı = iş yükü / kullanım. Saniye başına 1.000 isteği %50 CPU ile servis ederseniz, kapasite oranınız sunucu başına 100% CPU başına 2.000 RPS'tir. Bu dönüşüm faktörü tahmin edilen iş yükünü gerekli sunucu sayısına çevirmenizi sağlar.
Allspaw ölçüm konusu doğru tanecikliliğini vurgular. Dakikada bir örnek 30 saniyelik zirveleri gizler. Saatte bir örnek her şeyi gizler. Gerçek kapasite işi tepe olayları için dakikadan az çözünürlüğe & eğilim için dakika çözünürlüğüne ihtiyaç duyar. Daha kaba herhangi bir şey tehlikeli yanlış güven üretir.
Neyi Araç Haline Getirmeli
Takımınız yeni bir ürün lansmanında (bir video transkodlama hizmeti) kapasite araçlandırması başlatıyorsunuz. Dakikadan az çözünürlükte en fazla 8 metrik seçebilirsiniz. Hizmet, video yüklemelerini alır, kuyruklar, birden fazla biçime transcode eder, & çıktıları nesne depolamasına yazar.
Eğilim, Mevsimsellik, Belirsizlik
Her Tahminin Üç Katmanı
Allspaw ve Google SRE kitabı faydalı bir tahmin yapısı hakkında anlaşırlar: eğilim, mevsimsellik, & belirsizlik sınırları. Herhangi birini atlarsanız tahmin yanıltıcı hale gelir.
Eğilim: ay veya yıl boyunca talep eğimi. Genellikle kısa pencereler için doğrusal regresyon, bileşik büyüme için üstel veya parçalı doğrusal modellenir. Eğilim çizgisi 'talep genel olarak nereye gidiyor?' sorusunu yanıtlar.
Mevsimsellik: birden fazla zaman ölçeğinde döngüsel desenler. Günlük (öğleden sonra trafik zirvesi), haftalık (hafta sonu dalgalanmaları), yıllık (Kara Cuma, vergi mevsimi, okul yılı). Çarpımsal mevsimsellik eğilimle ölçeklenir; toplamlı mevsimsellik sabit bir ofset ekler.
Belirsizlik sınırları: tahmin konisi. Sınırlar olmayan tahmin bir tahmintir. Gerçek tahminler açık üst ve alt sınırlarla merkezi bir tahmin yayınlar, tipik olarak %90 veya %95 güvende. Koni, geleceğin daha uzağa projekte ettikçe genişler. 4 haftalık tahmin ±%10 sınırlarına sahip olabilir; 12 aylık tahmin genellikle ±%50 sınırlarına sahiptir.
İşletme büyümesini teknik talepten ayırmak: kapasite planlaması teknik iş yükünü tahmin eder, ama işletme takımları geliri, kaydolmaları veya kampanyaları tahmin eder. Kapasite planlamasının işi, işletme tahminlerini teknik talebe çevirmektir: %30 kayıt büyümesi %30 daha fazla API çağrısı anlamına gelebilir, ama yeni kullanıcılar sistemi daha yoğun kullanırsa %80 daha fazla anlamına gelebilir, ya da daha düşük oranda dönüştürülürlerse sadece %15. Dönüşüm oranı temel işletme tahmininin kadar önemlidir.
Tatil Trafiğini Tahmin Etmek
Hizmetiniz bir e-ticaret sitesine hizmet eder. Geçen yılın Kara Cuma trafiği, Kasım ortalamasının 5 katıydı, 12 saat boyunca sürdü. İşletme %40 yıl-yıl büyümüştür. Pazarlama, Kara Cuma trafiğine %20 ek katkı yapması beklenen ücretli bir promosyon başlatıyor.
Tavanınızı Bilmek
Üretim Bunu Yapmazdan Önce Tavanı Bulun
Tahmin, nelerin geleceğini söyler. Tavan testleri sistemin bunu servis edebilip edemeyeceğini söyler. Allspaw tavan testini kapasite planlamasının tartışılmaz bir girdisi olarak davranır: kontrollü yük altında testini yapana kadar gerçek kapasitesini bilmezsiniz.
Üç tavan testi türü:
- Sentetik yük testi: bir yük üreteç (k6, Locust, JMeter, vegeta) bir hedef hizmete sahne kurulumunda trafik sürücüler. Bir şey kırılana kadar yükü artırın. Kırılma noktası tavanıdır. En iyi izole hizmet testi için.
- Üretim yangın tatbikatı: üretimde kapasiteyi kasıtlı olarak azaltın (sunucuların yüzdesini boşaltın, bir bölgeyi öldürün) ve kalan kapasitesinin gerçek trafik nasıl işlediğini gözlemleyin. Beklenmedik etkileşimler de dahil olmak üzere gerçek üretim davranışını test eder. En yüksek güven ama en yüksek risk.
- Gölge yük: gerçek üretim trafiğini üretimin yanında çalışan hedef hizmete yeniden oynatın. Gerçek iş yükü desenleri (nadir sorgu karışımı, garip kullanıcı aracıları) yakalar kullanıcıları etkilemeden. Güçlü orta yol.
Başlık geçerli yük ile tavan arasındaki tampordur. SRE parmak kuralları:
- Sabit durumda %50 başlık tek bölge hizmeti için (böylece bir bölge arızası kalan bölgeyi tüketmez)
- N+2 artıklığı olan çok bölge hizmeti için %30 başlık
- Bilinen tepe olaylarına yaklaşılırken %100+ başlık (Kara Cuma, spor finalleri)
Başlık israf değildir. Saat 3'te mühendisleri çağırmama maliyeti, dalgalanma sırasında müşterileri kaybetmeme, & bir bölge arızası yaptığında kademeli bir arıza yaşamamaktır. Finans takımları bazen başlığı azaltmaya kalkışır; kapasite mühendisleri, o konuşmayı duygusal yerine faktik yapmak için sıkı çalışmanın maliyetini açıklamak zorundadırlar.
Tavan Testi Tasarımı
Belgeli kapasite tavanı olmayan bir hizmeti devralırsınız. Mevcut üretim yükü 12 sunucu arasında saniye başına 800 istektir, ortalama CPU %35'tir. Pazarlama, tepe noktasında trafiği 3.000 RPS'ye çıkması beklenen bir kampanya açıklamaktadır.
Yukarı, Dışarı, ya da Diyagonal
Güç Eklemek, Kutular Eklemek, ya da Her İkisi Ne Zaman
Üç temel ölçeklendirme stratejisi, her birinin belirgin maliyet & güvenilirlik profilleri:
Dikey ölçeklendirme (ölçeğini büyütmek): daha büyük makineler. 8 çekirdekli sunucuları 32 çekirdekli sunucularla değiştirin. En basit yol; tek makine sınırlarına vurana kadar işe yarar. Tek arıza noktası kalır. Maliyet doğrusal olmayan şekilde büyür: 32 çekirdekli makine genellikle 4x 8 çekirdekli maliyetinden fazlasına mal olur.
Yatay ölçeklendirme (ölçeğini genişletmek): daha fazla makine. Yük dengeleyicinin arkasına sunucular ekleyin. Kapasite sunucu sayısı ile doğrusal olarak ölçeklenir. Arıza modları kayar: dağıtılmış koordinasyonu işlemek zorundadırlar, ama tek sunucu arızası artık hizmeti yok etmez. İşletme karmaşıklığı artar.
Diyagonal ölçeklendirme (Allspaw'ın terimi): önce ölçeğini büyüt rahat bir sunucu boyutuna, sonra oradan ölçeğini dışarı genişlet. Daha büyük sunucuların basitleştirilmiş işletmesini birden fazla sunucunun artıklığı ile birleştirir. Çoğu üretim hizmeti diyagonal ölçeklendirme alanında bulunur.
Ayrılmış ve istek üzerine fiyatlandırması: bulut sağlayıcılar öngörülebilirliği ödüllendirir. Ayrılmış kapasite istek üzerine olmaktan %30-60 daha ucuzdur ama 1-3 yıllık bir taahhüt gerektirir. Kapasite planlayıcıları tipik olarak sabit durum talebini ayrılmış kapasiteyle kilitler ve zirveleri istek üzerindeye çıkarırlar. Bu bölme yanlış değerlendirmek ya para israf eder (aşırı ayrılmış) ya da bütçeyi sürprizlere maruz bırakır (zirvelerde ayrılmamış).
Spot örnekleri ve ön ödemeli iş yükleri: istek üzerine maliyetinden %60-90 daha ucuz ama dakikalar içinde geri çekilebilir. Toplu işler, analitik, eğitim iş yükleri ya da zarif kesintiye tasarlanmış herhangi bir hizmet için uygun. Üretim kullanıcıya yönelik trafik tipik olarak spot'dan kaçınır.
Ölçeklendirme Yolu Seçme
Video transkodlama hizmetiniz 8 orta boyutlu bulut örneğinde çalışır (her biri 8 çekirdekli). Sonraki 6 ayda 3x büyüme bekliyorsunuz. İş yükü CPU'ya bağlı, video başına paralelleştirilebilir, & her video transkod 90 saniyeli sondan sona alır. Ayrılmış örnekler istek üzerine maliyetinin %50'sine mal olur. Spot örnekleri istek üzerine maliyetinin %30'una mal olur ama 2 dakikalı bildirimle sonlandırılabilir.
Kapasite Planlaması Kariyerleri
Kapasite Planlaması Becerilerinin Ödeme Yaptığı Yer
Kapasite planlaması, kendi başına nadir olarak bir iş unvanıdır. Beceriler birkaç rol altında görünür:
Site Güvenilirlik Mühendisi: kapasite planlaması temel bir SRE sorumluluğudur. Çoğu SRE takımı, tahmin modellerine, tavan testlerine & sağlama otomasyonuna sahip olan bir veya iki mühendise sahiptir.
Bulut Maliyeti / FinOps Mühendisi: bulut harcama optimizasyonuna odaklanmış daha yeni bir rol. Kapasite planlamasını finansal modelleme, sözleşme müzakereleri, & ayrılmış örnek portföyü yönetimi ile birleştirir. Bulut faturaları genellikle maaşlardan sonra ikinci en büyük masraf olduğu için büyük bulut'ya özgü şirketlerde son derece iyi ödeme yapıyor.
Performans Mühendisi: düğüm başına verimliliğe & tavan testlerine odaklanır. İş: aynı donanımdan daha fazla kapasite ayıkla profil oluşturma, optimizasyon, & mimari değişiklikler yoluyla. Ağır sistemler & dil çalışma zamanı bilgisi.
Kapasite Planlaması Uzmanı: çok büyük şirketlerde (Google, Meta, Amazon, Netflix), adanmış kapasite planlaması takımları vardır. Tüm filo boyunca tahmin modelleridir, ölçekte satın alma müzakere eder, & finans ile çok yıllı donanım yol haritaları koordinatlıdır.
Bileşik beceriler: zaman serileri analizi (R, Python statsmodels, Prophet), kuyruk teorisi (M/M/1, M/M/c, Little Yasası), en az bir yapılandırma yönetimi aracı, en az bir bulut maliyet panosu, & bir CFO'nun anlayabilmesi ve harekete geçirmesi gereken tahmin raporu yazma yeteneği. Teknik beceriler sizi röportaja alır; iletişim becerleri sizi bütçe alır.
Özetleme
Şimdi Bildiğiniz Şey
Kapasite planlaması, yıllık bir alıştırma değil, bir süregelen disiplindir. Kapsadığımız:
- Aşırı sağlamadan ve yetersiz sağlamadan koridor
- İş yükü ile ölçümün iki boyutu kullanımı
- Her tahminin üç katmanı: eğilim, mevsimsellik, & belirsizlik sınırları
- Tavan testleri (sentetik, gölge, yangın tatbikatı) gerçek kapasiteyi bilmenin tek yolu
- Başlık tamponları & neden israf değildikleri
- Diyagonal ölçeklendirme & ayrılmış/istek üzerine/spot fiyatlandırma kararı
- Bu beceriler bütçe yetkilisinin kazandığı kariyer yolları
İki fikir en çok önemli. Tek noktalarla asla sınırları ile tahmin edin. & üretim bunu yapmazdan önce tavanınızı ölçün. Bu ikisini ileri taşı & geri kalan izler.
Önerilen okuma: Allspaw'ın 'The Art of Capacity Planning' (O'Reilly, 2017 ikinci baskı), Google'ın SRE Kitabı'ndaki ilgili bölümler (sre.google/books/ adresinde ücretsiz), & Brendan Gregg'in alttaki sistemler işi için 'Systems Performance'. Geometri-of companion dersi daha derin gider: Little'ın Yasası alan olarak, kuyruk eğrileri, eğilim yamaçları, & başlık zarflar.