본문으로 건너뛰기

Concurrency

1 AWS Lambda의 동시성과 스로틀링

  • AWS Lambda는 서버리스 컴퓨팅 서비스로, 동시성 관리와 스로틀링을 통해 효율적인 리소스 사용과 안정적인 성능을 제공합니다.
  • 이 글에서는 Lambda의 동시성 개념, 스로틀링 메커니즘, 그리고 관련된 주요 기능들을 살펴보겠습니다.

2 Reserved Concurrency

2.1 Reserved Concurrency란?

  • 동시성(Concurrency)은 Lambda 함수가 동시에 처리할 수 있는 인스턴스의 수를 의미합니다.
  • 즉, 여러 요청이 동시에 들어올 때 Lambda가 병렬로 실행할 수 있는 함수의 복사본 수를 나타냅니다.

2.2 Lambda의 동시성 특징

  • 동시성 한계: Lambda는 기본적으로 계정당 최대 1000개의 동시 실행을 지원합니다. 이는 모든 함수의 총 동시 실행 수를 의미합니다.
  • 함수 레벨 제어: 각 함수에 대해 "예약된 동시성"을 설정하여 특정 함수의 리소스 사용을 제한하거나 보장할 수 있습니다. 이를 통해 중요한 함수가 항상 실행될 수 있도록 보장할 수 있습니다.
  • 스로틀링: 동시성 한계를 초과하는 호출은 스로틀됩니다. 이는 시스템이 처리할 수 있는 양을 초과하는 요청을 제한하는 메커니즘입니다.

2.3 동시성의 중요성

  • 성능 최적화: 적절한 동시성 설정은 애플리케이션의 응답 시간을 개선하고 처리량을 증가시킵니다.
  • 비용 관리: 동시성을 제어함으로써 불필요한 함수 실행을 방지하고 비용을 최적화할 수 있습니다.
  • 리소스 관리: 특정 함수가 모든 가용 동시성을 소비하는 것을 방지하여 다른 중요한 함수의 실행을 보장할 수 있습니다.

3 스로틀링 동작

  • 스로틀링은 Lambda가 동시성 한계를 초과할 때 발생하며, 호출 유형에 따라 다르게 동작합니다:
    • 동기식 호출: ThrottleError (HTTP 429 상태 코드)를 반환합니다.
    • 비동기식 호출: 자동으로 재시도하며, 최종적으로 Dead Letter Queue (DLQ)로 이동합니다.

4 동시성 관리의 중요성

  • 동시성을 적절히 관리하지 않으면 다음과 같은 문제가 발생할 수 있습니다:
  • 많은 사용자가 있는 경우: Application Load Balancer를 통해 1000개의 동시 실행이 모두 사용될 수 있습니다.
  • 소수의 사용자나 API Gateway, SDK/CLI를 통한 호출: 스로틀링이 발생할 수 있습니다.
  • 이를 방지하기 위해 예약된 동시성을 설정하는 것이 중요합니다.

5 비동기식 호출과 재시도 메커니즘

  • S3 버킷과 같은 이벤트 소스에서 비동기식으로 Lambda 함수를 호출할 때:
    • 동시성이 부족하면 추가 요청은 스로틀됩니다.
    • 스로틀링 오류(429)나 시스템 오류(500시리즈)가 발생하면, Lambda는 이벤트를 대기열에 반환하고 최대 6시간 동안 함수를 다시 실행하려고 시도합니다.
    • 재시도 간격은 첫 시도 후 1초에서 시작하여 최대 5분까지 지수적으로 증가합니다.

6 Provisioned Concurrency

6.1 콜드 스타트

  • 새 인스턴스가 시작될 때 발생합니다.
  • 코드 로딩, 핸들러 외부의 코드 실행(초기화) 등으로 인해 지연이 발생할 수 있습니다.
  • 첫 번째 요청은 다른 요청보다 지연 시간이 길 수 있습니다.

6.2 프로비저닝된 동시성

  • 함수가 호출되기 전에 미리 동시성을 할당합니다.
  • 콜드 스타트를 방지하고 모든 호출에 대해 낮은 지연 시간을 보장합니다.
  • Application Auto Scaling을 통해 동시성을 자동으로 관리할 수 있습니다.
  • 참고: 2019년 10월과 11월에 VPC에서의 콜드 스타트가 크게 개선되었습니다.

7 예약된 동시성과 프로비저닝된 동시성 비교

7.1 Reserved Concurrency (예약된 동시성)

  • 함수에 대한 최대 동시 실행 수를 설정합니다.
  • 다른 함수와의 리소스 경쟁을 방지합니다.
  • 추가 비용이 없습니다.

7.2 Provisioned Concurrency (프로비저닝된 동시성)

  • 사전에 초기화된 실행 환경을 준비합니다.
  • 콜드 스타트를 방지하고 일관된 성능을 제공합니다.
  • 추가 비용이 발생합니다.

8 결론

  • AWS Lambda의 동시성 관리와 스로틀링 메커니즘을 이해하고 적절히 활용하면, 서버리스 애플리케이션의 성능을 최적화하고 안정성을 높일 수 있습니다.
  • 예약된 동시성과 프로비저닝된 동시성을 상황에 맞게 사용하여 리소스를 효율적으로 관리하고, 사용자에게 일관된 경험을 제공하세요.