HTTP Throughput (wrk) & Cold Start 성능 비교 + Flex Time-Series 분석
2026년 1월 | 서울 리전 (ap-northeast-2) | 51개 인스턴스 타입
데이터 소스: results/springboot + results/springboot-flex
| 애플리케이션 | Spring PetClinic 4.0.0 (GitHub) |
| Spring Boot | 4.0.1 |
| Java | OpenJDK 21.0.9 |
| JVM 옵션 | -XX:MaxRAMPercentage=60.0 -XX:+UseG1GC |
| 플랫폼 | Amazon EKS 1.34 |
| 노드 프로비저닝 | Karpenter 1.5.0 |
| 노드 격리 | podAntiAffinity (단일 노드 보장) |
| wrk 버전 | 4.2.0 (epoll) |
| 테스트 1 | 50 conn, 60초 (Light Load) |
| 테스트 2 | 100 conn, 60초 (Normal Load) |
| 테스트 3 | 200 conn, 30초 (High Load) |
| 반복 횟수 | 5회 |
| 인스턴스 | 51종 (xlarge, 4 vCPU) |
podAffinity를 사용하여 wrk 클라이언트가 서버와 동일한 Zone에 스케줄링5세대: Intel + AMD | 6~8세대: Intel + Graviton
| 인스턴스 | 50 conn | 100 conn | 200 conn | P99 Latency | Cold Start |
|---|---|---|---|---|---|
| c7i-flex.xlarge | 87,512 | 94,639 | 101,658 | 4.59ms | 5.08초 |
| m7i-flex.xlarge | 79,660 | 88,417 | 97,607 | 5.02ms | 5.35초 |
| c8i-flex.xlarge | 61,541 | 80,121 | 91,741 | 4.76ms | 4.51초 |
| r8i-flex.xlarge | 62,212 | 80,328 | 91,191 | 4.72ms | 4.69초 |
단발성 벤치마크(wrk 30-60초)는 burst 성능을 측정합니다. 실제 프로덕션 워크로드는 12분, 1시간, 24시간 이상 지속됩니다. 이 테스트는 지속적인 부하 상황에서의 실제 성능을 측정합니다.
results/springboot-flex/timeseries-all.csv (5 runs × 60 points per run)
| 인스턴스 | 평균 Throughput | 최소값 | 최대값 | 표준편차 | 변동계수(CV) | 패턴 |
|---|---|---|---|---|---|---|
| c7i-flex.xlarge 7세대 Flex | 92,551 | 53,507 | 107,657 | 8,198 | 8.9% | Burst |
| c8i-flex.xlarge 8세대 Flex | 84,409 | 70,069 | 93,348 | 6,911 | 8.2% | Moderate |
| m7i-flex.xlarge 7세대 Flex | 71,188 | 60,396 | 78,627 | 3,303 | 4.6% | Steady |
| r8i-flex.xlarge 8세대 Flex | 84,270 | 66,486 | 92,189 | 6,811 | 8.1% | Moderate |
| c8i.xlarge 8세대 Standard | 80,526 | 70,121 | 87,515 | 5,098 | 6.3% | Steady |
| c8g.xlarge Graviton4 | 64,393 | 59,737 | 68,495 | 2,432 | 3.8% | Most Stable |
c7i-flex: 평균 92,551 req/sec, 피크 107K
c8i-flex: 평균 84,409 req/sec, 피크 93K
차이: 7세대가 약 9% 더 높은 평균 Throughput
c7i-flex: CV 8.9% - 넓은 변동폭 (Burst 패턴)
c8i-flex: CV 8.2% - 상대적으로 안정적
m7i-flex: CV 4.6% - 가장 안정적인 성능
c8i.xlarge (Standard): 80,526 req/sec, CV 6.3%
c8i-flex.xlarge: 84,409 req/sec, CV 8.2%
결론: Flex가 ~5% 높지만 Standard가 더 안정적
평균 Throughput: 64,393 req/sec
CV%: 3.8% - 가장 안정적인 성능
특징: 낮은 throughput이지만 가장 예측 가능
c7i-flex: Higher burst ceiling - 피크 107K+ req/sec, 더 넓은 변동폭 (CV 8.8%)
c8i-flex: More conservative burst - 피크 93K, steadier at 84K (CV 8.2%)
c8i Standard: No burst - stable at 80K with lowest CV (6.3%)
c8g Graviton4: Lowest throughput (64K) but most stable (CV 3.8%)
권장: Burst-tolerant workloads는 c7i-flex, 안정성 중시는 c8i 또는 c8g 선택
| 최대 Throughput 필요 | c7i-flex.xlarge - 평균 92.5K req/sec, 피크 107K |
| 일관된 성능 (SLA) | c8g.xlarge - CV 3.8% 가장 안정 또는 m7i-flex CV 4.6% |
| 균형 (Throughput + 안정성) | c8i.xlarge - 80.5K req/sec, CV 6.3%로 안정적 |
| Auto-scaling 환경 | c8i-flex/r8i-flex - CV 8%대로 예측 가능한 성능 |
| 비용 효율 (Graviton) | c8g.xlarge - 낮은 throughput이지만 최고 안정성 + 저렴한 가격 |
c8i.xlarge(Intel 8세대)와 c8g.xlarge(Graviton4)를 동일 조건(600초 × 5회)으로 테스트하여 Flex 인스턴스와 비교합니다.
| 인스턴스 | 평균 | 최소값 | 최대값 | CV% | 특징 |
|---|---|---|---|---|---|
| c8i.xlarge Intel 8세대 | 80,526 | 70,121 | 87,515 | 6.3% | Steady pattern, Burst 없이 안정적 |
| c8g.xlarge Graviton4 | 64,393 | 59,737 | 68,495 | 3.8% | 가장 안정적, 낮은 throughput |
시간당 비용 대비 성능 분석 - HTTP 처리량 및 Cold Start 효율
| 인스턴스 ↕ | 아키텍처 | 세대 | 50 conn ↕ | 100 conn ↕ | 200 conn ↕ | P50 ↕ | P99 ↕ | Cold Start ↕ |
|---|