[AWS] Lambda mode

Falcon·2021년 5월 3일
2

aws

목록 보기
2/33
post-thumbnail

🎯 Goal

  • AWS Lambda의 2가지 모드 Reserved mode , Provisioned mode 의 특징과 차이점을 이해한다.
  • 언제 어느 모드를 써야하는지 판단할 수 있다.

When to use

왜 우리가 람다의 2가지 모드에 대해 알아야 하는가?

"입장 버튼이 웹사이트 내에 있고 평소에는 접속자 수 50명 내외로 트레픽이 잔잔한데, 매일 자정마다 선착순 쿠폰 발급 이벤트 때문에 매일 자정에만 람다 갯수가 동시에 수백개로 폭발한다."
특정 콘서트 티켓팅, 수강신청, 이벤트 등에 의해 갑자기 트레픽이 폭발할 경우 람다 모드를 조절함으로써 대처할 수 있다.

이런 상황에서 자정에 람다를 마구마구 한꺼번에 실행되면 다음과 같은 응답메시지를 얻는다.

429 'Too Many Request Exception'
500 'Internal Server Error'

AWS Service Quotas 정책에 의해 지역별로 모든 서비스는 리소스가 가질 수 있는 용량이나 실행 수의 제한이 있다. Lambda는 ap-northeast-2 (서울) 기준 기본 1,000개의 동시성 제한을 갖는다.
동시성 제한이 걸리면 어떤 현상이 일어나는지는 여기 를 참조해보자.

🤔 근데 람다는 알아서 스케일업되지 않아요?

좋은 질문이다. 기본적으로 Auto-Scaling 메커니즘을 갖고있다. (AWS 짱짱) 그럼에도 불구하고 충분하지 않다.

최초 버스트 이후 함수의 동시성은 매분 500개의 추가 인스턴스까지 확장될 수 있습니다. 이러한 확장은 모든 요청을 처리할 만큼 인스턴스가 충분해질 때까지 또는 동시성 한도에 이를 때까지 계속됩니다. 함수가 확장하는 속도보다 더 빠르게 요청이 수신되거나 함수가 최대 동시성에 도달한 경우 추가 요청은 조절 오류(429 상태 코드)로 인해 실패합니다.

-AWS Document

'매분' 이다. "점진적으로 트레픽이 분당 50개 -> 150개 -> 250개 ..-> ... 증가한다면 버티겠지만 이렇게 특정 시간대에 몰리는 경우는 감당해낼 수 가 없다"
Lambda 가 동시성을 확보하기 전에 (Scale-out 전에) Fail🚫 이 나버릴 것이다.


Reserved vs Provisioned

구분ReservedProvisioned
Descriptiona pool of requests that can only be used by its function and also prevents its function from using unreserved concurrencyalways prepared to respond to this function
When to uselimit or ensure to reach a cretian level of concurrencyscale without fluctuations in latency. (always warm start)

reserved limit >= Provisioned limit
⚠️ can't allocate provisioned concurrency on an alias that points to the unpublished version $LATEST

AWS CLI, Management Console SDK or CloudFormation 으로 on/off 가 가능하다.
AWS Auto-Scaling : 동시성 최소-최대 범위를 설정할 수 있다.

📌 Provisioned mode일 경우 요청 폭발시 동시성을 최대범위 내에서 지연시간 변동없이 확장이 가능하다. 또, 항상 예약된 동시성에만 적용 가능하고 항상 Warm Start 한다.

⚠️ Lambda @Edge 는 Provisioned mode 를 지원하지 않는다.

Provisioned Concurrency is not supported with Lambda@Edge

-AWS Document

=> 🙅🏽‍♂️ Provisioned Mode 로 동시성 예약을 전부 할당하면 해당 람다는 Internal Server Error를 발생시킨다.

Lambda@Edge ?

사용자에게 더 가까운 위치에서 코드를 실행하여 latency 를 줄이는 람다 서비스이다.
베이스가 되는 리전은 존재한다. (당연히 베이스 리전에서 실행 및 응답 속도가 가장 빠르다.)

📝 비교 분석

indexProvisioned Mode with RegionalReserved Mode with Edge
🌐 RegionSpecific one regionGlobal
🔥 Start LatencyLow (Always warm start)Cold start or Warm Start
📈 Latency fluctuation when to scale upX (Not Exists)O (Exists)
💵 Costexpensivecheap

Regional + Provisioned Mode 를 써야할 때

  • 특정 지역 서비스 (한 국가)
  • 실시간 서비스 (사용자 수가 늘어도 응답시간이 일정 속도 이상 나와줘야 하는)
  • 서비스 사용 시간대가 정해져 있는 경우 (Provisioned Mode On/Off 가능)
  • 💳 예산이 충분한 경우

Edge + Reserved Mode 를 써야할 때

  • 글로벌 서비스
  • 응답속도가 중요하지 않은 서비스
  • 서비스 사용시간대가 정해져있지 않은 경우
  • 💳 예산이 충분하지 않은 경우

🔗 Reference

profile
I'm still hungry

0개의 댓글