☁️ Tencent Cloud/☁️ Tencent cloud Notes

Auto Scaling 그룹에서의 Spot instance 할당

just in here

 

 

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이 직접 발동되거나 큐잉 메시지를 통해 작업을 지시할 수 있다. 마치 갓 입대한 신병들을 바로 부대로 보내지 않고 훈련소를 거치게 해서 사람을 만들어 놓는 느낌이라고 보면 되겠다.