Spot instance
Tencent Cloud의 스팟인스턴스는 Pay-as-you-go 대비 매우 저렴한 가격으로 인스턴스를 빌려 사용할 수 있는 과금모델이다. 그러나 인스턴스의 재고상황에 따라 자동으로 회수되는 특성 때문에 프로덕션 환경에 직접적으로 사용하기에는 적합하지 않다. (사실 입찰가격이 시장가격보다 낮아지면 회수되는 것이 보통이지만 , 텐센트클라우드의 공식홈페이지를 보면 2024년1월8일 기준으로 가격 이슈로는 회수되지 않는다고 되어있다. 언제든 바뀔 수 있다.) 따라서 불시에 종료되어도 무방한 테스트 환경이나 고성능의 서버로 시간을 크게 단축시킬 수 있는 애플리케이션 빌드 및 배포, 배치작업 등에 알맞은 과금모델이다.

스팟인스턴스를 구매한다는 것은 한 마디로 동네 부자형에게 밥 한 끼 사고 스포츠카를 빌리는 것과 같다고 할 수 있다. 형에게 밥 한 끼 가격으로 고급 스포츠카를 빌려서 내 것처럼 탈 수 있지만 형이 언제든지 와서 가져갈 수 있으니 동창회 같은 장소나 중요한 데이트 자리에 몰고 가면 안 되는 것 처럼 스팟인스턴스도 적재적소에 사용해야 효율을 크게 높일 수 있다.
Spot instance 회수정책
스팟인스턴스의 재고상황에 따라 인스턴스 회수가 확정되면 텐센트클라우드에서는 인스턴스의 메타데이터를 통해 스팟의 현재상태를 쿼리할 수 있는 API와 메시징을 이용한 스팟인스턴스 회수 알림 기능을 제공한다. 회수 알림은 인스턴스 회수가 확정되면 종료 _2분 전_에 알림을 보내주는데 2분이란 시간은 어떤 조치를 하기엔 너무 짧은 시간이라 미련없이 떠나보내 주는게 낫다.

인스턴스가 회수되면 원칙적으로 인스턴스 내부의 데이터는 모두 함께 삭제된다. 아는 형의 스포츠카를 빌려 탈때 차 안에 현금 다발이나 귀중품을 두고 있다가 까먹으면 형은 얄짤없이 통째로 다 가져간단 소리다.
Auto Scaling 에서의 Spot instance
Auto Scaling을 설정 시 스케일링 그룹에 일정 비율 Spot instance를 추가하게 하여 Pay-as-you-go 리소스와 혼합하는 스케일링 전략을 구성할 수 있다. 서비스에 적합하기만 하다면 Scale-out 시 비용을 크게 절감할 수 있다. Tecent Cloud Auto Scaling 콘솔에서 스케일링그룹 생성 시 기본 Policy 작성 → 로드밸런서 선택 후 아래와 같이 Spot instance allocation 옵션을 토글하면 Spot instance 구성을 진행할 수 있다.

각각의 옵션을 살펴보면
- Pay-as-you-go base capacity : 종량제 인스턴스의 최소 수. Scale-out이 활성화되면 이 값에 도달할때 까지는 종량제 인스턴스만 추가된다.
- Pay-as-you-go above base : Scale-out 시 추가 할당되는 인스턴스 중 종량제 인스턴스의 비율
- Spot instance creation policy : 스팟인스턴스를 처음 추가하는 시점에 어떤 모델의 인스턴스를 추가할지 선택하는 옵션으로 재고가 가장 많은 인스턴스 모델을 선택하거나 가장 코어당 가격이 저렴한 인스턴스 모델을 선택하는 옵션 중 선택할 수 있다.
- Capacity rebalancing : 스팟인스턴스가 회수되려고 할때 다른 스팟인스턴스로 대체하여 설정했던 종량제 인스턴스와 스팟인스턴스의 비율을 유지해주는 역할을 하는 옵션이다.
- Spot fallback to pay-as-you-go : 활성화 시 Scale-out 타겟 스팟인스턴스의 재고가 부족할 때 종량제 인스턴스로 대체한다.
서비스 로직에 맞게 종량제와 스팟인스턴스 간의 비율을 조정하여 스케일링 그룹 구성이 가능하다.
Lifecycle hook

Lifecycle hook은 Auto Scaling 시 인스턴스가 종료 혹은 생성되는 경우 곧이어 수행할 작업을 지정할 수 있는 기능이다. 예를들어 Scale-out시 새로운 인스턴스가 생성되게 되면 특정 스크립트를 실행하거나 런타임 환경을 구성하는 작업을 수행하도록 hook이 직접 발동되거나 큐잉 메시지를 통해 작업을 지시할 수 있다. 마치 갓 입대한 신병들을 바로 부대로 보내지 않고 훈련소를 거치게 해서 사람을 만들어 놓는 느낌이라고 보면 되겠다.
