WebSocket Auto Scaling.md - 100-hours-a-week/KTB4-17th-wiki GitHub Wiki
Task ์คํ: 0.5 vCPU / 1 GiB
WebSocket์ Task๋น 4,000 Connections๋ฅผ ์ด์ ๊ธฐ์ค์ผ๋ก Target Tracking์ ์ ์ฉํ๋ค.
Task๋น ๋์ Connection ์๋ฅผ Primary Metric์ผ๋ก ์ฌ์ฉํ๊ณ , ๋์ผํ Connection ์์์๋ ์ฐ๊ฒฐ๋ณ ์ํ ๋ฐ ์ฒ๋ฆฌ๋์ ๋ฐ๋ผ Memory๊ฐ ๋จผ์ ์ฆ๊ฐํ๋ ์ํฉ์ ๋์ํ๊ธฐ ์ํด Memory 70%๋ฅผ Secondary Metric์ผ๋ก ์ฌ์ฉํ๋ค.
์ฒ๋ฆฌ๋ ๊ธฐ์ค ์์ ํผํฌ Task๋ 4๊ฐ์ด๋ฉฐ, ๊ฐ์ฉ์ฑ์ ์ํด ์ต์ 2๊ฐ์ Task๋ฅผ ์ ์งํ๋ค.
Scale-Out Cooldown์ 60์ด, Scale-In Cooldown์ 300์ด๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
| ํญ๋ชฉ | ์ค์ |
|---|---|
| Primary | 4,000 Connections/Task |
| Secondary | Memory 70% |
| Min Task | 2 |
| ์์ Peak Task | 4 |
| Max Task | 8 |
| Scale-Out Cooldown | 60์ด |
| Scale-In Cooldown | 300์ด |
ECS์์๋ Task๋น WebSocket Connection ์๋ฅผ ๊ธฐ๋ณธ Scaling Metric์ผ๋ก ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก, Connection ์๋ฅผ CloudWatch Custom Metric์ผ๋ก ์์งํ์ฌ Target Tracking์ ์ฌ์ฉํ๋ค.
Task 1๊ฐ์ ๋์ ์ฐ๊ฒฐ ์ฒ๋ฆฌ๋์ ํ์ธํ๊ธฐ ์ํด WebSocket ๋ถํํ ์คํธ๋ฅผ ์งํํ์๋ค.
| Connections | Memory | Memory % | CPU | p95 | p99 |
|---|---|---|---|---|---|
| 1,000 | 336 MiB | 32.8% | 16.8% | 5.9 ms | 8.3 ms |
| 2,000 | 473 MiB | 46.2% | 20.8% | 5.2 ms | 7.4 ms |
| 3,000 | 559 MiB | 54.6% | 24.8% | 5.1 ms | 7.5 ms |
| 4,000 | 709 MiB | 69.2% | 30.3% | 5.2 ms | 7.0 ms |
| 5,000 | 799 MiB | 78.0% | 37.1% | 6.3 ms | 282.3 ms |
| 6,300 | 832 MiB | 81.3% | 38.5% | 6.1 ms | 311.6 ms |
4,000 Connections๊น์ง๋ p99๊ฐ ์์ ์ ์ผ๋ก ์ ์ง๋์์ง๋ง, 5,000 Connections๋ถํฐ p99๊ฐ 282.3ms๋ก ์ฆ๊ฐํ์๋ค.
๋ฐ๋ผ์ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ธ 4,000 Connections๋ฅผ Task 1๊ฐ์ ์ด์ ๊ธฐ์ค์ผ๋ก ์ค์ ํ๋ค.
Memory๋ Connection ์ฆ๊ฐ์ ๋ฐ๋ผ ์ฆ๊ฐํ์ง๋ง Connection ๊ฐ์ ์ ๋์ผํ๊ฒ ๊ฐ์ํ์ง ์์๋ค.
| ์ํ | Connection | Memory |
|---|---|---|
| ํผํฌ ํ ์คํธ ์ข ๋ฃ ํ | 0 | 824 MiB |
| ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์์ ํ | 0 | 164 MiB |
JVM์ด ํ๋ณดํ Heap์ ์ฆ์ OS์ ๋ฐํํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ Connection ์๊ฐ ๊ฐ์ํ๋๋ผ๋ Memory ์ฌ์ฉ๋์ด ํจ๊ป ๊ฐ์ํ๋ค๊ณ ๋ณด์ฅํ๊ธฐ ์ด๋ ต๋ค.
๋ฐ๋ผ์ Memory๋ฅผ ์ฐ๊ฒฐ ๋ถํ๋ฅผ ๋ํ๋ด๋ Primary Metric์ผ๋ก ์ฌ์ฉํ์ง ์๋๋ค.
๋ค๋ง ๋์ผํ Connection ์์์๋ ์ฐ๊ฒฐ๋ณ ์ํ ๋ฐ ์ฒ๋ฆฌ๋์ ๋ฐ๋ผ Memory ์ฌ์ฉ๋์ด ์ฆ๊ฐํ ์ ์์ผ๋ฏ๋ก Memory 70%๋ฅผ Secondary Metric์ผ๋ก ์ฌ์ฉํ๋ค.
4,000 Connections์์ Memory ์ฌ์ฉ๋ฅ ์ด 69.2%, ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ 5,000 Connections์์ 78.0%์๊ธฐ ๋๋ฌธ์ 70%๋ฅผ ์ด๊ธฐ ์ด์๊ฐ์ผ๋ก ์ค์ ํ๋ค.
ํ์ฌ ์์ ๋์ ์ ์์๋ ํ๊ท 2,333๋ช , ํผํฌ 12,598๋ช ์ด๋ค.
ํ๊ท : 2,333 / 4,000 = 0.58 Task
ํผํฌ: 12,598 / 4,000 = 3.15 โ 4 Tasks
์ฒ๋ฆฌ๋๋ง ๊ณ ๋ คํ๋ฉด ํ์์ 1 Task๋ก๋ ์ฒ๋ฆฌ ๊ฐ๋ฅํ์ง๋ง ๊ฐ์ฉ์ฑ์ ์ํด Min Task๋ 2๊ฐ๋ก ์ค์ ํ๋ค.
์์ ํผํฌ์๋ 4๊ฐ์ Task๊ฐ ํ์ํ๋ฉฐ, ํ์ฌ ์๋น์ค์ ์ฑ์ฅ์ ๋ํ ์ฌ์ ๋ฅผ ๋์ด ์์ Peak Task์ 2๋ฐฐ์ธ 8๊ฐ๋ฅผ Max Task๋ก ์ค์ ํ๋ค.
Scale-Out Cooldown์ 60์ด๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
ํธ๋ํฝ ์ฆ๊ฐ ์ ๋น ๋ฅด๊ฒ Capacity๋ฅผ ํ๋ณดํ๋ฉด์ ์ด์ Scale-Out์ ์ํฅ์ด Metric์ ๋ฐ์๋ ์๊ฐ์ ํ๋ณดํ๊ธฐ ์ํ ์ด๊ธฐ๊ฐ์ด๋ฉฐ, ์ค์ Task ์์ฑ ๋ฐ Connection ๋ถ์ฐ ์๊ฐ์ ์ธก์ ํ ์ดํ ์กฐ์ ํ๋ค.
Scale-In์ Target Tracking์ ๊ธฐ๋ณธ ๋์์ ์ฌ์ฉํ๋ค.
WebSocket์ Task๊ฐ ์ ๊ฑฐ๋ ๊ฒฝ์ฐ ๊ธฐ์กด Connection์ด ๋ค๋ฅธ Task๋ก ์๋ ์ด์ ๋์ง ์๊ณ ํด๋ผ์ด์ธํธ์ ์ฌ์ฐ๊ฒฐ์ด ํ์ํ๋ฏ๋ก, ์ฐ๊ฒฐ ์ข ๋ฃ๋ก ์ธํ ์ฌ์ฉ์ ์ํฅ์ ์ค์ด๊ธฐ ์ํด Scale-In์ Scale-Out๋ณด๋ค ๋ณด์์ ์ผ๋ก ์ํํ๋ค.
๋ฐ๋ผ์ Scale-In Cooldown์ 300์ด๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ์ค์ ํ๋ค.