Docker(도커) VM 차이점
- 테스트 사양 및 조건
VM : Ubuntu 14.04
Docker : CoreOS 899.5.0 + Docker 1.9.1
- 공통 사항
테스트 Tool : jmeter (웹 성능 측정 자바기반 오픈 소스), ab(아파치 웹성능 측정 오픈소스), nmon (IBM 오픈소스)
사양 : CPU 4 Core , Memory 4G , Nutanix 동일 호스트(노드)
Nginx 1.9.11 : worker_process 1 , worker_connections 1024 (튜닝 하지 않은 default 값)
호출 페이지 : 홈페이지 xx.html(164KB) (실제 운영 웹 서비스 테스트에서는 다소 차이가 있을수 있음)
조건 : jmeter로 테스트 -> 동시접속자 각 100명, 1000명 / 2초 간격 / 5분 동안 웹서버에 요청(부하 테스트)
(동시접속 10,000명 일때는 -> 20초 내외에서 PC(java)가 heap dump -> Down (heap size 조절해도 동일)
시간 | Ramp-Up (Threads 생성 간격) | 횟수 | Docker | VM | ||||||||||
평균 TPS | PeaK TPS | 요청 수 | 평균Latency | Peak Latency | 오류 수 | 평균 TPS | Peak TPS | 요청 수 | 평균Latency | Peak Latency | 오류 수 | |||
300초 | 100명 / 2초 | 1차 | 1251 | 1718 | 377891 | 46 | 13347 | 0 | 1351 | 1736 | 411579 | 53 | 13165 | 0 |
300초 | 100명 / 2초 | 2차 | 1251 | 1741 | 376743 | 45 | 13178 | 0 | 1343 | 1744 | 408649 | 52 | 13047 | 0 |
평균 | 1251 | 1729.5 | 377317 | 45.5 | 13262.5 | 0 | 1347 | 1740 | 410114 | 52.5 | 13106 | 0 | ||
300초 | 1000명/2초 | 1차 | 1347 | 1887 | 411439 | 364 | 324009 | 0 | 1363 | 1829 | 414039 | 343 | 352593 | 0 |
300초 | 1000명/2초 | 2차 | 1347 | 1942 | 410899 | 378 | 320819 | 0 | 1363 | 1884 | 416899 | 348 | 319828 | 0 |
평균 | 1347 | 1914.5 | 411169 | 371 | 322414 | 0 | 1363 | 1856.5 | 415469 | 345.5 | 336211 | 0 | ||
결과 : TPS (초당 트랜잭션 처리수)는 VM > Docker 보다 조금 높음 Latency (지연율 ms)는 Docker > VM 보다 조금 높음 결론은 5분 동안 지속적으로 동시 커넥션 요청시 Nginx 웹서버의 성능에는 큰 차이는 없어보임 |
- 아래는 순서대로 Docker, VM 위 항목 테스트시 TPS(초당 트랜잭션 처리수 : 클라이언트가 웹서버에 요청시 응답을 받을때까지의 1 cycle) 추이
*Docker 기반 : 1000명 5분동안 2초간격으로 지속적으로 테스트시 TPS 그래프
*VM 기반 : 1000명 5분동안 2초간격으로 지속적으로 테스트시 TPS 그래프
2. 1번 테스트시 서버 성능 측정 (CPU는 VM 측정)
시간 | Ramp-Up | 횟수 | Docker | VM | ||||||
CPU Peak | Memory | Network eth0 | I/O Latency | CPU Peak | Memory | Network eth0 | Disk I/O Latency | |||
300초 | 100명 / 2초 | 1차 | 12.96 | 변화미미 | 81M | 9.16 | 5.8 | 변화미미 | 78M | 7.7 |
300초 | 100명 / 2초 | 2차 | 13.28 | 변화미미 | 83M | 7.29 | 5.7 | 변화미미 | 79M | 8.5 |
평균 | 13.12 | 변화미미 | 82M | 8.225 | 5.75 | 변화미미 | 78.5M | 8.1 | ||
300초 | 1000명/2초 | 1차 | 20.46 | 변화미미 | 97M | 10.58 | 10.2 | 변화미미 | 97M | 9.12 |
300초 | 1000명/2초 | 2차 | 20.11 | 변화미미 | 98M | 9.96 | 10.8 | 변화미미 | 96M | 7.56 |
평균 | 20.285 | 변화미미 | 97.5M | 10.27 | 10.5 | 변화미미 | 96.5M | 8.34 | ||
결과 : 모든 리소스 사용량은 비슷하나 Docker 일때 CPU 2배 정도 높게 나옴 |
3. ab 성능 측정 툴로 테스트
총 요청수 | 동시 요청 | 횟수 | Docker | VM | ||||
처리시간 | 초당 처리량 | 에러 | 처리시간 | 초당 처리량 | 에러 | |||
10000 | 100 | 2회 | 5.6 | 1778 | 0 | 5.4 | 1844 | 0 |
10000 | 100 | 5.6 | 1771 | 0 | 5.4 | 1843 | 0 | |
10000 | 500 | 2회 | 6.1 | 1624 | 0 | 5.9 | 1681 | 0 |
10000 | 500 | 5.7 | 1751 | 0 | 6 | 1643 | 0 | |
10000 | 1000 | 2회 | 7 | 1426 | 0 | 7.4 | 1346 | 0 |
10000 | 1000 | 6.4 | 1550 | 0 | 8.5 | 1172 | 0 | |
동시 접속 500명까지는 근소한 차이로 Docker < VM 이 처리 성능이 앞서지만, 동시 접속 1000명 이상일때는 Docker가 > VM 일때 보다 성능 수치가 높음. |
– 전체적으로 Docker , VM 에서의 nginx 성능 측정을 동일 조건에서 해보았으나,
비교적 크게 차이가 나는 부분은 없음.
결론 : Docker 컨테이너 기반으로 대용량 웹 서비스 운영시 서버 리소스 성능이나
Nginx 웹서버 성능에 크게 무리는 없을것으로 판단됨.
도커와 VM 의 성능비교를 통하여 차이점을 알아 보았다.
동시접속자수를 계산하여 서버당 Nginx 파라메터, 리소스(cpu,memory등) 튜닝 필요