[Daily morning study] Chaos Engineering ๊ฐ๋ ๊ณผ Netflix Chaos Monkey
#daily morning study
Chaos Engineering์ด๋
Chaos Engineering์ ์์คํ ์ ์ฝ์ ์ ์ฌ์ ์ ๋ฐ๊ฒฌํ๊ธฐ ์ํด ์๋์ ์ผ๋ก ์ฅ์ ๋ฅผ ์ฃผ์ ํ๋ ์คํ ๊ธฐ๋ฒ์ด๋ค. ํต์ฌ ์์ด๋์ด๋ โ์ด์ฐจํผ ์ฅ์ ๋ ๋ฐ์ํ๋ค. ์์ธก ๋ถ๊ฐ๋ฅํ ์ํฉ์์ ๋ฐ์ํ๋ ๊ฒ๋ณด๋ค, ํต์ ๋ ํ๊ฒฝ์์ ๋ฏธ๋ฆฌ ํฐ๋จ๋ฆฌ๋ ๊ฒ ๋ซ๋คโ๋ ๊ฒ์ด๋ค.
Netflix, Amazon, Google ๊ฐ์ ๋๊ท๋ชจ ๋ถ์ฐ ์์คํ ์ ์ด์ํ๋ ๊ธฐ์ ์์ ์์๋์ผ๋ฉฐ, ์ง๊ธ์ DevOps/SRE ์ค๋ฌด์์ ๋๋ฆฌ ์ฐ์ธ๋ค.
ํ์ ๋ฐฐ๊ฒฝ: Netflix์ ํด๋ผ์ฐ๋ ์ด์
Netflix๋ 2008๋ AWS ๋ง์ด๊ทธ๋ ์ด์ ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์์ผ๋ก 3์ผ๊ฐ ์๋น์ค ์ค๋จ์ ๊ฒฝํํ๋ค. ์ดํ โํด๋ผ์ฐ๋๋ ์ธ์ ๋ ์ธ์คํด์ค๊ฐ ์ฃฝ์ ์ ์๋คโ๋ ์ ์ ์๋, ์์คํ ์ด ๊ฐ๋ณ ์ปดํฌ๋ํธ ์ฅ์ ์๋ ์ด์๋จ์ ์ ์์ด์ผ ํ๋ค๋ ์ค๊ณ ์ฒ ํ์ ์๋ฆฝํ๋ค.
2010๋ Netflix๋ ์ด ์ฒ ํ์ ์คํํ๊ธฐ ์ํด Chaos Monkey๋ฅผ ๋ง๋ค์๋ค.
Netflix Chaos Monkey
Chaos Monkey๋ ํ๋ก๋์ ํ๊ฒฝ์์ ๋ฌด์์๋ก ์๋ฒ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ์ข ๋ฃ์ํค๋ ๋๊ตฌ๋ค. ์ด๋ฆ ๊ทธ๋๋ก ์์คํ ์์ ์์ญ์ด๋ฅผ ํ์ด๋๊ณ ์๋ฌด ์๋ฒ๋ ๊บผ๋ฒ๋ฆฌ๋ ๋ฐฉ์์ด๋ค.
๋์ ๋ฐฉ์
[Chaos Monkey]
โ
Auto Scaling Group์์ ๋ฌด์์ EC2 ์ธ์คํด์ค ์ ํ
โ
์ธ์คํด์ค ๊ฐ์ ์ข
๋ฃ (terminate)
โ
์์คํ
์ด ์๋ ๋ณต๊ตฌ๋๋์ง ๊ด์ฐฐ
โ
๋ณต๊ตฌ ์คํจ ์ โ ์๋ ๋ฐ์ โ ๊ฐ์ ์์
ํ์ผ ์ ๋ฌด ์๊ฐ ์ค์๋ง ๋์ํ๋๋ก ์ค์ ํ๋ค. ๊ทธ๋์ผ ์์ง๋์ด๋ค์ด ์ฆ์ ๋์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
Simian Army๋ก ํ์ฅ
Netflix๋ Chaos Monkey ์ดํ ๋ ๋ค์ํ ์คํ ๋๊ตฌ๋ฅผ ๋ง๋ค์ด Simian Army๋ผ๋ ํจํค์ง๋ก ๊ณต๊ฐํ๋ค.
| ๋๊ตฌ | ์ญํ |
|---|---|
| Chaos Monkey | ๋ฌด์์ ์ธ์คํด์ค ์ข ๋ฃ |
| Chaos Gorilla | ๊ฐ์ฉ ์์ญ(AZ) ์ ์ฒด ์ฐจ๋จ |
| Chaos Kong | ๋ฆฌ์ ์ ์ฒด ์ฅ์ ์๋ฎฌ๋ ์ด์ |
| Latency Monkey | ๋คํธ์ํฌ ์ง์ฐ ์ฃผ์ |
| Conformity Monkey | ๋ฒ ์คํธ ํ๋ํฐ์ค ์๋ฐ ์ธ์คํด์ค ํ์ง |
| Doctor Monkey | ์ํ ๋ถ๋ ์ธ์คํด์ค ํ์ง ๋ฐ ์ ๊ฑฐ |
| Janitor Monkey | ๋ฏธ์ฌ์ฉ ๋ฆฌ์์ค ์ ๋ฆฌ |
Chaos Engineering์ 4๋จ๊ณ ํ๋ก์ธ์ค
1. ์ ์ ์ํ(Steady State) ์ ์
๋จผ์ ์์คํ ์ด ์ ์์ ์ผ๋ก ๋์ํ ๋์ ์ํ๋ฅผ ์ธก์ ๊ฐ๋ฅํ ์งํ๋ก ์ ์ํ๋ค.
- ์ด๋น ์์ฒญ ์ฒ๋ฆฌ๋ (RPS): 10,000
- ์๋ฌ์จ: < 0.1%
- P99 ์๋ต ์๊ฐ: < 200ms
- ์๋น์ค ๊ฐ์ฉ์ฑ: 99.99%
2. ๊ฐ์ค ์๋ฆฝ
โ์ด ์ธ์คํด์ค ํ๋๊ฐ ์ฃฝ์ด๋ ์ ์ ์ํ๊ฐ ์ ์ง๋ ๊ฒ์ด๋คโ์ฒ๋ผ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ค์ ์ธ์ด๋ค.
๊ฐ์ค: ๊ฒฐ์ ์๋น์ค ์ธ์คํด์ค ํ๋๋ฅผ ์ข
๋ฃํด๋
์ ์ฒด ํธ๋์ญ์
์ฑ๊ณต๋ฅ ์ 99.9% ์ด์์ ์ ์งํ๋ค.
3. ์คํ ์ค๊ณ ๋ฐ ์คํ
์ฅ์ ๋ฅผ ์ฃผ์ ํ ๋ฒ์, ๋ฐฉ๋ฒ, ๋กค๋ฐฑ ์กฐ๊ฑด์ ๋ฏธ๋ฆฌ ์ ์ํ๋ค.
# ์คํ ์ค์ ์์
experiment:
name: "payment-service-instance-kill"
target: "payment-service"
action: "terminate-instance"
blast_radius: "1 instance"
duration: "10 minutes"
rollback_condition: "error_rate > 5%"
observation_metrics:
- error_rate
- transaction_success_rate
- p99_latency
4. ๊ฒฐ๊ณผ ๋ถ์ ๋ฐ ๊ฐ์
์คํ ํ ์ ์ ์ํ์ ๋น๊ตํด์ ํธ์ฐจ๊ฐ ์๊ฒผ๋ค๋ฉด, ๊ทธ๊ฒ ๋ฐ๋ก ์ฝ์ ์ด๋ค. ํด๋น ์ฝ์ ์ ๊ฐ์ ํ ๋ค ๋ค์ ์คํํ๋ค.
์ฅ์ ์ฃผ์ ์ ํ
Chaos Engineering์์ ์ฃผ์ ํ๋ ์ฅ์ ๋ ํฌ๊ฒ 4๊ฐ์ง๋ก ๋๋๋ค.
1. ์ธํ๋ผ ๋ ๋ฒจ
- ์๋ฒ ์ธ์คํด์ค ๊ฐ์ ์ข
๋ฃ
- ๋์คํฌ ๊ฝ ์ฑ์ฐ๊ธฐ (disk full)
- CPU 100% ์ ์
- ๋ฉ๋ชจ๋ฆฌ ๋์ ์๋ฎฌ๋ ์ด์
2. ๋คํธ์ํฌ ๋ ๋ฒจ
- ํจํท ์์ค (packet loss)
- ๋คํธ์ํฌ ์ง์ฐ ์ถ๊ฐ (latency injection)
- ๋์ญํญ ์ ํ (bandwidth throttling)
- ํน์ ํฌํธ ์ฐจ๋จ
3. ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ
- ์์กดํ๋ ์ธ๋ถ ์๋น์ค ํ์์์
- ํน์ API ๊ฐ์ ์๋ฌ ๋ฐํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋๊ธฐ
- ์บ์ ์๋ฒ ์ฅ์
4. DNS/์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ ๋ ๋ฒจ
- DNS ์๋ต ์ง์ฐ
- ์๋ชป๋ IP ๋ฐํ
- ์๋น์ค ๋ ์ง์คํธ๋ฆฌ ์ฅ์
์ค์ ๋๊ตฌ๋ค
LitmusChaos (CNCF ์คํ์์ค)
Kubernetes ํ๊ฒฝ์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๋ Chaos Engineering ํ๋ซํผ์ด๋ค.
# Pod ์ญ์ ์คํ ์์
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: nginx-chaos
spec:
appinfo:
appns: 'default'
applabel: 'app=nginx'
appkind: 'deployment'
experiments:
- name: pod-delete
spec:
components:
env:
- name: TOTAL_CHAOS_DURATION
value: '30'
- name: CHAOS_INTERVAL
value: '10'
- name: FORCE
value: 'false'
Chaos Mesh
CNCF Sandbox ํ๋ก์ ํธ. Kubernetes ๋ค์ดํฐ๋ธ๋ก ์ค๊ณ๋์๊ณ ์๊ฐ์ ์ธ ๋์๋ณด๋๋ฅผ ์ ๊ณตํ๋ค.
# ๋คํธ์ํฌ ์ง์ฐ ์คํ ์์
apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: network-delay
spec:
action: delay
mode: one
selector:
namespaces:
- default
labelSelectors:
'app': 'payment-service'
delay:
latency: "100ms"
correlation: "25"
jitter: "10ms"
duration: "300s"
Gremlin
์ํฐํ๋ผ์ด์ฆ์ฉ SaaS ํ๋ซํผ. GUI ๊ธฐ๋ฐ์ผ๋ก ์ฝ๊ฒ ์คํ์ ์ค๊ณํ ์ ์๋ค.
Chaos Engineering vs ๊ธฐ์กด ํ ์คํ
| ๊ตฌ๋ถ | ๊ธฐ์กด ํ ์คํ | Chaos Engineering |
|---|---|---|
| ํ๊ฒฝ | ๊ฐ๋ฐ/ํ ์คํธ ํ๊ฒฝ | ํ๋ก๋์ ํ๊ฒฝ |
| ์๋๋ฆฌ์ค | ์์ ๊ฐ๋ฅํ ์ผ์ด์ค | ์์ํ์ง ๋ชปํ ์ฅ์ |
| ๋ชฉ์ | ๋ฒ๊ทธ ๋ฐ๊ฒฌ | ์์คํ ์ฝ์ ๋ฐ๊ฒฌ |
| ํ์ด๋ฐ | ๋ฐฐํฌ ์ | ์ง์์ ์ผ๋ก |
| ๊ฒฐ๊ณผ | Pass/Fail | ๊ฐ์ ์ ๋์ถ |
๊ธฐ์กด ํ ์คํ ์ด โ์ด ๊ธฐ๋ฅ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋๊ฐ?โ๋ฅผ ๊ฒ์ฆํ๋ค๋ฉด, Chaos Engineering์ โ์ด ์์คํ ์ด ์ฅ์ ์ํฉ์์๋ ์ด์๋จ๋๊ฐ?โ๋ฅผ ๊ฒ์ฆํ๋ค.
๊ฒ์๋ฐ์ด(Game Day)
Chaos Engineering์์ Game Day๋ ํ ์ ์ฒด๊ฐ ๋ชจ์ฌ ๋๊ท๋ชจ ์ฅ์ ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๋ ์ด๋ฒคํธ๋ค. ์ค์ ์ฅ์ ์ํฉ์ ์ฌ์ฐํ๋ฉด์ ํ์ ๋์ ์ ์ฐจ, ์ปค๋ฎค๋์ผ์ด์ , ๋ณต๊ตฌ ๋ฅ๋ ฅ์ ์ข ํฉ์ ์ผ๋ก ํ ์คํธํ๋ค.
Game Day ์งํ ์์:
1. ์๋๋ฆฌ์ค ์ ์
- "๊ฒฐ์ ์๋น์ค์ DB ๋์ ์ฅ์ ๋ฐ์"
2. ์ฐธ์ฌ ํ ๊ตฌ์ฑ
- ์คํ ํ (์ฅ์ ์ฃผ์
)
- ๋์ ํ (์จ์ฝ ์์ง๋์ด)
- ๊ด์ฐฐ ํ (๋ฉํธ๋ฆญ ๋ชจ๋ํฐ๋ง)
3. ์คํ ์คํ
- ์คํ ํ์ด ์ฅ์ ์ฃผ์
- ๋์ ํ์ ์ฌ์ ํต์ง ์์ด ๋์
4. ํ๊ณ (Post-mortem)
- ๋ฌด์์ด ์ ๋๋๊ฐ
- ๋ฌด์์ด ์์๊ณผ ๋ฌ๋๋๊ฐ
- ๊ฐ์ ์ฌํญ
๋์ ์ ์ฃผ์์ฌํญ
ํ๋ก๋์ ์์ ์์ํ์ง ๋ง ๊ฒ
์ฒ์์๋ ์คํ ์ด์ง ํ๊ฒฝ์์ ์์ํ๊ณ , ์์คํ ์ ๋ณต์๋ ฅ์ด ์ด๋ ์ ๋ ๊ฒ์ฆ๋ ๋ค ํ๋ก๋์ ์ผ๋ก ํ๋ํ๋ค.
Blast Radius ์ต์ํ
์ฒ์์๋ ์ํฅ ๋ฒ์๋ฅผ ์ข๊ฒ ์ค์ ํ๋ค. ์ ์ฒด ํด๋ฌ์คํฐ๊ฐ ์๋๋ผ ์ธ์คํด์ค ํ๋, ์ฌ์ฉ์์ 1%์ฒ๋ผ ์์ํ๋ค.
๋ช ํํ ๋กค๋ฐฑ ์กฐ๊ฑด
์๋ฌ์จ์ด X%๋ฅผ ๋์ผ๋ฉด ์ฆ์ ์คํ์ ์ค๋จํ๋ ์กฐ๊ฑด์ ๋ฐ๋์ ์ฌ์ ์ ์ ์ํด์ผ ํ๋ค.
๋ชจ๋ํฐ๋ง ์์ด ์คํ ๊ธ์ง
์คํ ์ค ๋ฉํธ๋ฆญ์ ์ค์๊ฐ์ผ๋ก ๋ณผ ์ ์์ด์ผ ํ๋ค. ๋ชจ๋ํฐ๋ง ์ฒด๊ณ๊ฐ ๊ฐ์ถฐ์ง์ง ์์ ์ํ์์๋ ์นด์ค์ค ์คํ์ ์งํํ๋ฉด ์ ๋๋ค.
์ ๋ฆฌ
Chaos Engineering์ โ์ฅ์ ๋ ํผํ๋ ๊ฒ ์๋๋ผ, ๋ค๋ฃจ๋ ๋ฒ์ ์ตํ๋ ๊ฒโ์ด๋ผ๋ ๊ด์ ์ ์ ํ์ด๋ค. Netflix๊ฐ ์ด๋น ์๋ฐฑ๋ง ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉด์๋ ๋์ ๊ฐ์ฉ์ฑ์ ์ ์งํ ์ ์๋ ์ด์ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ด Chaos Engineering ๋ฌธํ๋ค.
ํต์ฌ์ ์คํ โ ๊ด์ฐฐ โ ๊ฐ์ ์ ์ฌ์ดํด์ ์ง์์ ์ผ๋ก ๋ฐ๋ณตํ๋ ๊ฒ์ด๋ค. ๋จ์ํ ์๋ฒ๋ฅผ ๋๋ ๊ฒ ์๋๋ผ, ์์คํ ์ด ์ด๋ค ์กฐ๊ฑด์์ ๋ฌด๋์ง๋์ง๋ฅผ ์ดํดํ๊ณ , ๊ทธ ์ฝ์ ์ ์ ๊ฑฐํด ๋๊ฐ๋ ๊ณผ์ ์ด๋ค.