주요내용:

  • 시작구성으로 오토스케일링 그룹 생성하기
  • 오토스케일링으로 가상 서버의 수 조정하기
  • ELB 뒤에서 동기적으로 디커플된 앱 스케일링하기
  • SQS를 사용해서 비동기적으로 디커플된 앱 스케일링하기
  • 클라우드와치 알람으로 오토스케이링 그룹 변경하기


목적 : 생일 파티할 때 음식을 얼마나 준비해야함? 몇명이나 참석할까? 얼마나 먹고 마시나?

  • 인프라가 얼마나 많은 사용자에 대응해야 하는가?
  • 사용자들이 스토리지를 얼마나 많이 소비할까?
  • 사용자의 요청을 허리하는 데 어느 정도의 컴퓨팅 파워가 필요할까?

AWS : 필요하면 즉시 확장하는 기능, 탄력성!

목표 : 현재의 부하를 기반으로 가상 서버의 수를 확장하는 방법을 배운다.

가상 서버의 수 조절 : 오토스케일링 그룹과 AWS의 스케일링 정책으로 할 수 있음
- 오토스케일링은 EC2 서버의 일부, EC2 인스턴스 수 늘리고 줄일 수 있음

선결 조건 : 애플리케이션을 수평 확장 하려면...
1. 확장하려는 서버는 "무상태"여야 한다. 오직 한 서버에서만 사용할 수 있는 로컬 혹은 NAT 디스크에 저장하는 대신 RDS, DynamoDB, S3 같은 서비스를 활용하면 가능
2. 동적 서버 풀의 진입점은 작업 부하를 여러 서버에 분산할 수 있게 하는 데 필요하다. 서버는 로드 밸러서를 통해 동기적으로, 또는 큐를 통해 비동기적으로 디커플링될 수 있음


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 

. 참고 : https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%B0%98%EB%B3%B5_%EC%98%88%EC%95%BD%EC%9E%91%EC%97%85_cron,_crond,_crontab


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

+ Recent posts