DevOps31일차 - Auto scaling

문한성·2023년 4월 19일
0

부트캠프

목록 보기
57/123
post-thumbnail

오토 스케일링 (Auto Scaling)

클라우드 컴퓨팅의 대표적인 장점으로는 필요에 따라 서비스를 빠르게 확장하거나 축소할 수 있는 유연성을 들 수 있다.

그중, 오토스케일링(Auto Scaling)은 클라우드의 유연성을 돋보이게 하는 핵심기술로 CPU, 메모리, 디스크, 네트워크 트래픽과 같은 시스템 자원들의 메트릭(Metric) 값을 모니터링하여 서버 사이즈를 자동으로 조절 하는 서비스를 말한다.

이를 통해 사용자는 예상치 못한 서비스 부하에 효과적으로 대응하고, 최대한 저렴한 비용으로 안정적이고 예측 가능한 성능을 유지 할수 있다.

스케일링 이란?

오토스케일링(Auto Scaling)에 대해 배우기 앞서 스케일링(Scaling)이 정확히 무엇을 의미하는지 간단하게 짚고 넘어가도록 하자.

스케일링 이란 인스턴스 혹은 컴퓨팅 파워를 늘리는 것을 말한다.

스케일링의 방법에는 대표적으로 2가지가 있다.

스케일 업(Scale Up)

cpu가 하나이고 memory 1기가인 인스턴스가 있다고 가정하자.

만일 인스턴스의 성능을 16배로 늘려야할 상황이 온다면, 말 그대로 16배 큰 인스턴스를 사용함으로서 성능을 올리는 것을 스케일 업이라고 한다. 하지만 이는 성능과 비용이 비례하지 않는다는 단점이 있다.

주변에서 간단히 예를 들면 그래픽카드를 볼 수 있다. (그래픽카드 지식이 있으신 게이머 분들만 보세요!)

GTX 1080과 RTX 2080의 성능 차이는 30%밖에 안되지만 가격 차이는 두배가 넘는다.

물론 RTX 3080같은 명작도 가끔 나오지만 역시 엄청 비싸다.

거기다 만일 1,000,000배 높은 성능을 사용하고 싶다면 비용은 어마어마 할것이고, 물리적으로 가능한지도 고민 해봐야 한다.

스케일 아웃(Scale Out)

위의 물리적인 문제를 해결하는것이 바로 스케일 아웃 이다.

스케일 아웃은 규모를 늘리는 것이다.

즉, 10만배 성능이 좋은 그래픽카드는 현실에서도 존재하지도 않으니 여러개 장착 해서 성능을 올려보자는 개념이다.

하지만 이는 물리적으로 불가능하다. 메인보드에는 그래픽카드를 최대 2개밖에 장착하지 못하며, 만일 수십개를 장착할 수 있다고 해도 공간을 고려해야 되지 때문이다.

그러나 클라우드는 상황이 다르다. (왜 클라우드가 인기있는 이유이기도 하다)

성능을 16배 올리고 싶으면 그냥 인스턴스를 16개 가져다가 쓰면 된다.

공간의 제약이나 하드웨어적인 제약이 없다.

그리고 성능과 비용이 비례하다는 특징도 가지고 있다. (그래픽카드 크로스파이어(글카 2개 장착) 같은경우 30%밖에 성능 향상폭이 미미하다)

따라서, 클라우드 환경에서는 Scale Out을 항상 염두하며 설계를 해야 한다.

수요에 따라 인스턴스를 덜 쓸 수도, 더 쓸 수도 있음으로서 유연성을 가질 수 있기 때문이다.

스케일 인(Scale In)

scale out으로 늘린 인스턴스를 다시 줄이는 행위로 이해하면 된다.

이처럼, 오토 스케일링(Auto Scaling)은 바로 Scale Out을 자동화(Auto) 하기 위해 나온 서비스라고 보면 된다.

애플리케이션을 모니터링 하고 용량을 자동으로 조정하는 역할을 하며, 최대한 저렴한 비용으로 안정적이고 예측 가능한 성능을 유지 한다.

그래서 몇 분만에 손쉽게 여러 서비스 전체에서 여러 리소스에 대해 애플리케이션 규모 조정을 설정 할 수 있다.

오토 스케일링의 목표

정확한 수의 EC2 인스턴스를 보유하도록 보장

  • 그룹의 최소 인스턴스 숫자와 최대 인스턴스 숫자를 관리
  • 만약 애플리케이션을 실행하기 위해 인스턴스가 3개가 필요하다면, 3대 이상의 인스턴스가 항상 떠있을 수 있게 보장한다.
  • 최소 숫자 이하로 내려가지 않도록 인스턴스 숫자를 유지 (인스턴스 추가)
  • 최대 숫자 이상 늘어자니 않도록 인스턴스 숫자 유지 (인스턴스 삭제)

다양한 스케일링 정책 적용 가능

  • CPU의 부하에 따라 인스턴스 크기 늘리기/줄이기 (오후 2시가 되면 게임 접속 트래픽이 많으니 인스턴스 확 올리고, 새벽 2시가 되면 접속 트래픽이 낮으니 인스턴스를 내린다.)

가용영역에 인스턴스가 골고루 분산될 수 있도록 인스턴스를 분배

  • 서비스 장애가 발생하더라도 문제없이 서비스 이용

또한, AWS 오토스케일링 서비스는 EC2뿐만아니라 여러 AWS 서비스와 유기적으로 연동하여 사용 할수도 있다.

오토 스케일링 구성 요소

오토 스케일링 그룹(Groups)

  • EC2 인스턴스를 조정 및 관리 목적의 논리 단위로 취급될 수 있도록 그룹으로 구성
  • 그룹을 생성할 때 EC2 인스턴스의 최소(minimum size) 및 최대(maximum size) 인스턴스 수와 원하는(desired capacity) 인스턴스 수를 지정하고 이 범위안에서 Scale in/out 이 일어난다.
  • 인스턴스 증감은 이 그룹안에서 이루어 지게 되며, 사용자가 지정한 조건을 통해 실행된다.
    • 증설 시 어떤 인스턴스 템플릿을 이용할 것인지
    • 얼마나 많은 서버를 필요로 하는지
    • 어떤 값을 기반으로 모니터링해서, 인스턴스를 증설 또는 감축 할 것인지
  • 추가적으로 증설된 인스턴스가 로드밸런서의 멤버로 연결되어야 한다면, 로드밸런서를 지정할 수도 있다.

실제 aws 오토스케일링 그룹 설정 화면

시작(구성) 템플릿

  • Auto Scaling 그룹에서 인스턴스를 시작하는데 사용하는 템플릿으로, AMI(이미지)라고 생각해도 된다.
    템플릿이라 함은 똑같은 OS환경의 인스턴스를 간편하게 복제하기 위해서 구성하는 것이다.
    따라서 템플릿을 오토스켕일링 그룹에 지정시킴으로서, 오토스케일링을 통해 인스턴스 늘리면 그 인스턴스의 환경 구성이 템플릿에 설정된 환경에 따라 복제됨으로서 서비스를 늘린다는 개념 원리인 것이다.
  • 인스턴스의 AMI ID, 인스턴스 유형, 키 페어, 보안 그룹, 블록 디바이스 매핑 등의 정보를 세팅해서 템플릿을 구성하게 된다.
  • 템플릿을 구성하면 수정이 불가능하다. 템플릿은 버젼으로 구분되는데, 만일 옵션을 바꿀 필요가 있으면 새로 생성을 하고 버젼을 새로생성한 버젼으로 바꾸는 식으로 해야한다.

실제 시작 템플릿 생성 화면

오토 스케일링 조정 옵션

  • Auto Scaling 그룹을 조정하는 다양한 조건 방법을 설정하는 옵션이다.
    예를들어, CPU 점유율이 일정 %를 넘었을 때 추가로 늘리거나 아니면 2개 이상이 필요한 스택에서 EC2 하나가 죽었을 때 실행하거나 등
  • 현재 인스턴스 수준 유지 관리, 수동 조정, 일정을 기반으로 조정, 온디맨드 기반 조정 등등 이 있다.
  • CloudWatch이나 ELB(부하 분산)와 연계가 가능하다.
  • 아래 사진과같이 어느 when일떄 take the action할지 옵션 조정 메뉴가 있다.

오토스케일링 동작 원리

복잡하지만 최대한 간단하게 요약하자면 다음과 같이 된다.

  • EC2 인스턴스 클러스터 가 있고 8개의 인스턴스가 필요하다고 가정해보자
  • 하드웨어가 터졌다던지 소프트웨어 문제가 터져서 EC2 한개가 죽어버렸다.
  • 그럼 이것을 오토스케일링이 감지를 한다
  • 그리고 시작구성에 맞는 인스턴스를 생성을 해서 오토 스케일링 클러스터에 넣어준다.

레퍼런스

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글