오토스케일(Auto Scale) 서비스를 사용하면 인스턴스의 부하를 지속적으로 모니터링하여 필요한 경우 인스턴스를 추가로 생성하거나 삭제할 수 있습니다. 또한 개별 인스턴스에 네트워크 단절 등의 장애가 발생하면 자동으로 새로운 인스턴스를 생성해 장애가 발생한 인스턴스를 대체할 수도 있습니다. 오토스케일을 통해 부하와 장애에 실시간으로 대응하여 안정적이고 탄력적인 사용자 서비스를 제공할 수 있습니다.
스케일링 그룹은 인스턴스를 추가로 생성 또는 삭제하는 조건과, 조건이 만족하는 경우 수행할 행동을 정의한 것입니다. 기본적으로 스케일링 그룹은 최소, 최대, 구동 인스턴스에 대한 설정값과 확장, 감축(Scale Out, Scale In) 정책, 자동 복구(Auto Healing) 정책으로 구성됩니다.
최소, 최대, 구동 인스턴스는 스케일링 그룹에서 반드시 정의해야 하는 매개변수로, 각각의 의미는 다음과 같습니다.
최소, 최대, 구동 인스턴스가 각각 1, 10, 2인 경우 최초에는 구동 인스턴스에 따라 두 대의 인스턴스가 생성됩니다. 이후 부하에 따라 확장 또는 감축 정책이 발동하면 구동 인스턴스가 정책에 따라 늘어나거나 줄어듭니다. 구동 인스턴스는 어떤 상황에서도 최소, 최대 인스턴스로 지정된 범위를 넘어설 수 없습니다.
정책이란 인스턴스를 생성하거나 제거하는 기준을 정의한 것입니다. 한 개 이상의 조건과 조건이 충족했을 때의 동작으로 구성됩니다. 정책의 조건은 다시 인스턴스 성능 지표, 기준값, 지속 시간으로 구성됩니다. 스케일링 그룹에서 사용하는 인스턴스 성능 지표는 다음과 같습니다.
스케일링 그룹은 위의 성능 지표를 1분 주기로 수집합니다. 수집된 성능 지표는 스케일링 그룹 단위로 관리됩니다. 마지막으로 오토스케일 서비스가 확인하는 값은 스케일링 그룹 내 모든 인스턴스들의 평균값입니다.
[주의] 특정 인스턴스 하나만 조건을 만족하는 경우에는 정책이 발동하지 않습니다.
스케일링 그룹은 지정된 성능 지표가 지속 시간 동안 기준값을 초과하는지를 지속적으로 관찰하여 정책의 발동 여부를 결정합니다. 예를 들어 조건이, CPU 사용률이 90% 이상이고 지속 시간이 5분인 경우, 5분 동안 CPU 사용률이 90% 아래로 떨어지지 않아야 정책이 발동됩니다.
지정된 조건을 만족하여 정책이 발동한 경우 스케일링 그룹은 조건에 따른 동작을 실행합니다. 구체적으로 동작이란 스케일링 그룹의 구동 인스턴스 값을 조정하는 것입니다. 구동 인스턴스의 값이 증가하면 확장 정책, 감소하면 감축 정책이라고 합니다.
[참고] 감축 정책이 발동하면 가장 오래된 인스턴스부터 중지합니다. 인스턴스가 중지될 때 발생하는 시그널 (Linux의 경우 SIGTERM/SIGKILL, Windows의 경우 WM_QUERYENDSESSION/WM_ENDSESSION)에 대한 핸들러를 구현하여 서비스가 중단 없이 종료될 수 있도록 합니다.
조건에 맞는 동작을 무제한으로 수행하는 것을 막기 위해 재사용 대기 시간(cooldown time)을 설정합니다. 마지막으로 동작을 수행한 시간으로부터 재사용 대기 시간 동안은 조건을 충족하더라도 정책을 발동하지 않습니다.
재사용 대기 시간의 의미를 설명하기 위해 예를 들겠습니다.
먼저 확장 정책이 "CPU 사용률을 90% 이상 5분 동안 유지하는 경우 구동 인스턴스 두 개 증가" 라고 가정합니다. 만약 실제 인스턴스들의 CPU 사용률을 90% 이상 6분 동안 유지했다면, 처음 5분이 지난 후 인스턴스를 두 개 생성합니다. 다음 1분이 지나면 CPU 사용률을 90% 이상 5분 동안 유지하는 조건을 또 한번 만족하므로 다시 인스턴스 두 개를 생성합니다.
이렇게 재사용 대기 시간이 없다면 예상치 못하게 인스턴스가 증가하거나 감소하는 상황을 겪게 됩니다. 효율적인 자원 활용을 위해 적절한 재사용 대기 시간을 설정하시길 바랍니다.
[참고] 스케일링 그룹에서 확장 정책과 감축 정책의 재사용 대기 시간을 각각 지정할 수 있습니다. 보통 확장 정책의 재사용 대기 시간은 갑작스러운 부하 증가에 대응할 수 있도록 가능한 한 짧게 두고, 축소 정책의 재사용 대기 시간은 천천히 인스턴스를 서비스에서 제외하도록 가능한 한 길게 둡니다. 서비스의 부하 상황을 꾸준히 모니터링하여 적절한 정책을 설정해야 인스턴스가 낭비되는 것을 막을 수 있습니다.
[주의] 확장/감축 정책이 동시에 발동되는 경우를 막기 위해 스케일링 그룹 역시 재사용 대기 시간을 가집니다. 스케일링 그룹의 재사용 대기 시간은 확장, 감축 정책의 재사용 대기 시간 중 작은 값을 따릅니다.
자동 복구 정책을 사용하면 개별 인스턴스에 장애가 발생했을 때 해당 인스턴스를 삭제하고 새로운 인스턴스를 생성해 대체합니다. 개별 인스턴스의 성능 지표가 3분 동안 수집되지 않으면 장애로 판단해 자동 복구가 진행됩니다. 자동 복구는 재사용 대기 시간과 상관없이 동작합니다.
인스턴스 생성 후 연결할 로드밸런서를 지정합니다. 확장 정책이 발동되었을 때 생성된 인스턴스들은 지정된 로드밸런서에 연결됩니다. 새로 추가된 인스턴스에 로드밸런서로 자연스럽게 부하를 분배해 서비스에 즉각 투입할 수 있습니다.
[참고] 실제로 생성된 인스턴스가 서비스에 투입되는 시점은 부팅 완료 후 사용자 서비스가 시작되어 로드밸런서의 상태 확인에 정상적으로 응답한 이후입니다.
스케일링 그룹은 설정된 정책에 따라 자동으로 확장 또는 감축됩니다. 그러나 필요한 경우 사용자가 명시적으로 구동 인스턴스를 조정할 수 있습니다. 오토스케일에서 지원하는 조정의 종류는 다음과 같습니다.
정책에 의한 조정
스케일링 그룹에서 지정한 정책대로 인스턴스의 수를 조정합니다. 스케일링 그룹의 기본적인 동작입니다.
사용자에 의한 조정
사용자가 콘솔에서 확장, 감축 정책을 발동하는 방식입니다. 확장, 감축 정책의 발동 조건을 만족하지 않아도 수행됩니다.
예약에 의한 조정
인스턴스의 성능 지표를 기준으로 하는 대신 특정 시점마다 구동 인스턴스의 수를 조정합니다. 발동 시간은 단 한 번만 일어나도록 설정할 수도 있고 주기적으로 반복해서 일어나도록 설정할 수 있습니다.