이동준1
아웃풋 공부
이동준1
전체 방문자
오늘
어제
  • 분류 전체보기 (84)
    • airflow (8)
    • sql (23)
    • aws (12)
    • python (3)
    • 네트워크 (12)
    • 알고리즘 (2)
    • 짧은서평 (24)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • AWS
  • 유연함의힘
  • regexp
  • 네트워크
  • Network
  • 고통의 비밀
  • 서평
  • 퓨처셀프
  • 고통의비밀

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
이동준1

아웃풋 공부

[AWS] Elastic Load Balancing & Auto Scaling Groups
aws

[AWS] Elastic Load Balancing & Auto Scaling Groups

2022. 12. 20. 17:59

FeedBack

1. Amazon FSx를 이용하면, AWS가 관리하는 인기있는 파일 시스템 설치와 시작에 있어서 쉽고 휴율적인 비용으로 관리가 가능하다.

 

2. EBS Volume은 특정 AZ에 한해서 사용할수 있으며, 다른 AZ에서 사용한다면 Snapshot을 이용해야한다. Snapshot을 이용한다 하더라도 동기화된 상태는 아님에 유의 해야한다. 동기화된 저장소를 사용하고 싶다면 EFS를 고려하는 것이 옳다.

 

 


Scalability & High Availability

확장성은 어플리케이션 스케일링을 통해, 적응하여 더 큰 부하를 처리할수 있음을 의미한다. 확장성에는 1) 수직 확장성(Vertical Scalability)과 2) 수평 확장성(Horizontal Scalability, = elasticity) 두 가지로 나뉜다. 이는 콜센터를 비유로하면 이해가 쉽다.

1) Vertical Scalability

수직 확장성은 콜센터의 상담원을 업그레이드해서 전문 상담원을 호출하는것과 유사하다. 전문 상담원은 더 많은 전화 업무 처리가 가능할 것이다. 마찬가지로 Instance도 t2.micro에서 t2.large로 크기를 변형시키는 것이 가능하다. 이렇게 크기를 증가시키는 것이 수직 확장성이라고 한다. 이렇게 크기를 증가시키는 것을 scale up 이라고하며, 크기를 줄이는것은 scale down이라고 한다. 하드웨어의 한계가 있기 때문에, 수직 확장성은 확장에 한계를 가진다 (물론 그 상한선은 높다). 

 

 

2) Horizontal Scalability

수평 확장은 크기를 늘리는 대신, instance 또는 시스템의 숫자를 늘리는 것을 의미한다. 그래서 분산 시스템에서 주로 이용된다. Amazon EC2같은 클라우드 서비스 덕분에 수평 확장은 쉽게 이행할 수 있다. instance의 숫자를 늘리는것은 scale out이라고 하며, 숫자를 줄이는 것은 scale in이라고 한다.

 

고가용성(High Availability) 이란 개념은 수평 확정과 밀접한 관계가 있다. 고가용성은 적어도 2개의 AZ에서 어플리케이션이나 시스템을 가동하는것을 의미한다. 2개 이상의 AZ에서 어플리케이션을 가동한다면, 한곳이 중단되어도 다른곳에 업무를 처리하는 것이 가능하다. 예를들어, 뉴욕에서 자연재해가 발생해 뉴욕에서 어플리케이션 가동이 불가능하더라도 샌프란시스코에 있는 AZ를 이용하면 정상적으로 어플리케이션을 사용할 수 있게 된다.

 

 

Scalability vs. Elasticity (vs Agility)

Scalability는 더 큰 부하를 가능하게 해주는것을 의미한다. 위에서 설명했듯이 scale up이나 scale out을 통해 이가 가능하다. Elasticity는 AWS에서 핵심 개념이며, auto-scaling을 의미한다. 다시말해, 수신하는 로드에 따라 시스템이 자동으로 확장되는 것을 의미한다. 사용량에 따라 지불하며, 비용 최적화가 이루어진다. 마지막으로 Agility는 두 개념을 혼동시키기 위한 단어이다. 위의 두 개념과 무관하다. Agility는 IT 자원이 한번의 클릭으로 손쉽게 얻어져 시간을 절약할 수 있음을 의미한다.

 

Load balancing

Load balancing은 AWS를 더욱 탄력적으로 사용할 수 있게 도와주는 서비스다. 더 많은 유저를 가질수록, 여러 EC2 instance간 더 많은 로드를 분산해야하는데, load balancer는이 작업이 효율적으로 이루어질 수 있도록 도와준다. 동시에, instance의 상태를 확인해서 백엔드에서 EC2 instance가 잘 작동하는지도 확인해준다. 이때, instance는 Multi-AZ여도 괜찮다.

 

Elastic Load Balancer

Elastic Load Balancer는 managed load balancer이다. 즉, AWS가 load balancer의 작동을 보증하며, 업그레이드, 유지, 그리고 고가용성을 관리해준다. 때문에, 단지 몇가지 구성만 설정하면 load balancer를 이용할 수 있다. 자신만의 load balancer를 설정하는것이 비용은 더 적게들수 있으나, 유지보수, 통합, OS 업그레이드 등을 고려한다면 ELB가 더 편리할수도 있다.

 

AWS에서 제공되는 load balancer가 몇가지 있다. 먼저 Classic Load Balancer이다. 이는 Layer4와 7을 동시에 제공하는데, 현재는 이를 분리해서 따로 제공하는것이 추세이다. 그래서 Layer7은 Application Load Banacer (HTTP/HTTPS only)가 맡고, Layer 4는 Network Load Balancer (ultra-high performance, allows for TCP)가 맡는다.

 

 

Auto scaling

Load balancer를 사용하면 어플리케이션의 로드를 분산할 수 있다. 여기서, 로드 분산을 위한 서버를 어떻게 생성할것이냐에 대한 이야기는 Auto scaling에서 할 수 있다. (across multiple AZ)

 

실제 상황에서 로드는 시간에 따라 달라진다. 예를들어, 사람들은 밤시간보다 낮시간에 쇼핑을 더 많이 할수있고, 그러면 로드는 낮시간에 더 많이 발생한다. 이런 상황을 대비해서 Auto Scaling Group(ASG)를 이용하게 된다. ASG는 최적의 EC2 instance 갯수를 유지해 비용 최적화를 이루는 것이 목적이다. ASG에서 instance 갯수를 조절하면 load balancer에는 자동으로 갯수가 적용된다.

 

Auto scaling을 이용하면 traffic에 따라, EC2 instance의 수를 조절해준다. 이때 instance의 최소 갯수, 최대 갯수, 그리고 희망 갯수를 설정 할 수 있다. 그래서 Auto scaling이 사용중일때, EC2 instance를 임의로 삭제하더라도 사전에 설정한 희망 갯수에 따라 EC2 instance가 다시 생성된다. 이때, unhealty 상태인 instance는 자동으로 교채되며, instance 생성에서 고가용성(High Availability)이 적용된다.

 

 

ASG에서는 Minimum size, Maximum size, 그리고 Actual Size/ Desired Capacity를 설정할 수 있다. 앞의 두개는 말그대로 instance의 최소 갯수와 최대 갯수이며, Actual Size는 보통 ASG의 실제 크기를 의미한다.

이렇게 ASG가 상황에 따라 EC2 instance의 갯수를 지정하면, Load Balancer는 유입되는 traffic을 생성된 instance에 적절히 뿌려준다.

 

 

 

 

Auto scaling Groups - Scaling Strategies

Auto scaling에는 전략이 몇가지 존재한다. 가장 먼저 수동으로 스케일링하며 업데이트하는 1) Manual Scaling이 있다. 예를들어, 최대용량을 1에서 2로 직접 늘리는 것이 이에 해당한다. 그리고 2) Dynamic Scaling이 있는데 이는 수요에 따라서 적절히 scaling을 시도하는것을 의미한다. Dynamic Scaling은 4가지로 나누어 볼 수 있다.

 

1. Simple / Step Scaling:

트리거를 정의한 뒤, 유닛을 추가/ 삭제 하는것을 의미한다. 예를들어, CPU 사용률이 5분동안 70% 초과할 때마다 유닛 2개를 추가할 수 있다. 또는 10분  동안 CPU사용률이 30% 이하일 때마다 유닛 1개를 제거할 수도 있다.

 

2. Target Tracking Scaling:

CPU 평균 사용률이 40%가 되도록 설정하는것이 예시가 된다. CPU 사용량을 목표로 정해놓고 instance의 갯수를 조절하는 형태이다.

 

3. Scheduled Scaling:

사용자 패턴 기반으로 확장을 예측하는 형태이다. 예를들어, 금요일 오전 10시부터 오후 5시까지 일시적으로 instance의 최소 용량을 증가시킬 수 있다.  

 

4. Predictive Scaling:

과거 트래픽을 기반으로 머신러닝을 이용해, 트래픽을 미리 예측하는 형태이다. 예측한 기간에 도달하기 전에 올바른 수의 EC2 instance를 자동으로 provising 해준다.

'aws' 카테고리의 다른 글

[AWS] Snow Family  (0) 2022.12.26
[AWS] S3  (0) 2022.12.22
[AWS] EC2 Instance Storage  (0) 2022.12.17
[AWS] EC2  (0) 2022.12.13
[AWS] IAM  (0) 2022.12.13
    'aws' 카테고리의 다른 글
    • [AWS] Snow Family
    • [AWS] S3
    • [AWS] EC2 Instance Storage
    • [AWS] EC2
    이동준1
    이동준1

    티스토리툴바