라라벨 Vapor 비용 & 성능 최적화 free

2019-08-06

벨의 모하메드 새이드(Mohamed Said)가 Vapor의 동작 원리를 소개한 글에 이어 비용과 성능에 관련된 블로그 글을 올렸습니다.


Vapor는 벨을 AWS의 서버리스 플랫폼에서 운용할 수 있게 해주는 서비스로, Vapor 비용은 한달에 39달러로 고정적이지만 AWS 비용은 쓰는 만큼 나옵니다. 그런데 쓰는 만큼 나오는게 과연 얼마나 나오는건지 감이 안오기 때문에 글을 썼다고 합니다.


AWS 비용 예시


AWS 비용은 두 가지로 구성된다고 합니다. 하나는 컴퓨팅 리소스 사용 비용이고, 다른 하나는 실행 횟수당 비용입니다. 블로그에서는 다음의 상황을 예로 설명했습니다.



  • 머신 메모리: 0.5G

  • 월간 리퀘스트 처리: 200만회

  • 평균 리퀘스트 처리 시간: 0.5초


컴퓨팅 리소스 사용 비용


컴퓨팅 리소스 사용 비용은 기가바이트-초(Gigabyte-seconds, GB-s)는 단위를 사용합니다. 위의 예는 0.5 2,000,000 0.5 = 500,000 GB-s 가 됩니다.


매달 400,000 GB-s를 무료로 주기 때문에 100,000 * 0.00001667 = 1.66$가 부과된다고 하네요.


실행 횟수당 비용


실행 횟수당 비용은 1백만회당 $0.2 고 합니다. 매월 1백만회는 무료로 주기 때문에 예제는 1백만회만 계산해서 $0.2가 부과된다고 하네요.


컴퓨팅 리소스 사용 비용 + 실행 횟수당 비용 = $1.86/월


최적화


비용이 산정되는 방을 보면 최적화를 어떻게 해야할지 대략 감을 잡을 수 있을 것 같습니다. Vapor는 벨 애플리케이션을 단 람다 펑션으로 전환해주지만 이렇게 하나의 애플리케이션만 쓰면 비용이 많이 낭비될 수 있습니다. 128MB가 필요한 작업과 3GB가 필요한 작업이 하나의 애플리케이션에 섞여 있으면 128MB가 필요한 작업에도 3GB 머신을 써야하기 때문입니다.


무거운 작업은 큐에 넣어 HTTP 람다의 부담을 줄여야 합니다. 그리고 큐를 처리하는 CLI 람다도 하나만 쓸게 아니 저메모리, 고메모리로 나누면 도움이 될 수 있습니다.


하나의 프로젝트로 리소스가 많이 필요한 작업과 리소스가 적게 드는 작업을 구분해서 처리하는게 복잡할 수 있으니, Vapor에서 프로젝트를 무제한으로 생성할 수 있는 점을 활용해서 프로젝트를 여러개로 쪼개는게 좋을 수도 있다고 합니다.


어렴풋이는 알겠는데 실제로 사용해봐야 확실히 체감이 되겠네요.


외부 서비스 통신 제한


시간이 돈입니다. 외부 서비스에 HTTP 리퀘스트를 보낼 때 타임아웃을 걸지 않으면요금 폭탄이 나올 수 있습니다.


큐 처리시 에러 핸들링 설정


적당한 재시도 횟수를 설정하지 않으면 벨이 실패한 큐를 계속 재시도해서 요금 폭탄이 발생할 수 있습니다.


최대 동시처리수 설정


벨 Vapor에서 쉽게 최대 동시처리수를 설정할 수 있습니다. 설정해둬야 서비스 거부 공격 위험에서 보호받을 수 있습니다.


마치며


원래 벨 개발하듯이 하고, 이를 Vapor에 올리기만하면 서버리스로 운용할 수 있다고해서 기대가 컸는데, 이 글을 보니 Vapor를 잘 활용하기 위한 또다른 노하우를 익혀야하나보네요. ㅠ 그래도 빨리 한 번 써보고 싶네요!





이현석

바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서를 쓰고, 클린 아키텍처 인 PHP를 번역했습니다. 2020년에 출간될 Laravel Up & Running 2nd Edition을 번역하고 있습니다.