스케일링과 동시성 제어

AWS Lambda로 구축하는 서버리스 애플리케이션

Claudio Canales

Senior DevOps Engineer

스케일링을 한 장으로

  • 수요 증가 -> 병렬 실행 증가.
  • 각 실행은 실행 환경을 사용합니다.
  • 동시성 = 현재 실행 중인 수.

수요 급증 -> 환경 확장

AWS Lambda로 구축하는 서버리스 애플리케이션

동시성이란?

  • 호출 1회 = 작업 1단위.
  • 동시성 = 현재 실행 중인 수.
  • 10개가 실행 중이면 동시성 = 10.

병렬 호출

AWS Lambda로 구축하는 서버리스 애플리케이션

필요 동시성 추정

  • 경험칙: concurrency = rps * duration.
  • 처리 시간을 줄이면 동시성도 줄어듭니다.
  • 이를 활용해 제한값을 안전하게 설정하세요.

동시성 계산 공식

AWS Lambda로 구축하는 서버리스 애플리케이션

예시: 200 ms에서 50 rps

  • 200 ms = 0.2초.
  • 50 * 0.2 = 동시 실행 10개.
  • 코드가 빠를수록 병렬 실행 수가 줄어듭니다.

동시성 계산 예시

AWS Lambda로 구축하는 서버리스 애플리케이션

제한: 계정 풀과 함수 슬라이스

  • 동시성은 계정 수준에서 제한됩니다.
  • 중요한 함수를 위해 풀의 일부를 예약하세요.
  • 나머지 함수는 남은 용량을 공유합니다.

계정 동시성 풀

AWS Lambda로 구축하는 서버리스 애플리케이션

예약 동시성: 하드 상한

  • 안전 밸브 역할을 합니다.
  • 병렬 작업 수를 제한합니다.
  • 상한을 초과하면 호출이 스로틀됩니다.
  • 함수 하나가 전체 용량을 소진하지 못하게 합니다.

예약 동시성 상한

AWS Lambda로 구축하는 서버리스 애플리케이션

스로틀링: 어떻게 나타나나요?

  • Lambda는 동시성 한도에 도달하면 스로틀링됩니다.
  • 호출자는 정상 실행 결과를 받지 못합니다.
  • 스로틀은 모니터링에서 확인할 수 있습니다.

스로틀링 신호

AWS Lambda로 구축하는 서버리스 애플리케이션

프로비저닝 동시성: 웜 용량

  • 미리 초기화된 환경의 풀입니다.
  • 보통 별칭(alias) 뒤에 위치합니다.
  • 요청이 더 빠르게 시작됩니다.

프로비저닝 동시성 웜 풀

AWS Lambda로 구축하는 서버리스 애플리케이션

콜드 스타트 vs 프로비저닝

콜드 스타트

  • 최초 초기화 지연이 발생합니다.
  • 첫 번째 요청이 설정 비용을 부담합니다.

프로비저닝

  • 초기화 작업을 미리 수행합니다.
  • 첫 번째 요청이 설정 비용을 부담하지 않습니다.

콜드 스타트 vs 프로비저닝 타임라인

AWS Lambda로 구축하는 서버리스 애플리케이션

예약 vs 프로비저닝 (해결하는 문제가 다릅니다)

  • 예약 동시성은 부하를 제어합니다.
  • 프로비저닝 동시성은 시작 지연을 제어합니다.
  • 프로덕션 함수 대부분은 두 가지를 함께 사용합니다.

예약 vs 프로비저닝 비교

AWS Lambda로 구축하는 서버리스 애플리케이션

다운스트림 시스템 보호

  • 데이터베이스는 처리할 수 있는 연결 수가 제한됩니다.
  • 동시성 상한이 이를 방지합니다.
  • 트래픽 급증이 장애로 이어질 수 있습니다.

동시성 상한이 데이터베이스를 보호

AWS Lambda로 구축하는 서버리스 애플리케이션

급증 트래픽 vs 안정 트래픽

  • 트래픽 급증 시 많은 병렬 환경이 생성됩니다.
  • 처리 속도가 느린 핸들러는 동시성을 높게 유지합니다.
  • 상한을 설정하면 급증을 완화할 수 있습니다.
  • 처리 시간 단축도 스케일링 전략 중 하나입니다.

급증 트래픽 vs 안정 상태

AWS Lambda로 구축하는 서버리스 애플리케이션

실패와 재시도가 부하를 증가시킵니다

  • 재시도는 트래픽을 증폭시킬 수 있습니다.
  • 동시성 제한으로 피해 범위를 줄일 수 있습니다.
  • 실패 루프는 의존 시스템을 과부하 상태로 만들 수 있습니다.

재시도로 부하 증가

AWS Lambda로 구축하는 서버리스 애플리케이션

간단한 튜닝 워크플로

  • 측정부터 시작하세요.
  • 스로틀이나 부하 압박이 발생하면 동시성 상한을 설정하세요.
  • 콜드 스타트가 지연에 영향을 준다면 프로비저닝 용량을 추가하세요.

측정 -> 상한 설정 -> 예열

AWS Lambda로 구축하는 서버리스 애플리케이션

핵심 정리

  • 동시성은 스케일링을 이해하는 데 도움이 됩니다.
  • 추정: rps * duration.
  • 예약 동시성은 부하를 제한합니다. 스로틀을 모니터링하세요.
  • 프로비저닝 동시성은 콜드 스타트 지연을 줄여 줍니다.

동시성 핵심 요약

AWS Lambda로 구축하는 서버리스 애플리케이션

연습해 봅시다!

AWS Lambda로 구축하는 서버리스 애플리케이션

Preparing Video For Download...