서버리스로 웹서버를 배포하는 경우, 개발자 입장에서 인프라를 크게 관리하지 않아도 된다. 또한, 상시적으로 실행되어야 하는 서버가 없으므로 적게 사용할 경우 비용적인 장점이 있다. Lambda에 간단하게 웹서버를 배포할 때 참고할 수 있는 레퍼런스도 많고, 과정을 간소화해주는 Zappa
와 같은 라이브러리도 있어서 구현하기도 쉽다.
그러나, 서버리스 배포가 기존의 EC2, ECS기반 웹서버 배포에 비해 장점만 가지고 있는 것은 아니다. 실제로 서비스를 하는 경우 겪을 수 있는 문제점들이 있는데, 이에 대해 소개하고 해결할 수 있는 방법을 다뤄보려고 한다.
\tmp
디렉토리를 이용해 다운 받는다.coldstart 유형
Lambda 입장에서는 runtime 구성시에 발생하는 cold start만 cold start라고 하지만, 웹서버 입장에서는 request를 처리하기 위해 웹서버가 메모리에 로딩되는 과정 까지도 cold start라고 해야한다.
Execute Initialization Code
에 해당하는 부분이다.Execute handler code
부분에 해당한다.해결 방법
runtime 구성 + 코드 컴파일 과정시에 생기는 coldstart
- provisioned concurreny + application auto scaling 기능을 이용하면 해결할 수 있다.
웹서버 로딩으로 인한 coldstart
lambda는 hadler를 수행한 후 바로 꺼지는 것이 아니라, 5분간은 유지된다.
Zappa
에서 keep_warm
세팅을 통해 빈 request를 일정한 주기(5분 이내)로 보내준다
n
개의 동시성이 필요하다면 n
개의 lambda를 4분에서 5분마다 호출한다.
n
개를 순차적으로 호출한다면, 한 개의 lambda가 순차적으로 request를 처리하는 경우가 생긴다.time.sleep()
메서드를 이용한다.https://aws.amazon.com/blogs/compute/operating-lambda-performance-optimization-part-1/
https://pypy.dev/serverless/zappa-increase-unprovisioned-concurrency/#%EA%BC%BC%EC%88%98