AWS SnapStart – قسمت 18 اندازهگیری سرما با جاوا 17 با استفاده از اندازههای مصنوع مختلف استقرار شروع میشود.

معرفی
در قسمت 8 از سری ما شروع سرد تابع Lambda را با زمان اجرا Corretto Java 17 بدون SnapStart فعال، با SnapStart فعال و همچنین بهینه سازی پرایمینگ فراخوانی DynamoDB را اندازه گیری کردیم. توابع لامبدا 1024 مگابایت حافظه داشتند و بسته استقرار (فایل jar) تقریباً بود. 15 مگابایت در این مقاله ما همان اندازهگیریها را انجام میدهیم، اما اندازه بسته استقرار را بررسی میکنیم تا بفهمیم که آیا تفاوتی مشابه آنچه در مقاله اندازهگیری سرما با جاوا 21 با استفاده از اندازههای مصنوع مختلف استقرار شروع میشود، اما اکنون با استفاده از جاوا 17، ایجاد میکند یا خیر.
اندازه گیری سرما با جاوا 17 با و بدون فعال کردن SnapStart با استفاده از اندازه مصنوعات استقرار شروع می شود
بیایید همان 3 سناریو را برای جاوا 17 در نظر بگیریم (مانند کاری که برای جاوا 21 انجام دادیم):
-
برنامه کوچک به سبک HelloWorld که شامل دریافت درخواست API Gateway با شناسه محصول لامبدا است و اساساً این شناسه را چاپ می کند. هیچ لایه ماندگاری درگیر نیست. کاربرد به قدری ساده است که هیچ تکنیک پرایمینگی برای استفاده وجود ندارد. فقط چندین وابستگی در pom.xml مانند aws-lambda-java-core و slf4j-simple اعلام شده است. اندازه استقرار چنین برنامه ای فقط 137 کیلوبایت است.
-
برنامه با اندازه متوسط با ماندگاری DynamoDB. ما از برنامه معرفی شده در قسمت 8 برای این کار دوباره استفاده خواهیم کرد. اساساً 2 تابع Lambda وجود دارد که هم به درخواستهای API Gateway پاسخ میدهند و هم محصول را با شناسه دریافتی از دروازه API از DynamoDB بازیابی میکنند. یک تابع Lambda را می توان با و بدون SnapStart استفاده کرد و دومی از SnapStart و DynamoDB درخواست فراخوانی پرایمینگ استفاده می کند. دستهای از وابستگیها در pom.xml مانند aws-lambda-java-core، aws-lambda-java-events، slf4j-simple، crac، dynamodb و url-connection-client وجود دارد. اندازه استقرار چنین برنامه ای 15 مگابایت است.
-
برنامه Big Size با پایداری DynamoDB و وابستگی به بسیاری از خدمات AWS دیگر. این برنامه شبیه به اندازه متوسط است. اساساً 2 تابع Lambda وجود دارد که هم به درخواست های APIGateway پاسخ می دهند و هم محصول را با شناسه دریافتی از دروازه API از DynamoDB بازیابی می کنند. یک تابع Lambda را می توان با و بدون SnapStart استفاده کرد و دومی از SnapStart و DynamoDB درخواست فراخوانی پرایمینگ استفاده می کند. دستهای از وابستگیها در pom.xml مانند aws-lambda-java-core، aws-lambda-java-events، slf4j-simple، crac، dynamodb و url-connection-client وجود دارد. اما ما وابستگیهای دیگر انسان را به سرویسهای مختلف AWS مانند sns، kinesis، eventbridge، bedrock نیز اعلام میکنیم، اما حتی از آنها در برنامه خود استفاده نمیکنیم. بنابراین چنین اعلانی باعث می شود که تنها اندازه بسته بزرگتر شود و سپس 50 مگابایت باشد.
نتایج آزمایش زیر بر اساس بازتولید تقریباً 100 شروع سرد بود که در طول آزمایشی که تقریباً 1 ساعت طول کشید بازتولید شد. تمام عملکردهای Lambda دارای تنظیمات حافظه 1024 مگابایتی بودند.
افسانه: کم اهمیت – مربوط به اندازه مصنوع استقرار 137 KB، متوسط تا 15 مگابایت و بزرگ تا 50 مگابایت
شرح آزمایش | p50 | p90 | p99 |
---|---|---|---|
SMALL: زمان شروع سرد بدون SnapStart | 448.97 | 481.98 | 521.06 |
SMALL: زمان شروع سرد با SnapStart بدون پرایمینگ | 475.76 | 611.43 | 734.14 |
SMALL: زمان شروع سرد با SnapStart با پرایمینگ | 475.76 | 611.43 | 734.14 |
MEDIUM: زمان شروع سرد بدون SnapStart | 2847.00 | 2963.13 | 3181.06 |
متوسط: زمان شروع سرد با SnapStart بدون پرایمینگ | 1513.85 | 1648.55 | 1860.34 |
MEDIUM: زمان شروع سرد با SnapStart با پرایمینگ | 725.56 | 829.03 | 1066.98 |
بزرگ: زمان شروع سرد بدون SnapStart | 2930.74 | 3080.92 | 3281.16 |
بزرگ: زمان شروع سرد با SnapStart بدون پرایمینگ | 1497.19 | 2195.47 | 2644.03 |
بزرگ: زمان شروع سرد با SnapStart با پرایمینگ | 731.94 | 1391.84 | 1679.56 |
برای استقرار مصنوع کوچک، زمان شروع سرد با SnapStart فعال و با و بدون پرایمینگ یکسان است، زیرا چیزی برای پرایم کردن وجود ندارد، این مورد ساده است.
نتیجه گیری
برخی از بینشهای جالب از این اندازهگیریها در مورد استفاده از خود SnapStart نیز به دست میآید: برای اندازه کوچک استقرار، استفاده از SnapStart هیچ سود واقعی ندارد زیرا زمانهای شروع سرد با و بدون آن کاملاً قابل مقایسه هستند. اما برنامه ها و توابع لامبدا بدون هیچ گونه وابستگی واقعی از جمله وابستگی به سایر خدمات AWS کاملاً استثنایی هستند.
همچنین تفاوت شروع سرد کاملاً قابل توجهی برای p90 و p99 در مقایسه اندازه مصنوعات استقرار متوسط و بزرگ وجود دارد در حالی که p50 مشابه باقی مانده است. و البته استارتهای سرد برای اندازههای استقرار متوسط و بزرگ بسیار بزرگتر از اندازههای کوچک است. بنابراین برای جاوا 21 نیز اندازه استقرار هنوز نقش مهمی را برای شروع سرد بدون استفاده از SnapStart و همچنین با آن ایفا می کند! سعی کنید عملکردهای Lambda خود را کوچک و تک منظوره کنید!
با مقایسه این اندازهگیریها با اندازهگیریهای مشابه انجامشده برای جاوا 21، زمان شروع سرد کمی برای جاوا 17 را مشاهده میکنیم، در صورتی که SnapStart برای هر 3 اندازه بسته برای مورد استفاده ما فعال نباشد. در صورتی که SnapStart فعال باشد، نتایج برای هر دو با و بدون پرایم کردن بسیار نزدیکتر است.