본문 바로가기
IT 정보

AWS Lambda 사용시 주의점 (동시성)

by 완기 2022. 12. 22.
728x90
반응형

AWS Lambda로 간단한 서버리스 API를 구성하다가 오늘 문제점을 만났다.

 

What is AWS Lambda? - AWS Lambda

What is AWS Lambda? AWS Lambda is a compute service that lets you run code without provisioning or managing servers. Lambda runs your code on a high-availability compute infrastructure and performs all of the administration of the compute resources, includ

docs.aws.amazon.com

300x250

문제의 API는 간단한 캐싱 데이터를 가져가는 API인데,

갑자기 Response를 받기까지 시간이 너무 길어졌고,

이 데이터를 받아가는 클라이언트에서 에러를 캐치하여 슬랙으로 장애 알림이 왔다.

 

굉장히 의문이었다. 오래 걸리거나 복잡한 코드가 아니었고, 종속성면에서도 꽤나 가벼운 코드였다.

 

지표를 보니 함수 실행 성공률이 떨어지고 있었고, 실패율은 올라가고 있었다.

 

람다 함수 성공/실패 지표

320x100

람다 함수 요청 수

클라이언트에서 주기적으로 API를 호출하는 구조였는데,

함수 실행이 딜레이 되어 요청이 쌓여만 가서 위 이미지와 같은 지표를 그렸다.

 

람다 실행시간 그래프

초록색이 높은곳에 차트를 그리고 있다면 람다 함수 실행이 오래 걸렸다는 이야기다.

그러다가 AWS 공식 문서를 보고 해답을 찾았다.

 

https://aws.amazon.com/ko/premiumsupport/knowledge-center/lambda-concurrency-limit-increase/

람다 실행에는 동시성이란 개념이 있는데,

AWS 계정에 포함된 람다는 분당 최대 1000번 호출이 가능하다. (리전별 상이)

 

 

 

즉, 내 AWS 계정에 람다가 몇 개가 있던지, 한개의 람다 함수가 1000번 호출된다면 다른 람다 함수는 실행되지 않는다.

 

여기서 람다의 실행 구조를 알 필요가 있다.

람다는 사용자가 작성한 코드를 인스턴스에 이벤트로 전달하여 실행되는 서버리스 컴퓨팅 서비스다.

 

즉, 사용자가 서버를 구성하거나 신경 쓰지 않고 코드를 실행할 수 있다.

 

사용자 입장에서야 서버리스지만 이를 실제로 실행하는 AWS 입장에서는 인스턴스(서버)에서 실행하는 코드다.

이 인스턴스의 제한이 기본적으로 계정 및 리전당 횟수 제한이 있었던 것.

 


해결방법

1. 일단 실행되는 코드를 리팩토링하여 최적화를 진행했다.

그리고 관심사를 나눠 2가지 작업을 진행하던 API를 각각 2개의 람다로 분리했다.

람다 함수 성공,실패율

2가지 작업을 동시에 진행하다 보니 다른 람다와 동시성 문제가 생겨 쓰로틀링이 심하게 걸렸었고,

분리 후 지표는 위 이미지와 같다. (대장애를 겪고 안정적으로 다시 돌아온 모습..)

 

2. 예약된 동시성 설정

앞서 언급했듯 계정당 1000개의 동시성 제한이 있는데, 이 람다에만 1000개 중 350개의 동시성 횟수를 설정했다.

이렇게 설정하게 되면 이 람다는 동시성에 대해 보다 안정적으로 처리가 가능하다.

 

ps: 예약된 동시성 설정방법

AWS 콘솔에서 람다를 열고 구성 -> 동시성 -> 우측 상단에 편집

이 동시성 예약이 0이 되면 람다 함수가 실행되지 않으니 잘 설정하자.

 

 

% 그 외 해결법

프로비저닝 된 동시성 구성이란 항목이 있는데,

이 기능은 1000대의 동시성 횟수 제한 이외에 별도에 이 함수만을 위한 인스턴스에 코드를 실행하여 안정성을 보장한다.

 

람다 함수에서 새 버전을 발행하여 해당 버전에 프로비저닝으로 동시성을 설정하면

기존에 언급한 동시성 걱정 없이 람다 함수를 실행할 수 있다.

 

그렇지만 편한 만큼 돈을 지불해야 한다.

 

코드량이 많아지면 월별 요금이 크게 올라감을 확인했으니 

비용 폭탄을 맞고 싶지 않다면 조심해야 한다.

 

 

참고문서 :

 

Lambda 예약된 동시성 관리 - AWS Lambda

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

 

 

Lambda function scaling - AWS Lambda

Lambda function scaling Concurrency is the number of in-flight requests your AWS Lambda function is handling at the same time. For each concurrent request, Lambda provisions a separate instance of your execution environment. As your functions receive more

docs.aws.amazon.com

 

 

Lambda 함수에 대한 동시성 한도 증가 요청

닫기 Pallavi의 동영상을 통해 자세히 알아보기(3:57)

aws.amazon.com

 

 

Lambda의 실행 문제 해결 - AWS Lambda

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

728x90
728x90

댓글