في منشور المدونة كيفية إنشاء ونشر واستخدام الطبقات لوظائف Java 21 Lambda، قمنا بنشر أول طبقة Lambda مع Java 21. في هذه المقالة، سنقوم بإنشاء التطبيق باستخدام طبقة Lambda هذه ثم قياس البداية الباردة والدافئة مرات دون تمكين SnapStart، مع تمكين SnapStart وتطبيق تحسين إعداد استدعاء DynamoDB أيضًا. سنقوم أيضًا بمقارنة النتائج بقياساتنا دون استخدام طبقات Lambda وتوفير جميع التبعيات في ملف POM وهو ما فعلناه في المقالة يبدأ قياس درجات الحرارة الباردة والدافئة باستخدام Java 21 باستخدام إعدادات ذاكرة Lambda المختلفة.
في تجربتنا سوف نستخدم نموذج التطبيق. توجد بشكل أساسي وظيفتان Lambda محددتان في قالب AWS SAM، وكلاهما يستجيبان لطلبات بوابة API ويستردان المنتج حسب المعرف المستلم من بوابة API من DynamoDB. يمكن استخدام وظيفة Lambda واحدة GetProductByIdWithPureJava21LambdaWithCommonLayer مع SnapStart وبدونه، بينما تستخدم الوظيفة الثانية GetProductByIdWithPureJava21LambdaAndPrimingWithCommonLayer تحضير طلب SnapStart وDynamoDB.
التبعيات المقدمة عبر طبقة Lambda لها النطاق "المقدم" في ملف pom.xml الخاص بتطبيقنا.
من أجل إرفاق طبقة Lambda التي تم إنشاؤها في المقالة كيفية إنشاء طبقات نشر واستخدامها لوظائف Java 21 Lambda لوظائف Lambda في قالب AWS SAM، يتعين علينا إضافة معلمة الطبقات إلى وظيفة Lambda مثل هذا:
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
يرجى استبدال Layer ARN (بما في ذلك الإصدار) بآخر خاص بك وهو ناتج أمر طبقة النشر (aws lambda Publish-layer-version).
اعتمدت نتائج التجربة أدناه على إعادة إنتاج أكثر من 100 درجة حرارة باردة وحوالي 100.000 نقطة دافئة مع تجربة استمرت لمدة ساعة تقريبًا. من أجل ذلك (والتجارب من مقالتي السابقة) استخدمت أداة اختبار التحميل، ولكن يمكنك استخدام أي أداة تريدها، مثل Serverless-artillery أو Postman.
لقد أجريت كل هذه التجارب من خلال إعطاء وظائف Lambda ذاكرة تبلغ 1024 ميجابايت وبتمرير خيار الترجمة التالي عبر متغير البيئة: JAVA_TOOL_OPTIONS: "-XX: TieredCompilation -XX:TieredStopAtLevel=1" (تجميع العميل بدون إنشاء ملفات تعريف) والذي يوفر نتيجة جيدة جدًا المفاضلة بين أوقات البدء الباردة والدافئة.
في الجداول أدناه، سأقدم أيضًا النتائج مع قياساتنا دون استخدام طبقات Lambda المأخوذة من المقالة يبدأ قياس البرودة والدفء مع Java 21 باستخدام إعدادات ذاكرة Lambda المختلفة لإجراء المقارنة مباشرة بين كليهما.
الاختصار c يشير إلى البداية الباردة وw يشير إلى البداية الدافئة.
أوقات البدء الباردة (ج) والدافئة (ث) بدون SnapStart بالمللي ثانية:
تجربة | ج ص50 | ج ص 75 | ج ص90 | ج ص99 | ج ص99.9 | ج ماكس | ث ص50 | ث ص 75 | ث ص90 | ث ص99 | ث ص99.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 بدون تحضير بالمللي ثانية:
تجربة | ج ص50 | ج ص 75 | ج ص90 | ج ص99 | ج ص99.9 | ج ماكس | ث ص50 | ث ص 75 | ث ص90 | ث ص99 | ث ص99.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 |
أوقات البدء الباردة (c) والدافئة (w) باستخدام SnapStart ومع استدعاء DynamoDB التمهيدي بالمللي ثانية:
تجربة | ج ص50 | ج ص 75 | ج ص90 | ج ص99 | ج ص99.9 | ج ماكس | ث ص50 | ث ص 75 | ث ص90 | ث ص99 | ث ص99.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 الطبقات وتوفير جميع التبعيات في ملف POM وهو ما قمنا به في المقالة يبدأ قياس البرودة والدفء مع Java 21 باستخدام إعدادات ذاكرة Lambda المختلفة.
لقد أجريت قياسات باستخدام طبقات Lambda الشائعة عدة مرات لتأكيد نتيجة تجربتي حقًا. حتى لو كان لدي بعض الانحرافات في النتائج بين تلك القياسات، كان الاتجاه دائمًا هو نفسه: عند عدم تمكين SnapStart أو تمكينه ولكن مع عدم استخدام تمهيد استدعاء DynamoDB، يبدأ cold باستخدام Lambda الشائع كانت الطبقة أعلى بعدة مئات من المللي ثانية مقارنة بحزم جميع التبعيات في ملف POM فقط. فقط عندما تم تمكين SnapStart لوظيفة Lambda وتم تطبيق إعداد استدعاء DynamoDB، كانت عمليات التشغيل الباردة مع كلا النهجين قريبة جدًا، ربما يرجع ذلك إلى حقيقة أن كل شيء كان موجودًا بالفعل في اللقطة التي تم إنشاؤها.
كانت البداية الدافئة لوظيفة Lambda قريبة جدًا لكل من حالات الاستخدام (مع استخدام طبقات Lambda أو بدونها) ولجميع التجارب (مع تمكين SnapStart وبدونه) لجميع النسب المئوية تقريبًا، لكني دائمًا ما أحصل على نتائج أعلى للقيمة القصوى باستخدام طبقة Lambda الشائعة.
في المقالة التالية سأواصل تجاربي مع طبقات Lambda. هذه المرة سأقوم بإنشاء ونشر واستخدام طبقة Lambda التي لا تحتوي فقط على التبعيات المشتركة (كما هو الحال في هذه المقالة) ولكن جميع التبعيات المطلوبة لتشغيل هذا التطبيق ثم مقارنة نتائج كلتا التجربتين.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3