ЁЯзп рдзрдбрд╛ 11 тАФ Chaos engineering рдЖрдгрд┐ game days: рдореБрджреНрджрд╛рдо, рдкрдг рдХрд╛рд│рдЬреАрдкреВрд░реНрд╡рдХ рдмрд┐рдШрдбрд╡рд╛
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 11 ┬╖ рдорд╛рдЧреЗ: lesson-10-overload ┬╖ рдкреБрдвреЗ: lesson-12-production-readiness
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбрд╛ 10, рдЕрдзрд┐рдХ рдзрдбреЗ 07тАУ10 рдордзреАрд▓ designs рддрдкрд╛рд╕рдгрд╛рд░рд╛ рдкреНрд░рдпреЛрдЧ. Chaos
experiment рдордзреНрдпреЗ рдПрдХ hypothesis, рдЫреЛрдЯреА blast radius рдЖрдгрд┐ рд▓рд┐рд╣реВрди рдареЗрд╡рд▓реЗрд▓реНрдпрд╛ abort
рдЪреНрдпрд╛ рдЕрдЯреА рдЕрд╕рддрд╛рдд. Game day рдореНрд╣рдгрдЬреЗ рддреНрдпрд╛рдЪреАрдЪ, рдЦреЛрд▓реАрдд рд▓реЛрдХ рдЕрд╕рд▓реЗрд▓реА, рдирд┐рдпреЛрдЬрд┐рдд рдЖрд╡реГрддреНрддреА. sre/design.py рдордзреАрд▓
ChaosExperiment рдЖрдгрд┐ sre/demo.py рдордзреАрд▓ chaos().
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдкрдердХ рдореНрд╣рдгрддреЗ: "рдкреВрд░реНрд╡ рдмрд╛рдЬреВрдЪреА рд╡реАрдЬ рдЧреЗрд▓реА, рддрд░реА рдЙрд░рд▓реЗрд▓реНрдпрд╛ рдмрд╛рдЬреВ рд╕рдЧрд│реЗ рд╡рд░реНрдЧ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛рдд." ЁЯПл рд╣реЗ рдЦрд░реЗ рдЖрд╣реЗ рдХрд╛? рдХреЛрдгрд╛рд▓рд╛рдЪ рдорд╛рд╣реАрдд рдирд╛рд╣реА. рддреНрдпрд╛рдВрдиреА рдХрдзреАрдЪ рдХрд░реВрди рдкрд╛рд╣рд┐рд▓реЗрд▓реЗ рдирд╛рд╣реА.
рдореНрд╣рдгреВрди рддреЗ рдПрдХ test рдард░рд╡рддрд╛рдд. рдкрдг рд╕рдВрдкреВрд░реНрдг рд╢рд╛рд│реЗрд╡рд░ рдирд╛рд╣реА тАФ рдлрдХреНрдд рд╡рд░реНрдЧрд╛рдВрдЪреНрдпрд╛ рдПрдХрд╛ block рд╡рд░, рдореНрд╣рдгрдЬреЗ рджрд╣рд╛рд╡реНрдпрд╛ рднрд╛рдЧрд╛рдЪреНрдпрд╛ рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреАрдВрд╡рд░. рддреЗ рдЖрдзреА рд▓рд┐рд╣реВрди рдареЗрд╡рддрд╛рдд: "рдЬрд╡рд│рдЬрд╡рд│ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдЪрд╛рд▓реВ рд░рд╛рд╣реАрд▓ рдЕрд╢реА рдЖрдордЪреА рдЕрдкреЗрдХреНрд╖рд╛ рдЖрд╣реЗ. 100 рдкреИрдХреА 1 рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡рд░реНрдЧ рдерд╛рдВрдмрд▓реЗ, рддрд░ рдЖрдореНрд╣реА рд▓рдЧреЗрдЪ рд╡реАрдЬ рдкрд░рдд рд╕реБрд░реВ рдХрд░реВ."
рдкрд╣рд┐рд▓реНрдпрд╛ block рдЪреЗ рд╡рд░реНрдЧ рддреАрди рдмрд╛рдЬреВрдВрдордзреНрдпреЗ рдЖрд╣реЗрдд. рддреЗ рдкреВрд░реНрд╡ рдмрд╛рдЬреВрдЪреА рд╡реАрдЬ рдмрдВрдж рдХрд░рддрд╛рдд. рдЙрд░рд▓реЗрд▓реНрдпрд╛ рджреЛрди рдмрд╛рдЬреВ рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреАрдВрдирд╛ рд╕рд╛рдорд╛рд╡реВрди рдШреЗрддрд╛рдд. рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдЪрд╛рд▓реВ рд░рд╛рд╣рддреЛ. тЬЕ рдХрд▓реНрдкрдирд╛ рдмрд░реЛрдмрд░ рд╣реЛрддреА.
рджреБрд╕рд▒реНрдпрд╛ block рдЪреЗ рд╡рд░реНрдЧ рдлрдХреНрдд рджреЛрди рдмрд╛рдЬреВрдВрдордзреНрдпреЗ рдЖрд╣реЗрдд. рддреЗ рдПрдХ рдмрдВрдж рдХрд░рддрд╛рдд. рдЬрд╡рд│рдЬрд╡рд│ рдЕрд░реНрдзреЗ рд╡рд░реНрдЧ рдерд╛рдВрдмрддрд╛рдд! рдПрдХрд╛ рдорд┐рдирд┐рдЯрд╛рдЪреНрдпрд╛ рдЖрдд рдХрддрд░рд┐рдирд╛ рд╡реАрдЬ рдкрд░рдд рд╕реБрд░реВ рдХрд░рддреЗ. рдХрд╛рд╣реА рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреАрдВрдирд╛ рдПрдХ рдорд┐рдирд┐рдЯ рддреНрд░рд╛рд╕ рдЭрд╛рд▓рд╛ тАФ рдкрдг рдлрдХреНрдд рдПрдХрд╛ block рдордзреНрдпреЗ, рдЖрдгрд┐ рдЖрддрд╛ рдкрдердХрд╛рд▓рд╛ рдорд╛рд╣реАрдд рдЖрд╣реЗ рдХреА рджреБрд╕рд▒реНрдпрд╛ block рд▓рд╛ рддрд┐рд╕рд░реА рдмрд╛рдЬреВ рд╣рд╡реА, рдЦрд░реА рд╡реАрдЬ рдЧреЗрд▓реНрдпрд╛рд╡рд░ рд╕рдВрдкреВрд░реНрдг рд╢рд╛рд│реЗрд╕рдореЛрд░ рд╣реЗ рд╢рд┐рдХрдгреНрдпрд╛рдЖрдзреАрдЪ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
h["ЁЯУЭ hypothesis<br/>lose zone B тЖТ success тЙе 99.5%"] --> x["ЁЯТе inject at minute 3<br/>one cell = 10% of users"]
x --> a["cell A: 6 replicas, 3 zones<br/>800 тЙе 700 req/s тЖТ 100%<br/>hypothesis held"]
x --> b["cell B: 4 replicas, 2 zones<br/>400 of 700 req/s тЖТ 57%"]
b --> ab["ЁЯЫС abort (< 99%) at minute 3<br/>fault undone ┬╖ 18,000 failed"]
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрдХреГрддреА + рдПрдХ lab: https://school-edh.pages.dev/sre/lesson-diagrams.html#l11
тЭУ рдХрд╛рдп
- Chaos engineering тАФ "production рдордзреАрд▓ рдЕрд╕реНрдерд┐рд░ рдкрд░рд┐рд╕реНрдерд┐рддреА рд╕рд╣рди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ system рдЪреНрдпрд╛ рдХреНрд╖рдорддреЗрд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд┐рд░реНрдорд╛рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА system рд╡рд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рд╕реНрдд" (principlesofchaos.org). Netflix рдиреЗ Chaos Monkey (2011) рджреНрд╡рд╛рд░реЗ рддреА рд▓реЛрдХрдкреНрд░рд┐рдп рдХреЗрд▓реА, рдЬреЗ рдХрд╛рдорд╛рдЪреНрдпрд╛ рд╡реЗрд│реЗрдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХрдкрдгреЗ instances рдмрдВрдж рдХрд░рддреЗ.
- Steady state тАФ users рдареАрдХ рдЖрд╣реЗрдд рдпрд╛рдЪреЗ рдореЛрдЬрддрд╛ рдпреЗрдгрд╛рд░реЗ рд▓рдХреНрд╖рдг: success rate, p99 latency, рдорд┐рдирд┐рдЯрд╛рд▓рд╛ orders. рдкреНрд░рдпреЛрдЧрд╛рдЪреНрдпрд╛ рдЖрдзреА рдирд┐рд╡рдбрд▓реЗрд▓реЗ.
- Hypothesis тАФ "X рдмрд┐рдШрдбрд▓реЗ рддрд░реА steady state Y рдЪреНрдпрд╛ рдЖрдд рд░рд╛рд╣рддреЗ". рдЗрдереЗ: "zone B рдЧреЗрд▓рд╛ рддрд░реА cell рдЪрд╛ success rate тЙе 99.5% рд░рд╛рд╣рддреЛ". рдкреНрд░рдпреЛрдЧ рддреА рдЦреЛрдЯреА рдард░рд╡реВ рд╢рдХрддреЛ тАФ рддреЛ рдпрд╢рд╕реНрд╡реА рдкреНрд░рдпреЛрдЧрдЪ рдЖрд╣реЗ, рдХрд╛рд░рдг рддреБрдореНрд╣реА рдХрд╛рд╣реАрддрд░реА рд╢рд┐рдХрд▓рд╛рдд.
- Fault injection тАФ рддреБрдореНрд╣реА рдШрдбрд╡рд▓реЗрд▓рд╛ рдмрд┐рдШрд╛рдб: pod рдорд╛рд░рдгреЗ, zone рдЧрдорд╛рд╡рдгреЗ, 300 ms latency рд╡рд╛рдврд╡рдгреЗ, disk рднрд░рдгреЗ, dependency рдЕрдбрд╡рдгреЗ.
- Blast radius тАФ hypothesis рдЪреБрдХрд▓реА рддрд░ рдХрд┐рддреА рдиреБрдХрд╕рд╛рди рд╣реЛрдК рд╢рдХрддреЗ. рд╕рд░реНрд╡рд╛рдд рдЫреЛрдЯреНрдпрд╛рдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░рд╛ (рдПрдХ cell, 1тАУ10% users, test environment), рдЖрдгрд┐ pass рдЭрд╛рд▓реНрдпрд╛рд╡рд░рдЪ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рд╛.
- Abort (stop) рдЪреНрдпрд╛ рдЕрдЯреА тАФ рд▓рд┐рд╣реВрди рдареЗрд╡рд▓реЗрд▓реНрдпрд╛ рдорд░реНрдпрд╛рджрд╛ рдЬреНрдпрд╛ рдкреНрд░рдпреЛрдЧ рд╕рдВрдкрд╡рддрд╛рдд рдЖрдгрд┐ рдмрд┐рдШрд╛рдб рд▓рдЧреЗрдЪ рдЙрд▓рдЯрд╡рддрд╛рдд, рд╢рдХреНрдп рдЕрд╕реЗрд▓ рддрд░ рдЖрдкреЛрдЖрдк. рдЗрдереЗ: 99.0% рдЦрд╛рд▓реА рдЧреЗрд▓реЗрд▓рд╛ рдХреЛрдгрддрд╛рд╣реА minute.
- Game day тАФ рд▓реЛрдХрд╛рдВрд╕рд╣ рдирд┐рдпреЛрдЬрд┐рдд рд╕рд░рд╛рд╡: рдмрд┐рдШрд╛рдб рдШрдбрд╡рд▓рд╛ рдЬрд╛рддреЛ (рдЦрд░реЛрдЦрд░, рдХрд┐рдВрд╡рд╛ рдХрд╛рдЧрджрд╛рд╡рд░ tabletop рдореНрд╣рдгреВрди), on-call рдЖрдгрд┐ IC (рдзрдбрд╛ 08) рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрддрд╛рдд, рдЖрдгрд┐ runbooks рддрдкрд╛рд╕рд▓реЗ рдЬрд╛рддрд╛рдд. рддреЛ рдлрдХреНрдд software рдирд╛рд╣реА, рддрд░ рд▓реЛрдХ рдЖрдгрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдкрд╛рд╕рддреЛ.
- рдЖрд╣рд╛рдд рддрд┐рдереВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░рд╛ тАФ рдЖрдзреА staging рдордзреНрдпреЗ, рдордЧ production рдордзреНрдпреЗ рдЫреЛрдЯреНрдпрд╛ blast radius рдиреЗ рдЖрдгрд┐ рдХрд╛рдорд╛рдЪреНрдпрд╛ рд╡реЗрд│реЗрдд, рд╕рдЧрд│реЗ рддрдпрд╛рд░ рдЕрд╕рддрд╛рдирд╛.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг рдпрд╛ course рдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ design рд╣рд╛ рдПрдХ рджрд╛рд╡рд╛ рдЖрд╣реЗ тАФ "N+1 zones" (рдзрдбрд╛ 07), "failover рдЪрд╛рд▓рддреЛ" (рдзрдбрд╛ 09), "рдЖрдореНрд╣реА sheddable рдЖрдзреА shed рдХрд░рддреЛ" (рдзрдбрд╛ 10) тАФ рдЖрдгрд┐ рди рддрдкрд╛рд╕рд▓реЗрд▓реЗ рджрд╛рд╡реЗ рдкрд╣рд╛рдЯреЗ 3 рд╡рд╛рдЬрддрд╛ рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрддрд╛рдд. рдЦрд░реЗ outages рд╕рд░реНрд╡рд╛рдд рд╡рд╛рдИрдЯ рдХреНрд╖рдг рдЖрдгрд┐ рд╕рдВрдкреВрд░реНрдг blast radius рдирд┐рд╡рдбрддрд╛рдд. рдкреНрд░рдпреЛрдЧ рд╡реЗрд│, рдЖрдХрд╛рд░ рдЖрдгрд┐ рдерд╛рдВрдмрд╡рдгреНрдпрд╛рдЪреЗ рдмрдЯрдг рдирд┐рд╡рдбрддреЛ.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
sre/design.py рдордзреНрдпреЗ ChaosExperiment(replicas_per_zone, zones, per_replica_rps, load_rps, hypothesis=0.995, abort=0.99). run(minutes=10, inject_at=3, fault_minutes=5) рдорд┐рдирд┐рдЯрд╛-рдорд┐рдирд┐рдЯрд╛рдиреЗ рдЪрд╛рд▓рддреЗ: рдмрд┐рдШрд╛рдб рдЪрд╛рд▓реВ рдЕрд╕рддрд╛рдирд╛ рдПрдХрд╛ zone рдЪреЗ replicas рдирд╕рддрд╛рдд;
success = min(1, capacity ├╖ load). рдПрдЦрд╛рджрд╛ minute abort рд░реЗрд╖реЗрдЦрд╛рд▓реА рдЧреЗрд▓рд╛, рддрд░ рдкреБрдврдЪреНрдпрд╛ minute рдкрд╛рд╕реВрди рдмрд┐рдШрд╛рдб
рдЙрд▓рдЯрд╡рд▓рд╛ рдЬрд╛рддреЛ. рддреЗ рдкреНрд░рддреНрдпреЗрдХ minute рдЪреЗ rates, abort рдЪрд╛ minute, рдЕрдпрд╢рд╕реНрд╡реА
requests рдЖрдгрд┐ рдирд┐рдХрд╛рд▓ рдкрд░рдд рджреЗрддреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 sre/demo.py chaos
python3 - <<'EOF'
import sys; sys.path.insert(0, "sre"); from design import ChaosExperiment
for load in (600, 700, 800, 900):
rates, ab, failed, verdict = ChaosExperiment(2, 3, 200, load).run()
print(f"load {load} req/s, 6 replicas in 3 zones тЖТ worst minute {min(rates):.1%} ┬╖ {verdict} ┬╖ aborted at {ab} ┬╖ failed {failed:,}")
rates, ab, failed, verdict = ChaosExperiment(2, 2, 200, 700, abort=0.5).run()
print(f"abort line lowered to 50% тЖТ aborted at {ab} ┬╖ failed {failed:,} (the fault ran all 5 minutes)")
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
chaos рд╣реЗ рдЫрд╛рдкрддреЗ:
6 replicas in 3 zones: minutes 0тАУ9 success 100% 100% 100% 100% 100% 100% 100% 100% 100% 100%
тЖТ hypothesis held ┬╖ no abort ┬╖ 0 failed
4 replicas in 2 zones: minutes 0тАУ9 success 100% 100% 100% 57% 100% 100% 100% 100% 100% 100%
тЖТ hypothesis refuted ┬╖ ABORTED at minute 3, fault undone ┬╖ 18,000 requests failed in the cell
рддреБрдордЪрд╛ snippet рд╣реЗ рдЫрд╛рдкрддреЛ:
load 600 req/s, 6 replicas in 3 zones тЖТ worst minute 100.0% ┬╖ hypothesis held ┬╖ aborted at None ┬╖ failed 0
load 700 req/s, 6 replicas in 3 zones тЖТ worst minute 100.0% ┬╖ hypothesis held ┬╖ aborted at None ┬╖ failed 0
load 800 req/s, 6 replicas in 3 zones тЖТ worst minute 100.0% ┬╖ hypothesis held ┬╖ aborted at None ┬╖ failed 0
load 900 req/s, 6 replicas in 3 zones тЖТ worst minute 88.9% ┬╖ hypothesis refuted ┬╖ aborted at 3 ┬╖ failed 6,000
abort line lowered to 50% тЖТ aborted at None ┬╖ failed 90,000 (the fault ran all 5 minutes)
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рддреЗрдЪ design (3 zones рдордзреНрдпреЗ 6 replicas) 800 req/s рд╡рд░ pass рд╣реЛрддреЗ рдЖрдгрд┐ 900 рд╡рд░ fail: рдкреНрд░рдпреЛрдЧрд╛рдЪрд╛ рдирд┐рдХрд╛рд▓ рдлрдХреНрдд рддреЛ рдЬреНрдпрд╛ load рд╡рд░ рдЪрд╛рд▓рд▓рд╛ рддреНрдпрд╛рд╕рд╛рдареАрдЪ рдЦрд░рд╛ рдЕрд╕рддреЛ тАФ traffic рд╡рд╛рдвреЗрд▓ рддрд╕рд╛ рддреЛ рдкреБрдиреНрд╣рд╛ рдХрд░рд╛. Abort рдЪреНрдпрд╛ рдЕрдЯреАрдиреЗ рдиреБрдХрд╕рд╛рди 90,000 рдЕрдпрд╢рд╕реНрд╡реА requests (5 рдорд┐рдирд┐рдЯреЗ рдЪрд╛рд▓реВ рдареЗрд╡рд▓реЗрд▓рд╛ рдмрд┐рдШрд╛рдб) рд╡рд░реВрди 18,000 (1 рдорд┐рдирд┐рдЯ) рд╡рд░ рдЖрдгрд▓реЗ, рдЖрдгрд┐ blast radius рдиреЗ рддреЗрд╣реА рджрд╣рд╛рдкреИрдХреА рдПрдХрд╛ cell рдкреБрд░рддреЗ рдорд░реНрдпрд╛рджрд┐рдд рдареЗрд╡рд▓реЗ. рд╣реАрдЪ рд╕рдВрдкреВрд░реНрдг рдкрджреНрдзрдд рдЖрд╣реЗ: рд╕реНрдкрд╖реНрдЯ hypothesis, рдЫреЛрдЯреА blast radius, рдЖрдгрд┐ "start" рджрд╛рдмрдгреНрдпрд╛рдЪреНрдпрд╛ рдЖрдзреА рдард░рд╡рд▓реЗрд▓реЗ рдерд╛рдВрдмрд╡рдгреНрдпрд╛рдЪреЗ рдмрдЯрдг.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- "рдЪрд▓рд╛, рдХрд╛рд╣реАрддрд░реА рдорд╛рд░реВрди рдмрдШреВ" тАФ hypothesis рдирд╛рд╣реА, steady state рдирд╛рд╣реА, рдХрд╛рд╣реАрдЪ рд╢рд┐рдХрд╛рдпрд▓рд╛ рдорд┐рд│рдд рдирд╛рд╣реА
- abort рдЪреА рдЕрдЯ рдирд╛рд╣реА, рдХрд┐рдВрд╡рд╛ рдЕрд╢реА рдЕрдЯ рдЬрд┐рдЪреНрдпрд╛рд╡рд░ рдХреЛрдгрд╛рдЪреЗрдЪ рд▓рдХреНрд╖ рдирд╛рд╣реА
- рдкрд╣рд┐рд▓реАрдЪ blast radius рдореНрд╣рдгреВрди рд╕рдВрдкреВрд░реНрдг production
- рдХрд╛рдпрдо рдлрдХреНрдд staging рдордзреНрдпреЗрдЪ рдЪрд╛рд▓рд╡рдгреЗ тАФ staging рдХрдбреЗ production рдЪрд╛ traffic рдХрд┐рдВрд╡рд╛ data рдирд╕рддреЛ
- рдкрд╣рд╛рдЯреЗ 3 рд╡рд╛рдЬрддрд╛ рдХреЛрдгреАрд╣реА рдЖрд╕рдкрд╛рд╕ рдирд╕рддрд╛рдирд╛, рдХрд┐рдВрд╡рд╛ on-call рд▓рд╛ рди рд╕рд╛рдВрдЧрддрд╛ рдЪрд╛рд▓рд╡рдгреЗ
- рдХрдордХреБрд╡рддрдкрдгрд╛ рд╕рд╛рдкрдбреВрдирд╣реА рддреЛ рджреБрд░реБрд╕реНрдд рди рдХрд░рдгреЗ тАФ рд╣рд╛ рд╢реЛрдз рдорд╛рд▓рдХрд╛рд╕рд╣ backlog рдордзреНрдпреЗ рдЬрд╛рдпрд▓рд╛ рд╣рд╡рд╛
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
Kubernetes рд╡рд░ Chaos Mesh тАФ experiment namespace рдордзреАрд▓ timetable рдЪрд╛ рдПрдХ pod рдорд╛рд░рд╛. рдЦрд▒реНрдпрд╛ account рд╡рд░ (рдЦрд░рд╛ cluster, рд╕рд╣рдорддреАрд╕рд╣):
apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata: {name: kill-one-timetable-pod, namespace: chaos-testing}
spec:
action: pod-kill
mode: one
selector:
namespaces: [timetable-cell-1]
labelSelectors: {app: timetable}
AWS Fault Injection Service тАФ experiment template рдордзреНрдпреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ stop conditions рдЕрд╕рддрд╛рдд, CloudWatch alarms рд╢реА рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛, рдореНрд╣рдгреВрди abort рдЖрдкреЛрдЖрдк рд╣реЛрддреЛ:
{
"description": "lose zone B for the timetable cell",
"stopConditions": [{"source": "aws:cloudwatch:alarm",
"value": "arn:aws:cloudwatch:ap-south-1:111122223333:alarm:timetable-success-below-99"}],
"targets": {"cell1": {"resourceType": "aws:ec2:instance", "selectionMode": "ALL",
"resourceTags": {"cell": "1"},
"filters": [{"path": "Placement.AvailabilityZone", "values": ["ap-south-1b"]}]}},
"actions": {"stopZoneB": {"actionId": "aws:ec2:stop-instances", "targets": {"Instances": "cell1"},
"parameters": {"startInstancesAfterDuration": "PT5M"}}},
"roleArn": "arn:aws:iam::111122223333:role/fis-experiments"
}
aws fis start-experiment --experiment-template-id EXT1a2b3c4d5e6f7
LitmusChaos рдЖрдгрд┐ Gremlin рд╣реА рдЗрддрд░ рдиреЗрд╣рдореАрдЪреА tools рдЖрд╣реЗрдд. Game day рд╕рд╛рдареА рдлрдХреНрдд calendar invite, рд▓рд┐рд╣реВрди рдареЗрд╡рд▓реЗрд▓реА hypothesis, abort рдЪрд╛ рдирд┐рдпрдо, рдПрдХ IC рдЖрдгрд┐ рдПрдХ scribe рдПрд╡рдвреЗрдЪ рд▓рд╛рдЧрддреЗ.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: рддреБрдордЪреНрдпрд╛ рдорд╛рдЧрдЪреНрдпрд╛ architecture review рдордзреАрд▓ рдПрдХ design рджрд╛рд╡рд╛ рдирд┐рд╡рдбрд╛ ("рддреЛ zone рдЧреЗрд▓рд╛ рддрд░реА рдЯрд┐рдХрддреЛ"). Hypothesis, steady state, blast radius рдЖрдгрд┐ abort рдЪреА рдЕрдЯ рдПрдХрд╛ рдкрд╛рдирд╛рд╡рд░ рд▓рд┐рд╣рд╛. рддреЗ рдкрд╛рди рдореНрд╣рдгрдЬреЗ рддреБрдордЪрд╛ рдкрд╣рд┐рд▓рд╛ game day.
тПня╕П рдкреБрдвреЗ
рд╢реЗрд╡рдЯрдЪрд╛ рдзрдбрд╛ рдкреНрд░рддреНрдпреЗрдХ рдзрдбрд╛ рдПрдХрд╛ рдЖрдврд╛рд╡реНрдпрд╛рдд рдЖрдгрддреЛ тАФ рдЬреЛ рдкрдердХ рдПрдЦрд╛рджреНрдпрд╛ service рдЪрд╛ pager рдШреЗрдгреНрдпрд╛рдЖрдзреА рддрд┐рдиреЗ рдкрд╛рд░ рдХрд░рд╛рдпрд▓рд╛рдЪ рд╣рд╡рд╛.
git checkout lesson-12-production-readiness