[Daily morning study] Chaos Engineering ๊ฐœ๋…๊ณผ Netflix Chaos Monkey

#daily morning study

Image


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 ๋ฌธํ™”๋‹ค.

ํ•ต์‹ฌ์€ ์‹คํ—˜ โ†’ ๊ด€์ฐฐ โ†’ ๊ฐœ์„ ์˜ ์‚ฌ์ดํด์„ ์ง€์†์ ์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‹จ์ˆœํžˆ ์„œ๋ฒ„๋ฅผ ๋„๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์‹œ์Šคํ…œ์ด ์–ด๋–ค ์กฐ๊ฑด์—์„œ ๋ฌด๋„ˆ์ง€๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๊ณ , ๊ทธ ์•ฝ์ ์„ ์ œ๊ฑฐํ•ด ๋‚˜๊ฐ€๋Š” ๊ณผ์ •์ด๋‹ค.