AWS(Amazon Web Service)

[AWS] Spot Instances 및 Spot 집합

yunseohhe 2024. 9. 16. 10:18

Spot Instances(스팟 인스턴스)

  • 아주 짧은 워크로드를 위한 것이다.
  • 아주 저렴하다. 하지만 언제라도 그 인스턴스들이 손실될 수 있어서 신뢰성이 낮다.
  • 온디맨드에 비해 최대 90%까지 할인이 된다.
  • 배치 작업 및데이터 분석, 장애 복원력이 뛰어난 워크로드 등에 사용한다.
      : 아주 중요한 작업이나 데이터베이스에는 적절하지 않다.
  • 인스턴스의 스팟 가격이 지불하고자 하는 최대 가격보다 낮다면 해당 인스턴스를 유지하게 된다.
      : 시간당 스팟은 오퍼와 용량에 따라 달라진다.
  • 스팟 가격이 정의된 최대 가격을 초과하면, 두가지를 선택할 수 있다.(2분의 유예시간이 주어진다.)
      - 하던 작업을 모두 중지하고 인스턴스를 중지한다. 그러다가 스팟 가격이 최대 가격 아래로 내려가면, 인스턴스를 다시 시작하고 중단했던 곳부터 재개하는 것이다.
      - EC2 인스턴스에서 상태가 필요하지 않다면 그냥 인스턴스를 종료해버리면 된다. 그러면 언제든 작업을 다시 시작할 때 새로운 EC2 인스턴스로 시작할 수 있다.

 

Spot Block(스팟 블록)

  • 지정된 기간 동안 스팟 인스턴스를 차단하는 것이다. 그래서  AWS가 스팟 인스턴스를 회수하는 것을 원하지 않을 때 사용할 수 있다.
  • 1~6시간까지 가능하다. 이 시간 동안 중단 없이 해당 블록을 사용할 수 있다고 규정되어 있다.(하지만 아주 드물게 인스턴스가 회수되는 경우도 있다고 한다.)

 

요청 유형

  • 스팟 인스턴스 일회성 요청
     : 스팟 요청이 완료되는 즉시 인스턴스가 시작된다. 그리고 스팟 요청이 사라진다.
  • 스팟 영구 인스턴스 요청
     : 스팟 요청이 유효한 기간 동안은 이 인스턴스 수도 유효하다는 뜻이다. 즉, 인스턴스가 어떤 이유로든 중지되거나, 스팟 가격을 기준으로 중단되는 경우 스팟 요청이 다시 실행되고, 유효성이 확인되면, 스팟 인스턴스가 다시 시작되는 것이다.
  • 밑의 이미지에서 이해하면 좋은 부분
      : 스팟 요청을 취소하려면, 스팟 요청이 열려 있는 상태, 즉 활성 상태이거나, 비활성화 상태여야 한다는 것이다. 즉 실패한 것도 아니고 취소된 것도 아니며 닫힌 것도 아니라는 뜻이다.
      : 스팟 요청을 받고 취소하는 경우에는 이전에 시작한 인스턴스를 종료하는게 아니라 먼저 스팟 요청을 취소하고, 그 다음에 관련 스팟 인스턴스를 종료해야 한다.
       ( 스팟 인스턴스를 먼저 종료해버리면, AWS는 스팟 요청으로 다시 돌아가서 '3개의 인스턴스를 원한다고 했는데 현재 인스턴스 0개 있군'이라고 하면서 3개의 인스턴스를 다시 시작해버리려고 한다.)

Spot Instnace 예시 1 (출처 : 구글이미지)

 

Spot Instnace 예시 2 (출처 : 구글이미지)

 

 

Spot Fleets(스팟 플릿)

  • Spot Fleets = set of Spot Instances + (optional) On-Demand Instances
      : 스팟 인스턴스의 집합이다. 선택적으로 온디맨드 인스턴스 세트도 있다. 그래서 플릿(무리)라고 부르는 이유이다.
  • 비용을 절감하는 궁극적인 방법이다.
  • 사용자가 정의한 가격 제한으로 목표 용량을 충족하기 위해 최선을 다한다.
      : launch pools(런치 풀)에서 시작한다. (예시 : 다양한 인스턴스 유형, 다양한 OS 및 다양한 가용성 영역)
      : 그럼 플릿이 가장 적합한 런치 풀을 선택한다.
      : 스팟 플릿이 예산에 도달하거나 원하는 용량에 도달하면 인스턴스 시작을 중지한다.
  • Strategies to allocate Spot Instances(스팟 플릿에 스팟 인스턴스를 할당하는 전략)
      - lowestPrice(최저 가격)
        : 가장 낮은 가격인 풀에서 인스턴스를 시작하기 때문에 비용이 최적화된다.
        : 워크로드가 매우 짧은 경우 좋은 옵션이다.
      - diversified(다양한)
        : 스팟 인스턴스는 모든 풀에 분산된다. 
        : 한 풀이 사라져도 다른 풀은 여전히 활성화되어 있으니깐 가용성과 긴 워크로드에 적합하다.
      - capacityOptimized(용량 최적화)
        : 원하는 인스턴스 수에 맞는 최적의 용량을 가진 풀을 갖게 된다.
        : 먼저 사용 가능한 용량이 가장 큰 풀을 선택하고 그 중 가격이 가장 낮은 풀을 선택하는 전략이다.
        : 대부분의 워크로드에 가장 적합한 선택이다.
  • 스팟 플릿이 복잡해 보이지만 이것만 기억!!
      - 스팟 플릿을 사용하면 여러 개의 런치 풀과 여러 인스턴스 유형을 정의할 수 있다.(= 원시 전력만 신경쓰면 된다)
      - 스팟 플릿이 자동으로 가장 낮은 가격의 스팟 인스턴스를 요청한다.
      - 적절한 스팟 인스턴스 풀을 선택하여 최대로 비용을 절감할 수 있을 만큼 똑똑하기 때문에 스팟 플릿은 스팟 인스턴스를 기반으로 추가 비용을 절감할 수 있다.

 

스팟 플릿과 스팟 인스턴스의 차이

  • 간단한 스팟 인스턴스 요청을 하는 경우는 원하는 인스턴스 유형과 AZ를 정확히 알고 있는 경우이다.
  • 스팟 플릿을 요청하는 경우는 조건을 만족하는 모든 인스턴스 유형과 모든 AZ를 선택하라는 것이다. (조건은 예를 들어 가장 낮은 가격으로)