November 29, 2014

aws spot instance와 가격 변동 그래프, 그리고 전략

AWS EC2 Spot Instance

AWS의 인스턴스 구매 타입에는 총 세 가지가 있다. 그 중에 Spot Instance라고, 실시간으로 변하는 가격 폭에 맞춰서 내가 제시할 수 있는 최대 가격을 제시해 두면, 인스턴스의 가격이 내 최대가를 넘지 않는 변동폭 내에서 값을 지불하고 인스턴스를 사용하는 구매 타입이 있다. 이 타입의 제일 큰 장점은 가격이 많이 나와야 일반 인스턴스의 30%정도이며, 심한 것들은 10%도 되지 않는다. 그러니까 스팟 인스턴스를 하나 사서 대략 8시간 돌리는 것과, 일반 인스턴스 한 시간의 가치가 비슷하다는 것이다. 우왕.

가격 차이가 어마어마하게 나기 때문에 단순하게 생각하면, 온디맨드고 뭐고 다 필요없이 스팟 인스턴스만 사용하면 되는 것이 아닌가? 라고 생각할 수도 있는데 세상이 그렇게 호락호락하지 않다. 실시간 가격이 내가 제시한 최대가를 넘어버리면 인스턴스가 예고 없이 그냥 꺼지게 되는 것이다. 따라서 이 구매 타입은 중간에 꺼져도 아무런 문제가 없는 인스턴스에 사용하는 것이 좋겠다. Vimeo에서는 스팟 인스턴스를 이용해서 동영상을 재빠르게 인코딩 후 없애버린다는 이야기를 들은 것도 같다.

현재 우리 회사 내에서는 각 인스턴스가 SQS로부터 메시지를 받아 작업을 처리하고, 작업이 무사히 완료되었을 경우 메시지를 삭제하도록 되어 있다. 중간에 인스턴스가 삭제되더라도 작업이 완료되지 않았다면 메시지가 삭제되지 않고 다시 visible로 뜨기 때문에, 이런 구조로 되어 있다면 충분히 spot instance가 강점이 있다고 본다.

가격 그래프

c3.xlarge spot instances price history in ap-northeast-1

그래프는 세 달치 ap-northeast 지역의 c3.xlarge 인스턴스 가격을 나타낸 그래프다. 이 그래프를 보게 되면 여러가지 재미있는 사실을 발견할 수 있다.

가격은 매 시간마다 변경된다

우선 그래프는 톱니 형태로 그려진다는 것이다. 인스턴스의 가격은 몇 번씩 오르다가 떨어짐을 반복한다. 따라서 내가 현재 확인한 인스턴스의 최저가는, 잠시 후에는 최저가가 아닐 수 있다는 것이다. 따라서 현재가와 거의 차이가 없는 인스턴스의 가격을 적어서 냈다가는 잠시 후에 인스턴스가 사라지는 비극을 겪을 수도 있다.

히스토리를 보고 예측할 수 있다

그림을 캡쳐하진 않았지만, 일주일 치 그래프를 보게 되면 거의 매번 같은 시간에 인스턴스의 가격이 오르고 또 같은 시간에 가격이 떨어짐을 알 수 있다. 이게 거의 매일 반복된다. 인스턴스의 가격에 영향을 줄 정도의 사용자들이, 이 인스턴스들을 매번 같은 역할로 같은 시간대에 사용하고 있다는 뜻이다. 물론 이 인스턴스들은 사람이 수동으로 사는게 당연히 아니다. 수행하는 것도 아니고 매일 똑같은 시간에 인스턴스를 구매할리가 없지 않는가. aws api를 사용해서 자동으로 스팟 인스턴스를 구매하고, 더 이상 필요 없어지면 인스턴스가 삭제되도록 구성되어 있다는 뜻이다. 아마도 이거 auto scaling이 아닐까 싶다.

따라서 인스턴스를 구매함에 있어 이전까지의 히스토리를 보고, 안그래도 저렴한 인스턴스 가격이 더욱 저렴할 때 구매하는 등의, 타이밍을 노리는 전략 또한 가능하다.

인기가 있는 인스턴스가 있다

spot_instance_m3mediumspot_instance_t1micro

다른 그래프를 보자. 왼쪽은 m3.medium, 오른쪽은 t1.micro 인스턴스의 가격 변동 그래프다. 위의 그래프까지 해서 세 개를 살펴보면 m3.medium 그래프가 다른 그래프에 비해 변동폭이 조금 작고 규칙적인 변화가 적은 것을 알 수 있다. 가격 변화가 적다는 것은 수요가 올라가면 가격이 크게 올라가는 스팟 인스턴스의 특성상, 인스턴스가 다른 것보다 덜 팔린다고 추측할 수 있다. 이는 t1.micro와 비교하면 확연해지는데, 굉장히 일정한 규칙을 보이는 것과는 참 대조적이다.

내 생각에는, 어차피 가격이 싼 스팟 인스턴스인데 아예 싼걸 쓰거나 조금 비싼걸 싸게 쓸 생각을 하지, 어중간한 인스턴스를 쓰려고 하는 사람이 더 적지 않을까…? 싶다.

제시가는 가능한 가격만 쓰자

spot_instance_c3.8xlarge

마지막으로 c3.8xlarge의 일주일치 가격 변동 그래프를 살펴보자. 굉장히 가격이 일정한데, 26~27일 사이에 가격이 3달러까지 치솟았다. 대부분의 인스턴스는 당연히 3달러같은 터무니없는 값을 제시하지 않았을 것이므로 이 순간 인스턴스가 모두 종료되었겠지만, 만약 3달러보다 큰 가격을 제시했을 경우 인스턴스는 종료되지 않는다.

다만 문제는 이 상황에서 발생한다. 만약 터무니없는 가격으로 제시가를 내 인스턴스가 종료되지 않도록 만든 경우, 그 인스턴스의 가격을 실제로 지불해야 한다는 것이다. 위의 예는 약 3달러였지만 999달러가 된 경우도 있다고 하니, 말도 안되는 가격은 역시 제시하지 않는 것이 좋겠다.

스팟 인스턴스 가격 제시 전략

따라서 위의 여러 가지 사실을 토대로, 가격을 제시하는 몇 가지 전략을 세울 수 있다.

  1. 현재 최대가보다 아주 살짝 높은 금액으로 제시한다.
  2. 일정 기간 동안의 최대가를 본 후에 그 최대가를 제시한다.
  3. 온디맨드 가격을 최대가로 제시한다.
  4. 온디맨드 가격의 두 배 이상을 제시한다. 1번의 장점은 할 수 있는 한 가장 최소한의 금액을 투자한다는 것이다. 사실은 이것보다 더 좋은 장점이 있는데, 인스턴스 가격이 제시한 가격을 넘어서서 종료되는 경우에는 비용을 받지 않는다는 것이 바로 그것이다. 이 방법을 사용하려면 작업이 금방 끝나는 것이어야 하며, 얼마간의 통계를 통해 변하는 가격을 예측할 수 있어야 하고, 또한 작업을 완료하지 못해도 상관이 없어야 한다. 그리고 예측과는 다르게 강제 종료되지 않는-_- 경우, 한 시간을 넘어버리면 두 시간의 비용을 받으므로 반드시 59분에는 인스턴스가 terminate 될 수 있도록 어떤 자동화된 컨트롤이 되어야 한다.

2,3,4번의 경우 별 의미는 없고 다 비슷한데, 인스턴스가 쉽게 꺼지면 안되는 경우에 적용하면 되겠다. 돈의 액수와 그 간절함이 같다고 보면 될듯. 다만 어느 정도의 가격을 넘어서는 경우 문제가 발생하는데, c3.8xlarge 그래프와 같은 경우에 생각보다는 더 많은 지출이 생길 수도 있다는 것. 또한 어차피 그럴 일 없으니 나는 최대가를 999로 제시해야지 하는 사람도 있을지 모르겠는데, 위에 쓴 대로 독박을 쓸 경우가 생기기 때문에 그렇게 제시하면 안될 것 같다.

Spot Instance는 어디에 사용해야 하는가?

AWS EC2 Pricing 부분에 정리되어 있지만 다시 한 번 정리하면 다음과 같다.

  • 이미지/동영상 인코딩
  • 빅데이터 분석
  • 테스트
  • 데이터 크롤링
  • … 중요한 것은 큰 컴퓨팅 파워를 이용해서 단시간에 끝나는 작업을 위해 사용하는 것이 제일 좋다는 것이다. 예를 들어 온디맨드 m3.medium을 이용해서 처리하는 작업이 1시간 이상 걸리는 경우, 그냥 스팟 인스턴스 c3.2xlarge를 이용해서 15분도 안되어 처리할 수도 있는 것이다.

결론

AWS의 비용을 최적화하기 위해 여러 가지 방법을 사용할 수도 있는데, 가장 큰 효과를 볼 수 있는 것이 바로 Spot Instance 구매 타입이다. Reserved Instance의 경우, 가격은 매우 저렴하지만 선결제 금액이 매우 부담스럽기 때문이다.

AWS를 사용하게 되면 반드시 자신이 이 자원들을 어느 용도에 사용할 것인지 명확히 하여야 한다. 그 중에서 덜 중요한 작업에 대해서는 Spot Instance를 적극 적용하도록 하면 괜찮겠다.