AWS instance Stress test

Mingtorr·2021년 1월 23일
0
post-thumbnail

✔Stress test


웹서버는 성능이 좋은 편입니다. 따라서 접속이 많더라도 컴퓨터의 부하를 크게 차지하지 않습니다.
하지만 웹서버 위에 자바 혹은 파이썬, 데이터베이스를 설치하게 되면 부하가 급격하게 증가하게 됩니다. 즉, 우리의 리액트와 같은 웹앱들을 서버에서 구동하게 되면 큰 부하를 차지합니다. 부하가 생길 경우 서버의 속도가 떨어지게 되고, 우리는 서버의 확장을 고려하게 됩니다.

서버의 확장성(scalability)에는 2가지 전략이 있습니다. 바로 scale up 과 scale out 입니다.
scale up은 현재의 서버보다 더 좋은 서버를 사용하는 것입니다. 예를들어 EC2의 t2.micro를 사용하고 있었다면 그 보다 높은 t3, t4를 고려하는 것입니다. scale out의 경우는 서버의 성능을 높이지 않고 서버의 갯수를 늘리는 것입니다. 이 두가지 방법은 모두 자본이 필요하게 되므로 결정하기 전에 신중한 검토가 필요합니다. 이 검토를 하기 위해 우리의 서버에 어떤 리소스가 부족한지 확인할 수 있는 방법이 바로 스트레스 테스트 입니다.

준비하기


1. 2개의 인스턴스가 필요합니다.

한개의 인스턴스는 테스트를 진행할 우리의 웹서버입니다. 저는 간단한 react SPA 를 준비했습니다. 다른 인스턴스는 우리의 웹서버에 부하를 가해줄 공격 인스턴스입니다.

만약 저와 같이 react를 사용하신다면 pm2를 사용하여 잠시 npm run start 를 유지하는 방법은 다음과 같습니다.

pm2 start npm -- start

2. 테스트를 진행할 인스턴스에서 top를 입력합니다.

top는 인스턴스의 각 인스턴스의 상황과 프로그램들이 얼마나 리소스를 차지하고 있는지 확인할 수 있는 명령어 입니다.

top

3. 공격을 진행할 인스턴스에 접속하여 apache2-utils를 설치합니다.

sudo apt-get install apache2-utils -y

이제 모든 준비가 끝났습니다.

테스트 진행하기


우리가 사용할 프로그램은 아파치 내부의 ab 프로그램입니다. 다음은 ab의 옵션들입니다.

우리가 주로 사용할 옵션은 requests 와 concurrency입니다.

requests는 웹서버에 몇 번의 접속을 시도할 것인지 정하는 옵션입니다.
concurrency는 동시에 몇 번의 접속을 시도할 것인지 정하는 옵셥입니다.

ab -n 100 -c 1 http://172.31.2.246/ 
ab -n 100 -c 10 http://172.31.2.246/ 

첫번째처럼 입력한다면 requests가 100 인데 concurrency가 1이라면 1명씩 순차적으로 100번 접속하는 상황입니다. 두번째처럼 입력한다면 requests가 100 인데 concurrency가 10 이라면 10명이 동시에 접근하는 상황이 10번 반복되는 것입니다.

주소의 마지막에는 꼭 /가 들어가야 합니다.

결과 분석하기


저는 다음의 코드를 통해 서버를 테스트 해보겠습니다.

ab -n 1000 -c 10 http://ec2-13-124-69-108.ap-northeast-2.compute.amazonaws.com:3000/

위에서 1퍼센트 미만이었던 node가 순간적으로 cpu의 사용량이 30퍼 가까이 치솟았습니다.
이제 ab의 결과를 해석해 보겠습니다.

코드의미
Time taken for tests총 소요 시간
Failed requests요청 실패
request per second1초당 react가 처리할 수 있는 갯수
Time per request개별 처리 속도

본 문서는 인프런의 "AWS (아마존 웹서비스) 가입부터 활용까지" 강의를 공부한 내용입니다.
인턴중인 회사의 수석 연구원님이 추천해주신 강의입니다.
AWS (아마존 웹서비스) 가입부터 활용까지

profile
츄르 값 벌기 위해 코딩하는 아키텍쳐

0개의 댓글