Auto-healing and self-healing
(Section: Technology and Infrastructure)
Brief Summary
Auto-healing is not "Kubernetes magic," but a set of disciplines: correct samples and limits, controlled retrays, isolation of faulty instances, SLO automation and runabook actions by button/bot. The goal is to reduce MTTR without snowballing congestion and keep p95/p99, payments and TTW even at their peak.
1) Self-healing principles
1. Fail-fast & isolate: Quickly identify and isolate bad pods/instances.
2. Backoff + jitter: any retray/scale out - with exponential delay and jitter.
3. SLO-aware: automation is enabled/enhanced with fast-burn error budget.
4. Idempotency: Repeat transactions are secure (especially payments/queues).
5. Defense in depth: samples, quotas, limits, circuit-breaker, outlier-ejection, rate-limit, degradation mode.
2) Basis in Kubernetes
2. 1 Samples: liveness/readiness/startup
startupProbe protects against premature restarts of heavy services.
readinessProbe determines the readiness for traffic (warm caches/connections).
livenessProbe restarts hung processes.
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 Limits, PDB and Priorities
requests/limits exclude "noisy neighbor."
PodDisruptionBudget (PDB) prevents all pods from falling at the same time.
yaml apiVersion: policy/v1 kind: PodDisruptionBudget spec:
minAvailable: 2 selector: { matchLabels: { app: payments-api } }
PriorityClass for critical paths (payments, gateway).
2. 3 Restart and Deploy Strategy
'maxUnavailable: 0'for critical services; rollingUpdate in small increments.
PodAntiAffinity allocates pods to nodes/zones.
3) Autoscaling and event scaling
HPA (CPU/user metrics)
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
Use for background workers/batch tasks; in the prod-API - carefully (restarts).
KEDA (queues/external events)
Triggers for Kafka lag, RabbitMQ, Redis, Prometheus requests - we increase consumers when work accumulates.
4) Network defenses: circuit-breaker and culling "bad"
Envoy/Istio outlier detection (идея)
yaml outlierDetection:
consecutive5xx: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50
Circuit breaker restricts simultaneous requests/connections so as not to drop the dependency.
Rate limiting
Limit the input calls/PSP routes/of game providers so that the wave of retraces does not increase the accident.
5) Retrai, timeouts and backoff with jitter
The rule: first timeout, then retreat, always with jitter and limited attempts.
Pseudocode: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
For payments - idempotent keys + deduplication.
For queues - dead-letter and deferred retries.
6) Self-healing in queues/streaming
DLQ + growth alerts; isolated reprocessing.
Control lag: auto-scale consumers (KEDA), backpressure to producers.
Exactly-once/at-least-once - chosen consciously; operations are idempotent.
7) Cash and warm-up
Version keys ('v2:') for safe disability/rollback.
Warm pools of connections to DB/PSP; warm-up before switching (blue-green/canary).
Stale-while-revalidate to reduce "cold" database hits.
8) Auto-remediation by SLO (signal actions)
We associate burn-rate/TTW/p95 alerts with safe automatic actions:- Stop canary / rollback при fast-burn.
- Scale-out of workers with the growth of 'queue _ lag _ seconds'.
- Enabling degrade-mode (simplified UX, disabling heavy features).
- Switching the PSP route when timeouts spike.
- Activate feature-flag kill-switch.
yaml alert: WithdrawalsQueueLag labels: { action: "scale_workers", target: "withdrawals-consumers", by: "+5" }
9) Degradation mode (graceful degradation)
Simplify UI (fewer requests), turn off "expensive" widgets.
More caching, fewer fan outs/aggregations.
For LLM/recommendations - reduce the size of the context/model, enable "fast path."
10) GitOps approach to auto-fixes
All auto-remediation policies and parameters (timeouts, thresholds) are in Git.
Any automatic action creates an annotation in Grafana and an entry in the change log.
Canary policies and SLO gates are also code.
11) Chaos engineering: checking that healing works
Injections of failures: network delays, falling hearths, PSP emulator failure, queue lag.
Game-day scenarios: we measure MTTR, the quality of auto-actions, the presence of artifacts.
Results → update of runabooks, thresholds, phicheflags.
12) Observability for auto-healing
Exemplars: A quick jump from the p95 metric into the track.
Logs with 'trace _ id' and fields' retry ',' attempt ',' degrade _ mode = true '.
Release compare dashboards (stable vs canary), SLO card.
Audit of auto-actions: who/what/when, source metrics, result.
13) Safety and compliance
No secrets in auto-remediation logs/metrics.
For payment activities - double confirmation/role.
Geo/PII - do not take traffic to the "wrong" region with a feilover.
14) Practical templates
Istio DestinationRule — connection pool & outlier
yaml trafficPolicy:
connectionPool:
http: { http1MaxPendingRequests: 1000, maxRequestsPerConnection: 100 }
outlierDetection:
consecutive5xx: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50
Flagger - canary with auto-flush/rollback
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) Implementation checklist
1. Startup/readiness/liveness and health endpoints are configured.
2. Limits/resource requests + PDB/anti-affinity.
3. HPA/KEDA for APIs and workers; lag/throughput metrics.
4. Circuit-breaker, outlier-ejection, rate-limit in gate/mesh.
5. Retrai with backoff + jitter, idempotency of payment transactions.
6. Version caches and degrade-mode.
7. SLO gates → auto-actions (rollback/scale/reroute/kill-switch).
8. GitOps-policy code + audit actions, release annotations.
9. Chaos tests and game-day on key scenarios.
10. MTTR/Alert Quality dashboards and auto-remediation reports.
16) Anti-patterns
Liveness "nails" the process due to time dependence → flapping.
Retrai without timeouts/jitter → storm of requests.
HPA by CPU with IO-dependent services → "nowhere."
Shared cache without versions during rollbacks → data corruption.
Automatic actions without audit/Runbook URL.
No DLQ/lag metrics → quiet debt accumulation.
Mixing auto-healing and "hiding problems": automation heals symptoms, the root is not eliminated → repetition of incidents.
Summary
Self-healing is an engineering discipline: high-quality samples and limits, competent retrays and isolation, automatic actions on SLO signals, plus chaos checks and audits. This contour makes the platform crash-resistant, cuts MTTR and saves key iGaming metrics - p99, payment conversion and TTW - even during the hottest hours.