반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

DevOps Tasks

AWS Step Functions 를 이용한 Lambda 처리 전략 본문

AWS

AWS Step Functions 를 이용한 Lambda 처리 전략

데밥스 2024. 9. 28. 14:08
728x90
반응형

Overview

기존 시스템에서는 Lambda 간 호출과 API Gateway에서 발생하는 Timeout 문제로 인해 안정성과 성능 저하를 경험했습니다.
특히, Lambda 함수 간 호출 시 외부 네트워크 경로를 거치며 발생하는 Timeout 제한과 GPT 전처리 작업의 추가로 인해 API Gateway의 Timeout이 빈번하게 발생했습니다.
이를 해결하기 위해 AWS Step Functions를 도입하여 Lambda 호출 간 발생하는 타임아웃을 해결하고, 동시에 시스템의 동시성 제어 및 성능을 최적화했습니다.
Step Functions의 비동기 처리와 병렬 작업 관리를 통해 API Gateway의 제한을 극복하고 Lambda의 과부하를 방지하며, 작업 재시도 및 대기 기능으로 시스템의 안정성을 더욱 강화했습니다.
Step Functions 도입 전후의 주요 문제점과 해결 방법을 아래에서 자세히 살펴보겠습니다.


문제점 정리

Lambda 간 호출 시 Timeout 발생

  • 문제 : Lambda 함수가 다른 Lambda 함수를 호출할 때, 호출 경로가 외부 네트워크를 거치며 TimeOut (350초 제한)이 발생.
  • 원인 : NAT Gateway를 통한 호출이 이루어져 TimeOut에 걸림.
  • 영향 : Lambda 간 호출 실패로 시스템 성능 저하 및 지연 발생.

 
GPT 전처리 작업으로 인한 API Gateway Timeout 문제

  • 문제 : 기존 API에 GPT 전처리 작업이 추가되면서, 전처리 작업 시간이 30초 이상 소요됨.
  • 원인 : GPT 전처리 작업이 복잡해 처리 시간이 길어졌고, API Gateway의 최대 TimeOut 제한 (29초)을 초과함.
  • 영향 : API Gateway에서 Timeout 발생으로 인해 요청 실패.

Lambda 간 호출 Timeout 문제 해결 Flow

1. ListExecutions 단계

  • 먼저, 현재 실행 중인 다른 Step Function 작업들을 조회합니다.
  • 이 과정에서 RUNNING 상태인 실행 목록을 가져옵니다.

2. CountExecutions 단계

  • 실행 중인 Step Function의 개수를 계산하여 count 변수에 저장합니다.

3. CheckExecutionLimit 단계

  • 실행 중인 작업이 10개 이하인지 확인합니다.
    • 10개 이하일 경우, 다음 단계인 renderer로 진행합니다.
    • 10개 초과 시, WaitAndRetry 단계로 이동합니다.

4. WaitAndRetry 단계

  • 실행 중인 작업이 10개를 초과하면, 60초 대기 후 다시 ListExecutions 단계로 돌아가 재시도합니다.

5. Renderer 단계

  • 실행 중인 작업이 10개 이하일 경우, 각 rendererInputs 항목에 대해 병렬로 PDF 렌더링 작업을 수행합니다.
  • 이 작업은 Lambda 함수를 호출해 처리됩니다.
  • Lambda 호출 실패 시, 최대 3번 재시도하며, 재시도 간격은 기하급수적으로 증가합니다.
    • 기하급수적 "BackoffRate": 2
      • BackoffRate가 2일 경우, 재시도 간격이 매번 2배로 증가

6. Merger-Compressor 단계

  • 모든 렌더링이 완료되면, 렌더링 된 파일들을 병합하고 압축하는 Lambda 함수를 호출하여 마지막 작업을 수행합니다.
  • 이 단계에서도 실패 시 최대 3번 재시도합니다.

이점

Lambda 함수의 동시성 제어

  • 동시 실행 제한 : 작업 수를 10개 이하로 제한해 Lambda 함수의 과도한 실행을 방지.
  • 리소스 과부하 방지 : 동시 실행 제한을 통해 Lambda 리소스를 안정적으로 유지하고 비용을 절감.

타임아웃 및 재시도 관리

  • 재시도 로직 : Lambda 오류 시 최대 3회 자동 재시도하며, 재시도 간격은 기하급수적으로 증가.
  • 타임아웃 해결 : Step Functions의 재시도 정책으로 Lambda 타임아웃 문제 완화.

병렬 처리 및 효율성

  • 병렬 작업 관리 : 여러 PDF 작업을 병렬로 처리해 속도 및 처리 효율을 극대화.
  • 효율성 향상 : 병렬 처리와 상태 관리를 통해 Lambda 호출 최적화.

대기 및 시스템 안정성 관리

  • Wait & Retry : 동시 실행 제한에 도달할 경우 대기 후 재시도해 시스템 과부하를 방지.

비용 관리

  • Lambda 비용 절감 : 동시 실행 제한과 재시도를 통해 불필요한 재실행과 오류로 인한 추가 비용 절감.

 


GPT 전처리 작업으로 인한 API Gateway Timeout 문제 해결 요약


1. ListExecutions

  • 현재 실행 중인 다른 Step Functions 작업을 조회합니다.
  • 이 단계에서는 RUNNING 상태인 작업 목록을 가져와서, 현재 얼마나 많은 작업이 동시에 실행되고 있는지 확인합니다.

2.CountExecutions

  • 조회된 Step Function 작업의 개수를 계산하여, 이 개수를 기준으로 다음 단계에서 작업이 진행될지 대기할지를 결정합니다.

3. CheckExecutionLimit

  • 실행 중인 작업의 개수가 3개 이하일 경우, 다음 전처리 작업 단계로 넘어갑니다.
  • 3개를 초과하면, WaitAndRetry 단계로 이동해 60초 동안 대기한 후 다시 작업 개수를 확인합니다.
  • 이는 동시 실행 작업 수를 제어하여 시스템이 과부하에 빠지지 않도록 하는 기능입니다.

4. 병렬 전처리 작업

  • customQuestionPreprocessingMap: customQuestionPreprocessingList 배열을 병렬로 처리하며, 각 항목에 대해 Lambda 함수를 호출해 GPT 전처리 작업을 수행합니다.
  • ProfilePreprocessingMap: 전처리를 병렬로 처리하는 단계로, 2가지 전처리를 각각 병렬로 실행합니다.
    • 이 단계에서는 전처리할 항목이 없을 경우 SkipResumePreprocessingSkipCoverLetterPreprocessing 단계를 통해 해당 작업을 건너뜁니다.
  • 마지막으로 solverAnalysis 단계에서, 전처리된 데이터를 바탕으로 GPT 분석 작업을 수행합니다.
 

이점

비동기 처리

  • API Gateway의 Timeout 문제 해결 : Step Functions는 작업을 비동기적으로 처리하여 API Gateway의 29초 Timeout 제한을 극복하고, 장시간 소요되는 작업도 안정적으로 수행 가능.

병렬 처리

  • 작업 속도 향상 : Step Functions의 Map 상태를 활용해 여러 전처리 작업을 병렬로 처리함으로써, 전반적인 작업 속도가 향상

배열 처리 및 건너뛰기 기능

  • 배열 처리 : PreprocessingList 배열을 병렬로 처리하여 각 항목에 대해 GPT 전처리 작업을 수행
  • 건너뛰기 기능 : 전처리 항목이 없을 경우, 해당 작업을 자동으로 건너뛰어 불필요한 처리 비용과 시간을 절감

동시성 제어

  • Lambda 과부하 방지 및 성능 안정화 : MaxConcurrency 값을 설정하여 병렬로 실행되는 작업 수를 최대 50개로 제한함으로써, Lambda 함수가 과부하에 빠지지 않도록 관리

재시도 및 대기

  • 시스템 안정성 확보 : 실행 중인 작업이 너무 많을 경우, WaitAndRetry 단계에서 60초 대기 후 다시 시도하여 동시 실행을 제어

마무리

이번에 AWS Step Functions를 도입하면서 Lambda 호출과 API Gateway 타임아웃 문제를 한 번에 해결할 수 있었습니다.
동시 실행 제한과 병렬 처리를 통해 작업 효율성도 높아졌고, 재시도 기능 덕분에 오류 처리도 한층 안정적이 되었습니다.
덕분에 시스템 성능도 개선되고 비용 절감 효과도 봤습니다.
앞으로 더 복잡한 작업에도 유연하게 대응할 수 있는 기반을 마련했다는 점에서, 확장성 면에서도 큰 이점을 얻을 수 있을 것 같습니다.

728x90
반응형