.NET용 AWS SDK의 놀라운 콜드 스타트 페널티
3778 단어 dotnetserverlessaws
.NET을 사용하는 모든 AWS Lambda 함수에서 발생하는 시작 세금입니다. 다행스럽게도 무료인 INIT 단계에서 발생시키는 것은 간단합니다. 그러나 콜드 스타트 중에는 피할 수 있는 방법이 없습니다. 초기화 오버헤드가 훨씬 낮아야 한다고 생각하지 않을 수 없습니다.
이 벤치마크에서 코드는 생성자에서 S3 클라이언트를 초기화한다는 점을 제외하면 기본 함수와 거의 동일합니다.
using System.IO;
using System.Threading.Tasks;
using Amazon.S3;
namespace Benchmark.AwsSdk {
public sealed class Function {
//--- Fields ---
private IAmazonS3? _s3Client;
//--- Constructors ---
public Function() {
// initialize S3 client
_s3Client = new AmazonS3Client();
}
//--- Methods ---
public async Task<Stream> ProcessAsync(Stream request) {
return Stream.Null;
}
}
}
콜드 스타트 기간
다음 표는 1,024MB, 1,769MB 및 5,120MB의 3가지 메모리 구성과 함께 .NET 6, Tiered Compilation 및 ReadyToRun을 사용한 새로운 측정을 보여줍니다.
.NET용 AWS SDK를 초기화하면 콜드 스타트 기간에 120ms 이상의 패널티가 추가됩니다. 초기화는 INIT 단계에서 발생하므로 메모리 구성에 관계없이 영향은 동일하게 유지됩니다.
건축물
메모리 크기
계층
레디투런
PreJIT
초기화
감기 사용
총 콜드 스타트
패널티
암64
1024MB
예
예
아니요
380.461
41.773
422.234
147.21
암64
1769MB
예
예
아니요
377.036
29.365
406.401
141.856
암64
5120MB
예
예
아니요
349.227
28.428
377.655
136.467
x86_64
1024MB
예
예
아니요
344.643
29.678
374.321
128.797
x86_64
1769MB
예
예
아니요
339.3
23.058
362.358
122.975
x86_64
5120MB
예
예
아니요
325.178
22.468
347.646
124.422
잠재적 원인
AWS SDK for .NET 에 대한 코드를 보면 느린 초기화의 원인이 endpoints.js 파일인 것 같습니다. 이 700KB 이상의 메갈로돈 JSON 파일은 AWS SDK가 초기화될 때마다 구문 분석됩니다. 이는 AWS Core 어셈블리에서 발생하므로 이 패널티는 모든 AWS 서비스 클라이언트에서 발생합니다.
향후 AWS 팀에서 이 문제를 수정하기를 바랍니다. 우둔한 평신도로서 나는 끝점 정의가 해당 패키지에 속할 것으로 예상합니다. 또한 현재 AWSSDK.Core.dll 어셈블리 크기가 눈에 띄게 1.5MB이므로 더 작은 Lambda 배포 패키지를 생성합니다!
무엇 향후 계획
다음 게시물에서는 Lambda 함수와 함께 최상위 문을 사용할 때의 영향을 벤치마킹합니다. Lambda 코드를 작성하는 이 새로운 방법은 미학적으로 보기 좋지만 숨겨진 비용이 있습니까?
Reference
이 문제에 관하여(.NET용 AWS SDK의 놀라운 콜드 스타트 페널티), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/lambdasharp/the-surprising-cold-start-penalty-in-the-aws-sdk-for-net-246l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)