Otomatik iyileşme ve kendini iyileştirme
(Bölüm: Teknoloji ve Altyapı)
Kısa Özet
Otomatik iyileştirme "Kubernetes büyüsü'değil, bir dizi disiplindir: doğru örnekler ve sınırlar, kontrollü retrays, hatalı örneklerin izolasyonu, SLO otomasyonu ve düğme/bot tarafından runabook eylemleri. Amaç, kartopu tıkanıklığı olmadan MTTR'yi azaltmak ve p95/p99, ödemeleri ve TTW'yi zirvede tutmaktır.
1) Kendini iyileştirme ilkeleri
1. Başarısız-hızlı & izole et: Kötü bölmeleri/örnekleri hızla tanımlayın ve izole edin.
2. Backoff + jitter: herhangi bir retray/scale out - üstel gecikme ve jitter ile.
3. SLO-aware: Hızlı yakma hata bütçesiyle otomasyon etkinleştirilir/geliştirilir.
4. Idempotency: Tekrarlanan işlemler güvenlidir (özellikle ödemeler/kuyruklar).
5. Derinlemesine savunma: örnekler, kotalar, limitler, devre kesici, aykırı çıkarma, oran sınırı, bozulma modu.
2) Kubernetes'te Temel
2. 1 Örnekler: canlılık/hazırlık/başlangıç
StartupProbe, ağır hizmetlerin erken yeniden başlatılmasına karşı koruma sağlar.
ReadinessProbe, trafik için hazır olup olmadığını belirler (sıcak önbellekler/bağlantılar).
livenessProbe asılı süreçleri yeniden başlatır.
yaml readinessProbe:
httpGet: { path: /health/ready, port: 8080 }
periodSeconds: 5 timeoutSeconds: 1 failureThreshold: 3
livenessProbe:
httpGet: { path: /health/live, port: 8080 }
initialDelaySeconds: 20 periodSeconds: 10 failureThreshold: 3
startupProbe:
httpGet: { path: /health/startup, port: 8080 }
periodSeconds: 5 failureThreshold: 30
2. 2 Limitler, PDB ve Öncelikler
İstekler/sınırlar "gürültülü komşuyu" hariç tutar.
PodDisruptionBudget (PDB) tüm bölmelerin aynı anda düşmesini önler.
yaml apiVersion: policy/v1 kind: PodDisruptionBudget spec:
minAvailable: 2 selector: { matchLabels: { app: payments-api } }
Kritik yollar için PriorityClass (ödemeler, ağ geçidi).
2. 3 Yeniden Başlatma ve Dağıtım Stratejisi
'maxUnavailable: 0' kritik hizmetler için; RollingUpdate küçük artışlarla.
PodAntiAffinity kapsülleri düğümlere/bölgelere ayırır.
3) Otomatik ölçekleme ve olay ölçekleme
HPA (CPU/kullanıcı metrikleri)
yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler spec:
minReplicas: 3 maxReplicas: 30 metrics:
- type: Resource resource: { name: cpu, target: { type: Utilization, averageUtilization: 70 } }
- type: Pods pods:
metric:
name: http_requests_per_second target:
type: AverageValue averageValue: "50"
VPA
Arka plan çalışanları/toplu görevler için kullanın; prod-API'de - dikkatlice (yeniden başlatılır).
KEDA (kuyruklar/harici olaylar)
Kafka lag, RabbitMQ, Redis, Prometheus istekleri için tetikleyiciler - iş biriktiğinde tüketicileri artırıyoruz.
4) Ağ savunmaları: devre kesici ve itlaf "kötü"
Elçi/Istio aykırı değer tespiti (идея)
yaml outlierDetection:
consecutive5xx: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50
Devre kesici, bağımlılığı düşürmemek için eşzamanlı istekleri/bağlantıları kısıtlar.
Hız sınırlaması
Oyun sağlayıcılarının giriş çağrılarını/PSP rotalarını sınırlayın, böylece geri çekilme dalgası kazayı artırmaz.
5) Retrai, zaman aşımları ve jitter ile geri çekilme
Kural: önce zaman aşımı, sonra geri çekilme, her zaman titreme ve sınırlı girişimlerle.
Sözde kod:python def backoff(attempt, base=0. 1, cap=2. 0):
import random, math sleep = min(cap, base (2 attempt))
jitter = random. uniform(0, sleep 0. 4)
return sleep + jitter
Ödemeler için - idempotent anahtarlar + veri tekilleştirme.
Kuyruklar için - ölü mektup ve ertelenmiş yeniden denemeler.
6) Kuyruklarda/akışta kendi kendini iyileştirme
DLQ + büyüme uyarıları; İzole yeniden işleme.
Kontrol gecikmesi: otomatik ölçekli tüketiciler (KEDA), üreticilere geri basınç.
Tam olarak bir kez/en az bir kez - bilinçli olarak seçilmiş; Operasyonlar idempotent.
7) Nakit ve ısınma
Güvenli sakatlık/geri dönüş için sürüm anahtarları ('v2:').
DB/PSP'ye sıcak bağlantı havuzları; Değiştirmeden önce ısınma (mavi-yeşil/kanarya).
"Soğuk" veritabanı isabetlerini azaltmak için bayat-while-revalidate.
8) SLO ile otomatik iyileştirme (sinyal eylemleri)
burn-rate/TTW/p95 uyarıları güvenli otomatik eylemlerle ilişkilendiririz:- Kanarya/geri dönüş при hızlı yanmayı durdurun.
- 'Queue _ lag _ seconds' büyümesiyle işçilerin ölçeklendirilmesi.
- Degrade modunu etkinleştirme (basitleştirilmiş UX, ağır özellikleri devre dışı bırakma).
- Zaman aşımları arttığında PSP rotası değiştiriliyor.
- Özellik-bayrak kill-switch etkinleştirin.
yaml alert: WithdrawalsQueueLag labels: { action: "scale_workers", target: "withdrawals-consumers", by: "+5" }
9) Bozulma modu (zarif bozulma)
UI'yi basitleştirin (daha az istek), "pahalı" widget'ları kapatın.
Daha fazla önbelleğe alma, daha az fan çıkışı/toplama.
LLM/öneriler için - bağlamın/modelin boyutunu küçültün, "hızlı yol'u etkinleştirin.
10) Otomatik düzeltmelere GitOps yaklaşımı
Tüm otomatik iyileştirme politikaları ve parametreleri (zaman aşımları, eşikler) Git'tedir.
Herhangi bir otomatik eylem Grafana'da bir ek açıklama ve değişiklik günlüğünde bir giriş oluşturur.
Kanarya politikaları ve SLO kapıları da koddur.
11) Kaos mühendisliği: iyileşmenin işe yaradığını kontrol etmek
Arıza enjeksiyonları: ağ gecikmeleri, düşen ocaklar, PSP emülatör arızası, kuyruk gecikmesi.
Oyun günü senaryoları: MTTR'yi, otomatik eylemlerin kalitesini, eserlerin varlığını ölçüyoruz.
Sonuçlar - çalışma kitaplarının, eşiklerin, phicheflags'ın güncellenmesi.
12) Otomatik iyileşme için gözlemlenebilirlik
Örnekler: P95 metrikten piste hızlı bir sıçrama.
'trace _ id've' retry ',' trake ',' degrade _ mode = true 'alanlarını içeren günlükler.
Karşılaştırma panolarını (kanarya vs kararlı), SLO kartını serbest bırakın.
Otomatik eylemlerin denetimi: kim/ne/ne zaman, kaynak metrikler, sonuç.
13) Güvenlik ve uyumluluk
Otomatik iyileştirme günlüklerinde/metriklerinde sır yok.
Ödeme faaliyetleri için - çift onay/rol.
Geo/PII - bir feilover ile "yanlış" bölgeye trafik almayın.
14) Pratik şablonlar
Istio DestinationRule - bağlantı havuzu ve aykırı
yaml trafficPolicy:
connectionPool:
http: { http1MaxPendingRequests: 1000, maxRequestsPerConnection: 100 }
outlierDetection:
consecutive5xx: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50
Flagger - otomatik flush/rollback ile kanarya
yaml analysis:
interval: 1m threshold: 5 metrics:
- name: request-success-rate thresholdRange: { min: 99 }
- name: request-duration thresholdRange: { max: 300 }
webhooks:
- name: smoke url: http://tester/smoke
KEDA ScaledObject - Kafka lag
yaml triggers:
- type: kafka metadata:
topic: withdrawals bootstrapServers: broker:9092 consumerGroup: w-consumers lagThreshold: "5000"
15) Uygulama kontrol listesi
1. Startup/readiness/liveness ve health uç noktaları yapılandırılmıştır.
2. Sınırlamalar/kaynak istekleri + PDB/anti-afinite.
3. API'ler ve işçiler için HPA/KEDA; lag/throwput metrics.
4. Devre kesici, aykırı madde çıkarma, geçit/ağ içinde hız sınırı.
5. Backoff + jitter ile Retrai, ödeme işlemlerinin idempotency.
6. Sürüm önbellekleri ve degrade modu.
7. SLO kapıları - otomatik eylemler (geri alma/ölçekleme/yeniden yönlendirme/kill-switch).
8. GitOps-policy code + audit actions, release annotations.
9. Temel senaryolarda kaos testleri ve oyun günü.
10. MTTR/Uyarı Kalitesi panoları ve otomatik iyileştirme raporları.
16) Anti-desenler
Liveness zaman bağımlılığı nedeniyle süreci "çiviler" - çırpma.
Zaman aşımı olmadan Retrai/jitter - istek fırtınası.
IO'ya bağlı servislerle CPU tarafından HPA - "hiçbir yerde".
Geri alma sırasında sürümsüz paylaşılan önbellek - veri bozulması.
Denetim/Runbook URL'si olmadan otomatik eylemler.
DLQ/lag metrikleri yok - sessiz borç birikimi.
Otomatik iyileştirme ve "gizleme problemlerini" karıştırmak: otomasyon semptomları iyileştirir, kök ortadan kaldırılmaz - olayların tekrarı.
Özet
Kendi kendini iyileştirme bir mühendislik disiplinidir: yüksek kaliteli numuneler ve sınırlar, yetkin retrays ve izolasyon, SLO sinyalleri üzerinde otomatik eylemler, artı kaos kontrolleri ve denetimleri. Bu kontur, platformu çökmeye karşı dayanıklı hale getirir, MTTR'yi keser ve en sıcak saatlerde bile önemli iGaming metriklerini (p99, ödeme dönüşümü ve TTW) kaydeder.