주요내용:
- 시작구성으로 오토스케일링 그룹 생성하기
- 오토스케일링으로 가상 서버의 수 조정하기
- ELB 뒤에서 동기적으로 디커플된 앱 스케일링하기
- SQS를 사용해서 비동기적으로 디커플된 앱 스케일링하기
- 클라우드와치 알람으로 오토스케이링 그룹 변경하기
목적 : 생일 파티할 때 음식을 얼마나 준비해야함? 몇명이나 참석할까? 얼마나 먹고 마시나?
- 인프라가 얼마나 많은 사용자에 대응해야 하는가?
- 사용자들이 스토리지를 얼마나 많이 소비할까?
- 사용자의 요청을 허리하는 데 어느 정도의 컴퓨팅 파워가 필요할까?
14.1 동적 서버 풀 관리하기
- AWS는 동적 서버 풀을 관리할 수 있는 오토스케일링 그룹이라는 서비스를 제공한다.
- 오토스케일링 그룹을 활용하면...
. 가상 서버를 원하는 수만큼 실행하고, 그 수를 동적으로 조절 가능
. 똑같은 가상 서버를 시작, 구성, 배포할 수 있음
- 오토스케일링 구성요소 :
. 시작 구성 : 가상서버 크기, 이미지, 구성 정의
. 오토스케일링 그룹 : 시작 구성을 기반으로 실행할 가상 서버의 수를 지정
. 스케일링 정책 : 오토스케일링 그룹에서 원하는 서버의 수를 조정
. p.474 그림 14-2
- 시작구성 작성 :
. 새로운 가상 서버를 정의하고 구성하기 위해 시작 구성 사용함
. p.475 표 14-1 시작 구성 매개변수
- 오토스케일링 그룹 만들기 :
. 가상 서버의 최대, 최소, 원하는 수를 정의
. 원하는 수란? 그 정도의 수의 서버가 실행되고 있어야 함을 의미
. 서버의 현재 수가 원하는 수 미만이라면 오토스케일링 그룹이 서버를 추가하고, 반대면 일부 서버 종료
. EC2 인스턴스의 건강상태를 모니터링하고 고장난 인스턴스를 대체함
. p.476 표 14-2 오토스케이링 그룹 매개변수
- CloudFormation 템플릿을 활용하여 동적 서버 풀 설정
. 예제 14-1 EC2 인스턴스 웹 앱을 위한 오토스케일링
14.2 지표와 스케줄로 스케일링 트리거하기
- 세 번째 구성요소인 스케일링 정책임. 이 정책으로 동적 서버 풀에서 가상 서버의 수를 자동으로 늘리거나 줄여야 함.
- p.478 그림 14-3 클라우드와치 or 스케줄 기반
. 클라우드와치 알람을 사용하여 지표(CPU 사용량, 로그밸런서에 들어오는 요청 수 등)에 따라 가상 서버의 수를 늘리거나 줄인다
. 반복되는 부하 패턴에 맞춰 가상 서버의 수를 늘리거나 줄이는 스케줄을 정의한다
14.2.1 스케줄 기반 스케일링
- 운영하다보면 반복적인 부하 패턴을 알 수 있다
. 많은 사람들이 점심시간인 오전 11시에서 오후 1시 사이에 기사를 읽는 것으로 보임
. 회원 등록 요청은 저녁에 급증
- 패턴에 맞춰 예약 스케일링 작업을 운영할 수 있다.
. 1회성 작업 : starttime 매개변수를 사용해서 생성
. 반복작업 : recurrence 매개변수를 사용해서 생성
- CLI를 활용해서 두 유형의 예약 스케일링 작업 만들 수 있음
. 1회성 스케일링 작업 스케일링하기 : webapp이라는 오토스케일링 그룹의 원하는 용량을 4로 설정함
$ aws autoscaling put-scheduled-update-group-action --scheduled-action-name ScaleTo4 --auto-scaling-group-name webapp --start-time "2017-01-01T12:00:00Z" --desired-capacity 4 |
. cron 문법으로 반복스케일링 작업 : 매일 20:00 UTC에 오토스케일링 그룹의 원하는 용량을 2로 설정
$ aws autoscaling put-scheduled-update-group-action --scheduled-action-name ScaleTo2 --auto-scaling-group-name webapp --recurrence "0 20 * * *" --desired-capacity 2 |
14.2.2 클라우드와치 지표 기반 스케일링
- 현재의 작업부하에 따라 EC2 인스턴스 조절
. p.481 그림 14-4 개념도
- EC2 인스턴스는 기본적으로 클라우드와치에 여러 지표를 전달, 그 중 CPU, 네트워크 및 디스크 사용률이 가장 중요
. https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/CW_Support_For_AWS.html
. https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html
- 예제 14.4 : 오토스케일링 그룳에 속하는 모든 가상 서버의 평균 CPU 사용률이 80%를 초과하면 오토스케일링을 통해 가상 서버의 수를 늘리는 알람 생성
- 임계값에 도달하면 클라우드와치 아람이 액션을 트리거, 연결할 스케일링 정책 필요
. 예제 14-5 CloudFormation으로 스케일링 정책 생성
14.3 동적 서버 풀 디커플링하기
- 방문자들은 동적 서버 풀안의 여러 서버 중 게시물을 호스팅하는 서버에 어떻게 도달할 수 있을까? HTTP 요청을 어디로 라우팅해야 하는가?
- 디커플링!!
1. ELB를 활용한 동기적 디커플링
2. SQS를 활용한 비동기적 디커플링
- 디커플링되고 확장 가능한 애플리케이션이 되려면 무상태 서버여야 한다!
.무상태 서버는 모든 공유 데이터를 원격으로 데이터베이스나 스토리지 시스템에 저장한다.
- 두 개의 예
. 워드프레스 블로그 : ELB로 디커플링, CPU 사용률을 기반으로 해서 오토스케이링과 클라우드와치로 스케일링, 데이터 아웃소싱에 RDS와 S3사용
. URL의 스냅샷을 찍는 URL2PNG : SQS 큐로 디커플링, 큐 길이를 기반으로 해서 오토스케일링과 클라우드와치 스케일링, 데이터 아웃소싱에 DynamoDB와 S3사용
14.3.1 로드밸러서를 활용해서 동기적으로 디커플된 동적 서버 풀 스케이링하기
- 웹 애플리이션을 동적 서버 풀로 운영할 때는 로드 밸런서를 사용하는 것이 일반적.
- 로드 밸런서는 동적 서버풀로의 유일한 진입점 역할을 맡아 HTTP(S) 요청을 다중 서버에 라우팅한다.
- 예 : 워드프레스 : p.487 그림 14-6 -> p.488 그림 14.7 전체 개념도
- CLI : BlogID는 대문자 없어야함
$ aws cloudformation create-stack --stack-name jjwordpress --template-url https://s3.amazonaws.com/awsinaction/chapter14/wordpress.json --parameters ParameterKey=BlogID,ParameterValue=jennyblog ParameterKey=AdminPassword,ParameterValue=1234 ParameterKey=AdminEMail,ParameterValue=ws@naver.com --capabilities CAPABILITY_IAM |
- 스케일링 테스트하기!
. 짧은 시간에 10,000개 요청을 워드프레스로 보내는 부하 테스트!!! ... 어떻게하지 리눅스도 없구 푸티도 안...못..들어가겠어ㅜ
. 이거 전에 왜 CloudFormation 스택 갱신하라고 하지?ㅠㅠ
. 같이 해보자으앙...
14.4.2 큐를 활용해서 비동기적으로 디커플된 동적 서버 풀 스케일링하기
$ aws cloudformation create-stack --stack-name url2png --template-url https://s3.amazonaws.com/awsinaction/chapter14/url2png.json --parameters ParameterKey=ApplicationID,ParameterValue=myurlpng --capabilities CAPABILITY_IAM |
- 앞에꺼랑 차이점은, 클라우드와치 알람이 CPU 사용률 대신 SQS 큐의 길이를 모니터링함
- 이것도 업뎃하래
$ aws cloudformation update-stack --stack-name url2png --template-url https://s3.amazonaws.com/awsinaction/chapter14/url2png-loadtest.json --parameters ParameterKey=ApplicationID,UsePreviousValue=true --capabilities CAPABILITY_IAM |
'개발' 카테고리의 다른 글
0713 kernel (1) | 2019.07.13 |
---|---|
컴파일러 (0) | 2019.01.08 |
AWS dynamodb (0) | 2018.09.04 |
aws 네트워크 (0) | 2018.08.05 |
aws 시스템보안 (0) | 2018.08.02 |