Backend Auto Scaling.md - 100-hours-a-week/KTB4-17th-wiki GitHub Wiki
Task ์คํ: 1 vCPU / 2 GiB
BE๋ Task๋น 500 RPS๋ฅผ ์ด์ ๊ธฐ์ค์ผ๋ก Target Tracking์ ์ ์ฉํ๋ค.
์ผ๋ฐ์ ์ธ ํธ๋ํฝ ์ฆ๊ฐ๋ ALB RequestCountPerTarget์ผ๋ก ๋์ํ๊ณ ,
๋์ผํ RPS์์๋ ์ฐ์ฐ๋์ด ๋์ ์์ฒญ์ผ๋ก CPU ๋ถํ๊ฐ ์ฆ๊ฐํ๋ ์ํฉ์ ๋์ํ๊ธฐ ์ํด
CPU 60%๋ฅผ Secondary Metric์ผ๋ก ์ฌ์ฉํ๋ค.
์ฒ๋ฆฌ๋ ๊ธฐ์ค ์์ ํผํฌ Task๋ 3๊ฐ์ด๋ฉฐ, ๊ฐ์ฉ์ฑ์ ์ํด ์ต์ 2๊ฐ์ Task๋ฅผ ์ ์งํ๋ค.
Scale-Out์ ํธ๋ํฝ ์ฆ๊ฐ์ ๋น ๋ฅด๊ฒ ๋์ํ๊ธฐ ์ํด 60์ด, Scale-In์ ๋ฐ๋ณต์ ์ธ Task ์ฆ๊ฐ์ ๋ฐฉ์งํ๊ธฐ ์ํด 300์ด์ Cooldown์ ์ด๊ธฐ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
| ํญ๋ชฉ | ์ค์ |
|---|---|
| Primary | 30,000 req/min/Task (500 RPS) |
| Secondary | CPU 60% |
| Min Task | 2 |
| ์์ Peak Task | 3 |
| Max Task | 6 |
| Scale-Out Cooldown | 60์ด |
| Scale-In Cooldown | 300์ด |
Task 1๊ฐ์ ์ ์ ์ฒ๋ฆฌ๋์ ํ์ธํ๊ธฐ ์ํด ์ค์ ์๋น์ค์ READ : WRITE = 3 : 4 ๋น์จ๋ก ๋ถํํ ์คํธ๋ฅผ ์งํํ์๋ค.
| RPS | CPU | p95 | p99 |
|---|---|---|---|
| 200 | 23.6% | 4.1 ms | 48.8 ms |
| 400 | 29.6% | 6.3 ms | 89.7 ms |
| 500 | 42.8% | 2.7 ms | 43.3 ms |
| 600 | 41.6% | 83.7 ms | 185.8 ms |
| 800 | 59.6% | 105.0 ms | 211.6 ms |
500 RPS๊น์ง๋ ์์ ์ ์ธ ์๋ต์๊ฐ์ ์ ์งํ์ง๋ง, 600 RPS๋ถํฐ p95๊ฐ 83.7ms๋ก ์ฆ๊ฐํ์๋ค.
๋ฐ๋ผ์ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ธ 500 RPS๋ฅผ Task 1๊ฐ์ ์ด์ ๊ธฐ์ค์ผ๋ก ์ค์ ํ์๋ค.
500 RPS ร 60์ด = 30,000 req/min/Task
CPU๋ RPS ์ฆ๊ฐ์ ์ผ์ ํ๊ฒ ๋น๋กํ์ง ์๊ณ ๋์ผํ RPS์์๋ ๋ณ๋์ฑ์ด ํฌ๊ฒ ๋ํ๋ฌ๋ค.
| RPS | CPU ํ๊ท | ์ต์ | ์ต๋ | ๋ณ๋๊ณ์ |
|---|---|---|---|---|
| 200 | 23.8% | 16.3% | 29.0% | 14.6% |
| 400 | 30.5% | 24.0% | 37.6% | 13.9% |
| 500 | 45.6% | 26.3% | 97.5% | 50.8% |
| 600 | 43.5% | 25.6% | 63.2% | 29.4% |
| 800 | 53.9% | 30.6% | 72.5% | 23.4% |
๋ฐ๋ผ์ CPU๋ฅผ ์์ฒญ๋์ ๋ํํ๋ Primary Metric์ผ๋ก ์ฌ์ฉํ์ง ์๋๋ค.
๋ค๋ง ๋์ผํ RPS์์๋ ์ฐ์ฐ๋์ด ๋์ ์์ฒญ์ด ํน์ Task์ ์ง์ค๋ ๊ฒฝ์ฐ RPS๊ฐ 500์ ๋๋ฌํ๊ธฐ ์ ์ CPU๊ฐ ๋จผ์ ๋์์ง ์ ์๋ค. ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด CPU 60%๋ฅผ Secondary Metric์ผ๋ก ์ฌ์ฉํ๋ค.
60%๋ RPS ๊ธฐ๋ฐ Scale-Out๋ณด๋ค CPU๊ฐ ๋จผ์ ํฌํ๋๋ ์ํฉ์ ๋์ํ๊ธฐ ์ํ ์ด๊ธฐ ์ด์๊ฐ์ด๋ฉฐ, ์ด์ ๋ฐ์ดํฐ๋ฅผ ํตํด ์ฌ์กฐ์ ํ๋ค.
ํ์ฌ ์์ ํธ๋ํฝ์ ํ๊ท 272 RPS, ํผํฌ 1,470 RPS์ด๋ค.
ํ๊ท : 272 / 500 = 0.54 Task
ํผํฌ: 1,470 / 500 = 2.94 โ 3 Tasks
์ฒ๋ฆฌ๋๋ง ๊ณ ๋ คํ๋ฉด ํ์์ 1 Task๋ก๋ ์ฒ๋ฆฌ ๊ฐ๋ฅํ์ง๋ง, ๊ฐ์ฉ์ฑ์ ์ํด Min Task๋ 2๊ฐ๋ก ์ค์ ํ๋ค.
์์ ํผํฌ์๋ 3๊ฐ์ Task๊ฐ ํ์ํ๋ฉฐ, ํ์ฌ ์๋น์ค๊ฐ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ณ ์๋ ์ ์ ๊ณ ๋ คํ์ฌ ์์ Peak Task์ 2๋ฐฐ์ธ 6๊ฐ๋ฅผ Max Task๋ก ์ค์ ํ๋ค.
Scale-Out Cooldown์ 60์ด๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
ํ์ฌ ์๋น์ค๋ ์๊ฐ์ ์ธ Spike๋ณด๋ค ์ ์๊ฐ์ ๊ฑธ์ณ ํผํฌ๊น์ง ํธ๋ํฝ์ด ์ฆ๊ฐํ๋ ํจํด์ ๊ฐ์ง๋ฉฐ, 500 RPS์์ Scale-Out์ ์์ํ๋ค.
Scale-Out ์ดํ ์ถ๊ฐ๋ Capacity๊ฐ Metric์ ๋ฐ์๋ ์๊ฐ์ ํ๋ณดํ๋ฉด์๋ ํธ๋ํฝ ์ฆ๊ฐ์ ๋น ๋ฅด๊ฒ ๋์ํ ์ ์๋๋ก 60์ด๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ์ฌ์ฉํ๊ณ , ์ค์ Task ์์ฑ ๋ฐ ํธ๋ํฝ ๋ถ์ฐ ์๊ฐ์ ์ธก์ ํ ์ดํ ์กฐ์ ํ๋ค.
Scale-In์ Target Tracking์ ๊ธฐ๋ณธ ๋์์ ์ฌ์ฉํ๋ฉฐ, ์ผ์์ ์ธ ํธ๋ํฝ ๊ฐ์์ ๋ฐ๋ฅธ ๋ฐ๋ณต์ ์ธ Task ์ฆ๊ฐ์ ์ค์ด๊ธฐ ์ํด 300์ด๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ์ค์ ํ๋ค.