도입
SK Tech에서 교육과정을 이수하는 중 Nodejs 서버를 구축하게 되었는데요.
CRUD에 충실한 간단한 서버이지만, 단순 ec2 서버에서 AWS 아키텍처를 적용했을 떄
- 현재 서비스 구성의 제한(limit)이 어떻게 변하고
- 부하의 허용치가 어떻게 변하고
- 병목 지점이 있다면 해소되는지
를 측정하기 위해 서버 부하테스트를 진행하기로 했습니다.
테스트 도구
선택의 기준은 다음과 같습니다.
* 제 능력상 사용할 수 있는지
* 빠르게 사용가능한지
* 모니터링이 되는지
부하 테스트기
1. ApacheBench (http://httpd.apache.org/docs/2.2/en/programs/ab.html): 아파치에서 기본적으로 제공하는 기능으로 HTTP 웹서버의 성능을 측정할 때 자주 사용하는 도구이고, 간단하기 떄문에 사용해보도록 하겠습니다.
2. Goad (https://goad.io/): "AWS Lambda 를 활용하여 부하를 분산 생성하여 테스트를 수행하는 오픈 소스 툴로서 Go 언어로 개발 되었습니다. 실제 AWS 의 이점과 AWS Lambda 의 강력함을 잘 활용한 툴 입니다." 라고 설명이 되어 있지만, 명확한 DOCUMENT도 없고 기술지원이 잘 되고 있지 않아서, 제 능력상 배제하였습니다.
모니터링 도구
1. AWS EC2 상에 서버가 있기 때문에 Elastic Search를 사용할 것입니다
Elastic Search : Amazon Elasticsearch Service를 사용하면 손쉽게 Elasticsearch를 배포, 운영 및 확장하여 로그 분석, 전체 텍스트 검색, 애플리케이션 모니터링 등을 수행할 수 있습니다. Amazon Elasticsearch Service는 Elasticsearch의 간편한 API 및 실시간 기능과 더불어 프로덕션 워크로드에 필요한 가용성, 확장성, 보안성을 제공하는 완전 관리형 서비스입니다.
추가 소프트웨어를 설치할 필요 없이 자동으로 EC2 인스턴스를 모니터링합니다.
- Amazon EC2 인스턴스에 대한 기본 모니터링: 사전 선택한 지표 7개를 5분 간격으로, 그리고 상태 확인 지표 3개를 1분 간격으로 모니터링합니다. 추가 비용은 없습니다.
- Amazon EC2 인스턴스에 대한 세부 모니터링: 기본 모니터링에서 사용 가능한 모든 지표를 1분 간격으로 확인합니다. 추가 비용이 발생합니다. 인스턴스에 대한 세부 모니터링을 활성화하면 Amazon EC2 AMI ID 및 인스턴스 유형별로 데이터를 집계할 수 있습니다.
프로 파일링 도구
테스트 단계
aws에서는 위와 같은 그림의 부하 테스트 과정을 선호 합니다. 과정은 다음과 같습니다.
- 최초 ‘WEB’ 을 출력하는 웹 페이지를 대상으로 동시 연결성에 대한 테스트 수행 → 결과 평가→최적화 진행 (Client →Web Server)
- 웹 서버를 통해 애플리케이션 서버에서 넘겨 받은 ‘APPLICATION’ 을 출력하는 웹 페이지를 대상으로 동시 연결성에 대한 테스트 수행→ 결과 평가 → 최적화 진행 (Client →Web Server → App Server – w/o Logic)
- 데이터베이스에서 최소한의 쿼리 결과를 전달 받아 출력하는 웹 페이지를 대상으로 동시 연결성에 대한 테스트 수행 →결과 평가 → 최적화 진행
(Client →Web Server → App Server – w/o Logic → Database) - 3-tier 스택 전체를 대상으로 애플리케이션 로직이 적용된 페이지에 동시 연결성에 대한 테스트 수행 → 결과 평가 → 최적화 진행
(Client → Web Server → App Server – with Logic →Database) - 4번을 기반으로 다양한 시나리오를 지정하여 테스트 수행 → (얻고자 하는 지표 기준에 대해서) 결과 평과 → 최적화 진행
위의 단계에 기반하여 테스트를 진행해보도록 하겠습니다
테스트
환경
ec2 t2.micro 환경에서 테스트 하였습니다.
<참고 사이트>
https://aws.amazon.com/ko/blogs/korea/how-to-loading-test-based-on-aws/