İçeriğe geç

SLO ve Hata Bütçesi — Ne Kadar Bozuk Olmaya İzin Var?

Orta 9 dk Sık karşılaşılır

Önce şunu oku: Yayın Stratejileri — Hatalı Sürüm Kaç Kişiye Dokunur?

30 saniyede özet

Hiçbir sistem her zaman çalışmaz. SLO, servisin ne kadar güvenilir olacağına dair hedeftir; tamamlayıcısı hata bütçesidir. Yüzde 99.9 bir ayda 43.2 dakika kesinti demektir ve her dokuz bu payı on kat küçültür.

Telefon faturan sana her ay belli bir internet kotası verir. Kotanın tamamını kullanmak bir hata değildir; aşmak ise bir karar gerektirir. Bir servisin güvenilirliği de tam olarak böyle yönetilir.

  1. Bayt: Ödeme servisimiz hiç kesilmemeli. Hedefimiz yüzde yüz!

  2. Sen: Veritabanı failover'ı, kart ağının kesintisi, bir hatalı deploy... hepsi sıfır mı olacak?

  3. Bayt: Şey... O zaman hedefimiz ne olmalı?

  4. Bayt: Kullanıcının fark etmeyeceği kadar bozukluğa izin veren bir hedef. Hesaplayalım.

Ölçmek ve hedeflemek

SLIService level indicator: servisin ölçülen güvenilirlik sayısı. Örneğin başarılı isteklerin toplam isteğe oranı ya da belli bir süreden hızlı dönenlerin oranı.Sözlükte gör → ölçtüğün şeydir: başarılı isteklerin oranı ya da belli bir süreden hızlı dönen isteklerin oranı. SLOService level objective: bir SLI'ya konan hedef, örneğin 30 günde yüzde 99.9 başarılı istek. Müşteriye verilen SLA'dan sıkı tutulur.Sözlükte gör → o ölçüye koyduğun hedeftir: “ayın yüzde 99.9’unda başarılı”.

Hedefin tamamlayıcısı error budgetSLO'nun dışında kalan, servisin bozuk olabileceği pay. Kaldıkça risk alınır; bitince yeni özellik yerine güvenilirlik öne geçer.Sözlükte gör →dir. Yüzde 99.9 hedefi, geri kalan yüzde 0.1’in bozuk olmasına izin verir.

Kafam karıştı, daha basit anlat

SLI ölçülen sayı, SLO hedef, hata bütçesi de hedefin dışında kalan, bozuk olmaya izin verilen pay.

Hızlı kontrolBaşlangıç

SLI ile SLO arasındaki fark nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Hata bütçesi nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Bütçe ne kadar?

Hedef yüzde 99.9 ve ay 30 gün. Bu ayda bir veritabanı failover'ı 10 dakika, hatalı bir deploy 15 dakika, kart ağı kesintisi 20 dakika sürdü. Bütçe yetti mi? Cevabı göster

Yetmedi. Otuz günde 43 200 dakika var; yüzde 0.1’i 43.2 dakika eder. Üç olay toplam 45 dakika sürdü.

Hedef bir kota verir; her kesinti ondan yer.
Adım adım oku
  1. Yüzde 99.9 hedefi ayda 43.2 dakikalık bir kota verir.
  2. Her kesinti kotadan yer: failover, hatalı deploy, dış bağımlılık.
  3. Kota bitince önce onarım gelir, yeni özellik bekler.
  4. Bir dokuz daha eklemek kotayı on kat küçültür.

Yüzde 99 bir ayda 432 dakika, yüzde 99.99 ise 4.32 dakika demektir. Her ek dokuz bütçeyi on kat küçültür ve onu tutturmanın bedeli büyür.

Bu yüzden hedef “olabildiğince yüksek” değil, kullanıcının gerçekten ihtiyaç duyduğu kadardır. Kullanıcının fark etmediği güvenilirlik, harcanmış emektir.

Kafam karıştı, daha basit anlat

Yüzde 99.9 ayda 43.2 dakika. Bir dokuz daha 4.32 dakika. Hedefi kullanıcının ihtiyacına göre seç.

Hızlı kontrolOrta

Otuz günlük bir ayda yüzde 99.9 SLO kaç dakika kesintiye izin verir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Neden her servis için yüzde 99.99 hedeflemek iyi bir fikir değildir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Bütçe bir karar aracıdır

Bütçe kalmışsa ekip risk alabilir: yeni özellik çıkarır, deney yapar. Bütçe bitmişse yeni özellik deploy’ları durur ve ekip güvenilirliğe döner.

Bu kural, “hız mı, güvenilirlik mi” tartışmasını bir sayıya bağlar. Deploy riskini canary gibi bir yolla küçültmek, bütçeyi korumanın çoğu zaman en ucuz yoludur.

Kafam karıştı, daha basit anlat

Bütçe varsa risk al, bittiyse onar. Tartışmayı sayı yönetir.

Hızlı kontrolOrta

Hata bütçesi bittiğinde yaygın politika nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Kendin gör

Bir ayın hata bütçesi

Tohum 890893

kalan: %100 (43.2 dakikadan)

Oynat ya da adımla: her adım ayın bir olayı.

Hız
Adım 0

Şu an ne oldu?

%99.9 → ayda 43.2 dakika

SLO'nun tamamlayıcısı hata bütçesidir: ayın bu kadarında servis bozuk olabilir.

Görevler0/3

  • %99.9 hedefiyle bütçeyi aşaçık

    İpucu

    Varsayılan ayarlar yeter.

  • Aynı ayı %99.9 hedefinin içinde bitiraçık

    İpucu

    Hangi olayın maliyetini küçültebilirsin?

  • Daha ilk olayda bütçesi biten bir hedef seçaçık

    İpucu

    Bir dokuz daha ekle.

Olay günlüğü (0)

Henüz olay yok. Oynat veya adımla.

  1. Varsayılanla oynat. Yüzde 99.9 hedefinde ay, bütçeyi 1.8 dakika aştı.
  2. Deploy’ları canary ile yap. Hatalı deploy 0.75 dakikaya indi; ay bütçe içinde bitti.
  3. Hedefi yüzde 99.99 yap. Bütçe daha ilk olayda bitti.
  4. Hedefi yüzde 99 yap. Aynı ay, bütçenin yalnızca onda birine yakın.
Hızlı kontrolOrta

Bir ayda hatalı deploy'lar bütçenin çoğunu yiyor. En ucuz iyileştirme hangisi?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Tuzaklar

Sunucuyu ölçmek, kullanıcıyı değil. CPU yüzde 40 ve pod’lar ayakta, ama havalelerin yarısı başarısızsa kullanıcı için servis bozuktur. SLI, kullanıcının gördüğünü ölçmeli.

Ortalama gecikme. Ortalama 200 ms iken her yüz istekten biri 8 saniye sürebilir. Gecikme hedefi p95 ya da p99 üzerinden konur.

Bağımlılığından yüksek hedef. Kart ağı yüzde 99.9 ise, ona her istekte bağımlı bir servis daha yüksek bir hedefi tutturamaz.

Kafam karıştı, daha basit anlat

Kullanıcının gördüğünü ölç, ortalamaya değil yüzdeliğe bak, bağımlılığından yüksek söz verme.

Hızlı kontrolOrta

Pod'lar ayakta ve CPU düşük, ama havalelerin yarısı başarısız. Hangi SLI bunu yakalar?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Aşağıdaki örnek bir bankanın ödeme API’sinden: SLI’yi ölçen metrikler, SLO hedefi ve bütçe bitince deploy’u durduran bir kapı.

Derinleş · Ödeme API'si: SLI ölçümü, SLO hedefi ve bütçe kapısı 3 dosya · ~33 satır · ilk okumada atlayabilirsin
Proje dosyaları

src/main/java/com/bank/payments/metrics/ TransferMetrics.java Metrik: her havale isteği sonuç etiketiyle sayılıyor; SLI bu sayılardan hesaplanıyor.

src/main/java/com/bank/payments/metrics/TransferMetrics.java
@Component
class TransferMetrics {
private final MeterRegistry registry;
TransferMetrics(MeterRegistry registry) {
this.registry = registry;
}
// SLI = good / total over the window. "good" means the customer got an answer:
// a business rejection (insufficient funds) is good, a 5xx or a timeout is not.
void record(TransferOutcome outcome) {
registry.counter("transfers.requests", "result", outcome.isServiceFailure() ? "bad" : "good").increment();
}
}

slo/ payments-api.yaml Hedef dosyası: SLO, pencere ve bütçe politikası tek yerde, kod incelemesinden geçerek değişiyor.

slo/payments-api.yaml
service: payments-api
sli: transfers.requests{result="good"} / transfers.requests
objective: 99.9 # percent of requests
window: 30d # 43 200 minutes -> 43.2 minutes of budget
policy:
budget_exhausted: freeze-feature-deploys # fixes and rollbacks still ship
owner: payments-team

tools/budget/ BudgetGate.java Bütçe kapısı: CI'da, bütçe bittiyse yeni özellik deploy'u reddediliyor; düzeltme deploy'u geçiyor.

tools/budget/BudgetGate.java
// Runs in CI before a deploy. A feature release waits while the budget is
// spent; a fix or a rollback is always allowed.
record BudgetGate(double objective) {
boolean allows(Release release, double goodRatio) {
if (release.isFixOrRollback()) return true;
double budget = 1 - objective / 100;
double spent = 1 - goodRatio;
return spent < budget;
}
}

Kendini sına

Şimşek turu1/4

Yüzde 99.9 SLO, otuz günlük bir ayda yaklaşık 43 dakika kesintiye izin verir.

Soru 1/3İleri

Ortalama gecikme 200 ms ve hedefi tutuyor. Neden yine de kullanıcılar şikâyetçi olabilir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Aklında kalacak üç şey

  1. 1 SLI ölçülen şeydir (başarılı istek oranı gibi), SLO o ölçüye konan hedeftir. Hedefin tamamlayıcısı hata bütçesidir: servisin bozuk olabileceği pay.
  2. 2 Otuz günlük bir ayda yüzde 99.9, 43.2 dakika kesinti demektir. Her ek dokuz bütçeyi on kat küçültür; hedef, kullanıcının gerçekten ihtiyacı kadar olmalıdır.
  3. 3 Bütçe kalmışsa risk alınabilir; bitmişse ekip yeni özellik yerine güvenilirliğe döner. Deploy riskini küçültmek, bütçeyi korumanın en ucuz yoludur.
Sonraki kapı Hiçbir isteği reddetmiyorsun, hepsini kuyruğa alıyorsun. Neden yine de herkes şikâyet ediyor? Backpressure ve Yük Atma — Kuyruk Dolarsa Ne Olur? · 9 dk

4 kart sonraki derste seni bekliyor

0/4 kart bu dersten toplandı