"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > AWS SnapStart - 부분 Lambda 계층을 사용하여 Java로 콜드 및 웜 스타트 측정(1)

AWS SnapStart - 부분 Lambda 계층을 사용하여 Java로 콜드 및 웜 스타트 측정(1)

2024-08-24에 게시됨
검색:505

AWS SnapStart - Part Measuring cold and warm starts with Java using Lambda layer (1)

소개

Java 21 Lambda 함수에 대한 레이어 생성, 게시 및 사용 방법 블로그 게시물에서 Java 21을 사용하여 첫 번째 Lambda 레이어를 게시했습니다. 이 기사에서는 이 Lambda 레이어를 사용하여 애플리케이션을 생성한 다음 콜드 및 웜 스타트를 측정합니다. SnapStart를 활성화하지 않고 SnapStart를 활성화하고 DynamoDB 호출 프라이밍 최적화를 적용한 경우입니다. 또한 Lambda 레이어를 사용하지 않고 다양한 Lambda 메모리 설정을 사용하여 Java 21의 콜드 및 웜 스타트 측정 문서에서 수행한 POM 파일의 모든 종속성을 제공하지 않고 결과를 측정과 비교할 것입니다.

Lambda 계층을 사용하여 Java 21로 콜드 및 웜 스타트 측정

실험에서는 샘플 애플리케이션을 사용하겠습니다. 기본적으로 AWS SAM 템플릿에는 API 게이트웨이 요청에 응답하고 DynamoDB의 API 게이트웨이에서 받은 ID로 제품을 검색하는 2개의 Lambda 함수가 정의되어 있습니다. 하나의 Lambda 함수 GetProductByIdWithPureJava21LambdaWithCommonLayer는 SnapStart 유무에 관계없이 사용할 수 있으며 두 번째 GetProductByIdWithPureJava21LambdaAndPrimingWithCommonLayer 함수는 SnapStart 및 DynamoDB 요청 호출 프라이밍을 사용합니다.

Lambda 레이어를 통해 제공되는 종속성은 애플리케이션의 pom.xml 파일에 "제공"되는 범위를 갖습니다.

AWS SAM 템플릿의 Lambda 함수에 대한 Java 21 Lambda 함수용 게시 및 사용 레이어를 생성하는 방법 문서에서 생성된 Lambda 레이어를 연결하려면 다음과 같이 Lambda 함수에 Layers 매개변수를 추가해야 합니다.

    Type: AWS::Serverless::Function
    Properties:
      FunctionName: GetProductByIdWithPureJava21LambdaWithCommonLayer
      AutoPublishAlias: liveVersion
      Layers:
        - !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:layer:aws-pure-java-21-common-lambda-layer:1
      Handler: software.amazonaws.example.product.handler.GetProductByIdHandler::handleRequest

계층 ARN(버전 포함)을 게시 계층 명령(awslambdaPublish-layer-version)의 출력인 자체 ARN으로 바꾸십시오.

아래 실험 결과는 약 1시간 동안 진행된 실험으로 100회 이상의 콜드 스타트와 약 100,000회 이상의 웜 스타트를 재현한 결과입니다. 이를 위해(및 이전 기사의 실험) 부하 테스트 도구를 사용했지만 Serverless-artillery 또는 Postman과 같이 원하는 도구를 사용할 수 있습니다.
저는 Lambda 함수에 1024MB 메모리를 제공하고 환경 변수를 통해 다음 컴파일 옵션을 전달하여 이 모든 실험을 실행했습니다. JAVA_TOOL_OPTIONS: "-XX: TieredCompilation -XX:TieredStopAtLevel=1" (프로파일링 없는 클라이언트 컴파일) 콜드 시작 시간과 웜 시작 시간 간의 균형.

아래 표에서는 두 가지를 직접 비교할 수 있도록 다양한 Lambda 메모리 설정을 사용하여 Java 21의 콜드 및 웜 스타트 측정 문서에서 가져온 Lambda 레이어를 사용하지 않고 측정한 결과도 제공하겠습니다.
약어 c는 콜드 스타트를 나타내고 w는 웜 스타트를 나타냅니다.

SnapStart가 없는 콜드(c) 및 웜(w) 시작 시간(밀리초):

실험 c p50 c p75 c p90 c p99 c p99.9 c 최대 50페이지 p75 p90 w p99 w p99.9 최대값
공통 람다 레이어 사용 3497.91 3597.18 3695.58 3800.47 3908.33 4011.71 5.82 6.72 8.00 17.97 55.48 1709.13
람다 레이어 없음 3157.6 3213.85 3270.8 3428.2 3601.12 3725.02 5.77 6.50 7.81 20.65 90.20 1423.63

초기화 없이 SnapStart를 사용한 콜드(c) 및 웜(w) 시작 시간(ms):

실험 c p50 c p75 c p90 c p99 c p99.9 c 최대 50페이지 p75 p90 w p99 w p99.9 최대값
공통 람다 레이어 사용 2047.12 2124.24 2439.49 2705.52 2735.43 2831.59 5.68 6.40 7.45 17.06 48.45 2139.74
람다 레이어 없음 1626.69 1741.10 2040.99 2219.75 2319.54 2321.64 5.64 6.41 7.87 21.40 99.81 1355.09

SnapStart 및 DynamoDB 호출을 통한 콜드(c) 및 웜(w) 시작 시간(ms 단위):

실험 c p50 c p75 c p90 c p99 c p99.9 c 최대 50페이지 p75 p90 w p99 w p99.9 최대값
공통 람다 레이어 사용 713.88 766.38 1141.94 1181.41 1214.94 1215.32 5.59 6.30 7.39 16.39 45.09 574.61
람다 레이어 없음 702.55 759.52 1038.50 1169.66 1179.05 1179.36 5.73 6.51 7.87 21.75 92.19 328.41

결론

이 기사에서는 공통 종속성이 있는 Lambda 계층을 사용하여 애플리케이션을 생성한 다음 SnapStart를 활성화하지 않고 SnapStart를 활성화한 상태에서 콜드 및 웜 시작 시간을 측정하고 DynamoDB 호출 프라이밍 최적화를 적용하고 결과를 Lambda를 사용하지 않고 측정값과 비교했습니다. 다양한 Lambda 메모리 설정을 사용하여 Java 21의 콜드 및 웜 스타트 측정 문서에서 수행한 POM 파일의 모든 종속성을 제공합니다.

실험 결과를 실제로 확인하기 위해 공통 Lambda 레이어를 사용하여 여러 번 측정을 수행했습니다. 측정 결과에 약간의 차이가 있더라도 추세는 항상 같았습니다. SnapStart를 활성화하지 않거나 활성화했지만 DynamoDB 호출 프라이밍을 사용하지 않으면 일반 Lambda를 사용하여 콜드 스타트가 발생했습니다. 레이어는 POM 파일에만 모든 종속성을 패키징하는 것과 비교하여 수백 밀리초 더 높았습니다. Lambda 함수에 대해 SnapStart가 활성화되고 DynamoDB 호출 프라이밍이 적용된 경우에만 두 접근 방식의 콜드 스타트가 매우 유사했는데, 이는 모든 것이 이미 생성된 스냅샷에 있었기 때문일 것입니다.

Lambda 함수의 웜 스타트는 거의 모든 백분위수에 대한 사용 사례(Lambda 레이어 사용 여부와 상관없이)와 모든 실험(SnapStart 활성화 여부에 관계없이)에서 매우 유사했습니다. 하지만 공통 Lambda 레이어를 사용하면 항상 최대값에 대해 더 높은 결과를 얻었습니다.

다음 기사에서는 Lambda 레이어에 대한 실험을 계속하겠습니다. 이번에는 일반적인 종속성(이 기사와 같은)뿐만 아니라 이 애플리케이션을 실행하는 데 필요한 모든 종속성을 포함하는 Lambda 계층을 생성, 게시 및 사용한 다음 두 실험의 결과를 비교하겠습니다.

릴리스 선언문 이 기사는 https://dev.to/aws-builders/aws-snapstart-part-24-measuring-cold-and-warm-starts-with-java-21-using-lambda-layer-1-에서 재현됩니다. 4o8l? 1침해 내용이 있는 경우, [email protected]으로 연락하여 삭제해 주시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3