도입

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도 없고 기술지원이 잘 되고 있지 않아서, 제 능력상 배제하였습니다. 

3. JMeter (http://jmeter.apache.org/): 1998 년 부터 시작된 프로젝트로서 오랫동안 기능 강화를 지속해오고 있는 Java 기반의 부하 테스트 툴 입니다. HTTP 뿐만 아니라 다양한 프로토콜을 지원하며, 많은 기능을 가진 GUI 를 제공 합니다. 

모니터링 도구

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 및 인스턴스 유형별로 데이터를 집계할 수 있습니다.
Auto Scaling 또는 Elastic Load Balancing을 사용할 경우 기본 모니터링을 선택하든, 세부 모니터링을 선택하든 관계없이 Amazon CloudWatch에서는 Auto Scaling 그룹 및 Elastic Load Balancer에서 집계한 Amazon EC2 인스턴스 지표도 제공합니다. 모니터링 데이터는 AWS 리소스가 종료된 경우에도 2주 동안 보관됩니다. 따라서 관심 있는 이전 이벤트의 지표를 빠르게 다시 살펴볼 수 있습니다. 기본 모니터링은 모든 Amazon EC2 인스턴스에 대해 자동으로 활성화되어 있으므로 AWS Management Console의 Amazon EC2 탭 또는 Amazon CloudWatch 탭을 통하거나 Amazon CloudWatch API를 사용하여 이러한 지표에 액세스할 수 있습니다.

프로 파일링 도구



테스트 단계

load-test-image001

aws에서는 위와 같은 그림의 부하 테스트 과정을 선호 합니다. 과정은 다음과 같습니다.

  1. 최초 ‘WEB’ 을 출력하는 웹 페이지를 대상으로 동시 연결성에 대한 테스트 수행 → 결과 평가→최적화 진행 (Client →Web Server)
  2. 웹 서버를 통해 애플리케이션 서버에서 넘겨 받은 ‘APPLICATION’ 을 출력하는 웹 페이지를 대상으로 동시 연결성에 대한 테스트 수행→ 결과 평가 → 최적화 진행 (Client →Web Server → App Server – w/o Logic)
  3. 데이터베이스에서 최소한의 쿼리 결과를 전달 받아 출력하는 웹 페이지를 대상으로 동시 연결성에 대한 테스트 수행 →결과 평가 → 최적화 진행
    (Client →Web Server → App Server – w/o Logic → Database)
  4. 3-tier 스택 전체를 대상으로 애플리케이션 로직이 적용된 페이지에 동시 연결성에 대한 테스트 수행 → 결과 평가 → 최적화 진행
    (Client → Web Server → App Server – with Logic →Database)
  5. 4번을 기반으로 다양한 시나리오를 지정하여 테스트 수행 → (얻고자 하는 지표 기준에 대해서) 결과 평과 → 최적화 진행


위의 단계에 기반하여 테스트를 진행해보도록 하겠습니다

테스트

환경

ec2 t2.micro 환경에서 테스트 하였습니다.


Family
Type
vCPUs 
Memory (GiB)
Instance Storage (GB) 
EBS-Optimized Available 
Network Performance 
IPv6 Support 
       


General purpose
t2.micro
Free tier eligible
1
1
EBS only
-
Low to Moderate
Yes



<참고 사이트>

http://bcho.tistory.com/787

https://aws.amazon.com/ko/blogs/korea/how-to-loading-test-based-on-aws/



문제보기

문제보기

사용언어

Node.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// input
var input = [];
// I/O module
require('readline')
.createInterface(process.stdin, {})
.on('line'function(line) {
  input.push(line.trim());
}).on('close'function() {
// start code
    for (var i=1 ; i<input.length ; i++){
        process.stdout.write(decodeURIComponent(input[i])+'\n');
    }
})
 
cs


답안 목록

#문제제출자언어길이결과수행시간

508170

INSERTIONeyesonly80cpp735B정답624ms
508169URI노은철js377B정답92ms


'프로그래밍 실습 > 알고리즘' 카테고리의 다른 글

알고리즘 시작하기  (0) 2017.04.17

사이트

알고스팟에서 알고리즘 문제풀기를 시작하겠습니다!

사용언어

Node.js(v4.2.6)

답안 제출 방식

1
2
3
4
5
6
7
8
9
var input = [];
require('readline')
.createInterface(process.stdin, {})
.on('line'function(line) {
  input.push(line.trim());
}).on('close'function() {
  for (var i = 0; i < input.length; i++)
      console.log('Hello, ' + input[i] + '!');
});
cs


'프로그래밍 실습 > 알고리즘' 카테고리의 다른 글

URL Decode  (0) 2017.04.17

+ Recent posts