[AWS] [Capacity Rebalancing] 쉽고 간편하게 spot 적용 하는법

홍성환·2021년 10월 24일
2

AWS FOR ML-OPS

목록 보기
1/3
post-thumbnail

1. Intro

  • aws는 남아도는 인기없는 instance를 효율적으로 판매하기 위해 spot이라는 서비스를 제공한다.
  • aws의 ec2 instance의 life cycle은 크게 RI, on-demand, spot 3개가 있다
  • 각 타입이 뭔지 알고 적절히 사용하면 서버비를 크게 아낄 수 있는데 spot에 대해 알아보기전에 어떤 타입이 있는지 알아보자.

1-1 on-demand

  • 가장 기본 형태이다.
  • instance를 띄우고 특별한 일(aws의 물리 장비 관리로 인한 terminate. 보통 1달전 안내 메일이 오기 시작)이 없다면 사용자가 죽이기 전까지 계속 살아있게 된다.

1-2 Reseved Instance

  • ri는 한방에 1년이상쓸 인스턴스를 미리 구매해서 비용을 절약하는 방식이다.
  • 물건으로 비유하면 대량구매를 했을 때 싸게 살 수 있는 것이다.
  • 하지만 ri는 instance가 더이상 필요 없어지더라도 반품할 수 없다. 미리 한번에 싸게 구매했기 때문이다.
  • 대량구매 전 신중한 검토가 필요하다.
  • RI와 비슷하게 saving plans 등이 있다.

1-3 spot

  • 이번에 자세히 알아볼 타입이다.
  • aws에서 spot을 쓸 경우 on-demand 대비 특정 인스턴스 타입의 경우 85%까지 비용절감이 가능하다.
  • 운좋게 spot만 계속 쓸 경우 on-demand로 인해 100만원이 나오던 서버비용 중 무려 85만원을 아낄 수 있다!
  • spot은 비용을 크게 절감할 수 있는 대신 언제든 instance가 뺏길 수 있는(언제든 내 인스턴스가 종료될 수 있다 😱)
  • aws의 spot을 쓰기전 선택에 도움을 줄 수 있는 spot advisor라는 사이트가 있다.
    • 이 사이트에서는 spot 적용시 예상 비용절감액
    • 내 인스턴스가 얼마나 중단될 확률이 높은지 알 수 있는 중단 빈도를 볼 수 있다.
    • 중단 빈도가 5%이내라면 일주일도 넘게 안 꺼지고 버티는 경우가 많다.(물론 케바케)

1-4 Spot을 쓰기는 어려'웠'다.

  • aws는 spot 사용시 갑자기 꺼지는 것이 난감한 것을 알고 있기 때문에 종료되기 2분전 노티를 준다.
  • 기존에는 이 2분전 노티를 사용하여 ec2가 죽기전 새로운 인스턴스를 띄운다던지 하는 작업을 할 수 있게 했다.
  • 근데 이 2분이 매우 짧기도 하고 인스턴스가 죽기전 여러 작업을 하는 것이 매우 힘들다.

1-5 spot 쓰기 편해진 세상

  • 하지만 Amazon의 노력 Capacity Rebalancing으로 요즘은 spot을 쓰는것이 매우 편해졌다.
  • Capacity Rebalancing이 무엇인지 알아보자!

2. Capacity Rebalancing

2-1 Capacity Rebalaning

  • EC2 Auto ScalingCapacity Rebalaning 기능을 제공한다.
  • 이 기능을 통해 Auto Scaling group을 생성할 때 클릭 몇번을 통해 ondemand + spot의 비율을 적절히 조절하는 것에 더해 spot 장비를 안정적으로 운영 할 수 있다.

2-2-1 ASG 설정

  • auto scaling group을 만들때 아래 처럼 combine purchase option을 선택하고 Capacity rebalance를 선택하면 된다.

2-2-2 EB 설정

  • Elastic Beanstalk에서는 configuraiton 설정의 capacity 탭에서 아래처럼 combine purchae 옵션을 선택후 Enable capacity rebalancing을 선택하면 된다.

2-2-3 options

On-Demand base, On-Demand above base
  • auto scaling group이나 Elastic Beanstalk에서 설정해야할 주요 옵션으로 On-Demand baseOn-Demand above base 2개가 있다.
  • 이 설정을 통해 max(On-Demand base, On-Demand above base) 만큼의 개수만큼 ondemand 장비가 뜨게 된다.
  • 예를 들어 On-Demand base = 20대, On-Demand above base = 10%, current capacity =100대 라면
    • max(20, 100 * 0.1) = 20
    • 따라서 20대의 ondemand 인스턴스가 뜨게 된다.
  • 또한 instance
Instance types
  • 어떤 instance 타입을 쓸지이다.
  • spot을 함께 쓴다면 여러 타입의 instance를 설정하는 것이 좋다. 왜냐하면 aws 서울 리전에서 특정 instance 타입이 부족할 때 해당 instnace 타입 전체가 spot을 쓸 수 없는 상태가 되기 때문이다.
  • 이때 여러 instance 타입을 지정해준다면 한 instnace 타입 전체가 spot을 쓸 수 없는 상태가 되어도 다른 타입의 instance를 사용할 수 있다.
  • spot 중단비율(대강 중단 점수..?)은 spot advisor 사이트에서 볼 수 있다.

2-2 elevated risk of interruption

  • 2020 년 11월 이후로 아마존은 elevated risk of interruption 상태라는 것을 추가해줬다.
  • ec2가 죽기 2분전 보내주는 노티는 너무 빡빡하기 때문에 instance가 정말 죽기 직전 일 것 같은 상태 (때문에 안 죽을수도 있긴 하다) 에 있을 때 노티를 주는 것이다.
  • 2분보다 더 기간 시간이 주어지기 때문에 이 충분한 시간동안에 ondemand instance의 용량을 확보하고 spot instance를 미리 죽일 수 있다.
  • 그리고 이러한 작업(ondemand instance의 용량을 확보) 를 직접 해야한다면 쓰는데 좀 번거로울 수 있다.
  • 하지만 AWS는 이 작업을 대신 해주는 기능을 제공한다!

2-3 Handling Spot Interruptions

  • timeline of Capacity Rebalancing activity

  • 위 그림은 Capacity Rebalancing을 사용했을 경우 EC2 인스턴스의 lifecycle이다.

    1. 만약 instance가 죽을 것 같은 위기(elevated risk of interruption)가 오면 노티가 온다.
    2. elevated risk of interruption 상태에 있는 instance를 대체할 새로운 대체 instance를 띄우기 시작한다.
    3. 새로운 instance의 헬스 체크가 통과 된다.
    4. 죽일 instance를 ELB 타겟 그룹에서 제외시킨다.
    5. Lifecycle hook이 걸려 있으면 ec2가 죽기 전 실행해준다.
    6. 죽일 instance를 죽인다.
  • 즉 capacity rebalance 기능을 사용하면 아주 안전하고 편하게 클릭 한번으로 spot을 운용할 수 있게 된다.

  • 단점으로는 elevated risk 이기 때문에 실제로는 spot 장비를 안 뺏기고 살아 있는 상태로 유지할 수 있었던 가능성을 포기하고 대체 작업을 실행하다 정도이다.

3. 결론

  • AWS 사용시 서버비를 아낄 수 있는 가장 효율 적인 방법은 spot을 사용하는 것이다.
  • 하지만 spot 사용은 생각보다 까다로웠고, 비용상의 효율 때문에 울면서 쓸 수 밖에 없었다.
  • AWS의 2020년 11월에 도입된 capacity rebalance 기능은 spot을 좀더 안정적으로 편하게 쓸 수 있게 도와준다.
profile
Machine Learning Engineer: recsys, mlops

0개의 댓글