วิธีการทดสอบประสิทธิภาพของฟังก์ชั่น AWS Lambda?


14

ค่าใช้จ่าย AWS แลมบ์ดาขึ้นอยู่กับเวลาที่ฟังก์ชั่นทำงานและขอบเขตของหน่วยความจำ การมีฟังก์ชั่นที่เสร็จเร็วขึ้นและใช้หน่วยความจำน้อยลงสามารถประหยัดเงินได้มาก โดยเฉพาะอย่างยิ่งเมื่อมีการใช้งานฟังก์ชันดังกล่าวบ่อยครั้ง

ฟังก์ชั่น Node.js Lambda สามารถปรับความเร็วและหน่วยความจำขนาดเล็กเพื่อประหยัดค่าใช้จ่ายได้อย่างไร?

มีแง่มุมอื่น ๆ สำหรับแลมบ์ดาที่เป็นประโยชน์ในการปรับปรุงหรือไม่

คำตอบ:


6

การตอบสนองของ Dawny33นั้นดี แต่ฉันจะเริ่มก่อนหน้านี้ในกระบวนการพัฒนา

คอยดูสภาพแวดล้อมคลาวด์ของคุณเพื่อให้แน่ใจว่าฟังก์ชั่นของคุณทำงานตามที่คุณคาดหวัง (รวมถึงฟังก์ชั่น "การผลิต" ซึ่งอาจทำงานกับชุดข้อมูลอื่น) เป็นสิ่งสำคัญเพราะมันอาจเปิดเผยสิ่งที่เป็นไปไม่ได้ ทดสอบชุดข้อมูล

อย่างไรก็ตามฉันจะบอกว่าการทดสอบประสิทธิภาพที่คุณทำเพื่อการเพิ่มประสิทธิภาพควรเริ่มจากเครื่องของนักพัฒนาซอฟต์แวร์ หรืออย่างน้อยก็จากสภาพแวดล้อมท้องถิ่นก่อนที่จะผลักดันไปยังคลาวด์

เหตุผลที่ฉันพูดอย่างนั้นก็คือในขณะที่ AWS Lambdas นั้นยอดเยี่ยมในหลาย ๆ จุดความจริงที่ว่าคุณไม่มีการควบคุมเต็มรูปแบบบนเซิร์ฟเวอร์จะจำกัดความสามารถในการใช้เครื่องมือของคุณ ฉันไม่ได้บอกว่าการใช้เครื่องมือเป็นไปไม่ได้เมื่ออยู่ในที่ที่ไม่มีเซิร์ฟเวอร์ แต่ให้ลองดูว่าคุณมีซีพียูขัดจังหวะกี่ตัว (และจำนวนที่เกิดจากรหัสของคุณ ) เพื่อความสนุก;)

ดังนั้นสิ่งที่ฉันแนะนำและนี่ไม่ได้ จำกัด อยู่ที่ serverless คือการเริ่มต้นการทำโปรไฟล์ก่อน การทำโปรไฟล์ NodeJS สามารถทำได้ด้วยเครื่องมือต่าง ๆ มากมาย, NewRelic, dynatrace และ AppDynamic นอกจากนี้ยังมีผู้เล่นที่เล็กกว่าบางคนเป็นเพียงแพคเกจ NPM สำหรับติดตั้ง (เช่น Nodefly) นอกจากนี้ยังเป็นไปได้ที่จะทำ NodeJS บางตัวโดยไม่ต้องใช้เครื่องมือเพิ่มเติมใด ๆ เนื่องจากมี profiler ที่สร้างขึ้นในเครื่องยนต์ V8 เอกสารนี้จาก NodeJS จะช่วยให้คุณเริ่มต้นได้

เครื่องมือใดก็ตามที่คุณเลือกคุณต้องการติดตั้งภายในเครื่องและรวบรวมข้อมูลการทำโปรไฟล์ ที่อาจเกี่ยวข้องกับการเรียกใช้ตัวแทนหรือรวมถึงแพคเกจใน package.json ของคุณ คำแนะนำของเครื่องมือของคุณจะบอกวิธีการติดตั้ง ผู้สร้างโปรไฟล์ที่ดีจะแจ้งให้คุณทราบว่าคุณใช้หน่วยความจำและ CPU มากแค่ไหน เครื่องมือที่ดีกว่าจะช่วยให้คุณเข้าใจว่ามีการโทรทางไกลกี่ครั้งและใช้เวลานานเท่าใด

ใช้ข้อมูลการทำโปรไฟล์ที่เครื่องมือให้คุณระบุถึงปัญหาคอขวดและระบุที่อยู่ คุณสามารถสร้างโปรไฟล์ได้ไม่ จำกัด จำนวน บางคน (บ้า?) จะดูการเรียกระบบของฟังก์ชั่นที่สำคัญที่สุดของพวกเขา คุณอาจต้องทำสิ่งนั้นถ้าคุณต้องการโกนนาโนวินาทีของฟังก์ชั่นของคุณ (แต่แล้วบางที AWS Lambda ไม่ใช่ตัวเลือกที่ดีที่สุดในการเริ่มต้นด้วย)

นอกจากนี้ยังเป็นที่น่าสังเกตว่าในตอนนี้ฉันยังไม่ได้พูดถึงอะไรที่เฉพาะเจาะจงกับ AWS Lambda นั่นเป็นเพราะการเพิ่มประสิทธิภาพของคุณมักจะไม่เฉพาะ AWS Lambda (หลังจากทั้งหมดในกรณีที่ไม่มีเซิร์ฟเวอร์คุณไม่ควรกังวลเกี่ยวกับเซิร์ฟเวอร์ / สภาพแวดล้อม)

ตรวจสอบให้แน่ใจว่ารหัสของคุณทำงานไม่เพียง แต่จะทำงานได้ตามที่คุณคาดหวัง อย่าปรับให้เหมาะสม แต่อย่าลืมเก็บ CPU และการใช้หน่วยความจำ อาร์เรย์ 2MB ควรเติบโตเป็น 10MB จริงหรือไม่เมื่อคุณจัดเรียง อาจจะไม่.

จากนั้นคุณจะสามารถใช้เครื่องมือที่กล่าวถึงโดย Dawny33 หรือเครื่องมืออื่น ๆ เพื่อยืนยันว่าฟังก์ชั่นของคุณทำงานคล้ายกันเมื่อปรับใช้กับแลมบ์ดา อย่างไรก็ตามคุณจะมีความเชื่อมั่นในระดับสูงในการทำงานของคุณอยู่แล้วและจะต้องตรวจสอบว่าพวกเขาทำงานอย่างถูกต้องหรือไม่เท่านั้น


ใช่มันเป็นสิ่งสำคัญ แต่วิธีการที่มันสามารถทำได้? มีเครื่องมือวิธีปฏิบัตินักพัฒนาสามารถทำอะไรได้บ้าง? ฉันไม่เห็นสิ่งใด ๆ ที่กล่าวถึงในคำตอบนี้: /
Evgeny

ฉันพูดอย่างนั้นผ่านการทำโปรไฟล์และเครื่องมือ NewRelic APM เป็นตัวอย่าง แต่นั่นเป็นเพียงหนึ่งในโปรไฟล์ที่มีอยู่ ติดตั้ง profiler, เรียกใช้ฟังก์ชั่นของคุณเพิ่มประสิทธิภาพ ไม่ว่าจะทำงานบน AWS Lambda หรือไม่ก็ตามเว้นแต่คุณจะมีปัญหาเฉพาะกับ AWS ฉันจะอัปเดตคำตอบตามความคิดเห็นของคุณ
Alexandre

ตัวอย่างและลิงค์ไปยังบทความบล็อกนักสร้างโปรไฟล์ที่รู้จักซึ่งสามารถทำงานได้ นั่นเป็นสิ่งที่ imho ทำให้คำตอบมีค่าไม่ใช่แค่ส่งคนมาถามคำถามที่ไหนสักแห่ง "ฉันจะนับการขัดจังหวะซีพียูของฉันได้อย่างไรฉันไม่มีเงื่อนงำ"
Evgeny

จุดดี. ฉันได้ปรับปรุงคำตอบของฉันอีกครั้ง
Alexandre

5

ฉันอาจจะไม่สามารถตอบได้อย่างสมบูรณ์ แต่นี่คือมุมมองของฉันจากประสบการณ์ที่ จำกัด ของฉันกับแลมบ์ดา:

  1. ความเร็ว - ประสิทธิภาพ:ระยะเวลาของการทำงานแลมบ์ดาครั้งเดียวจะปรากฏในแผงควบคุมของmonitoringแท็บแลมบ์ดาซึ่งมีลักษณะดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นการควบคุมปริมาณ / ข้อผิดพลาด / จำนวนการร้องขอ

  1. หนึ่งยังสามารถตั้งค่าตัวกรอง CloudWatch สำหรับการใช้หน่วยความจำของฟังก์ชั่นแลมบ์ดาซึ่งมีข้อมูลที่สามารถนำมาใช้เพื่อเพิ่มประสิทธิภาพการจัดการของคุณ นี่คือโพสต์ที่ดีเกี่ยวกับวิธีการตั้งค่า
  2. นอกจากนี้ตั้งค่าการบันทึกที่เหมาะสมเพื่อให้คุณสามารถดูบันทึกใน CloudWatch ในภายหลัง นี่ไม่ใช่แฮ็คการเพิ่มประสิทธิภาพต่อ แต่เป็นแนวปฏิบัติที่เหมาะสมกว่า
  3. การทดสอบ : ทดสอบฟังก์ชั่นแลมบ์ดาของคุณอย่างละเอียดเพื่อที่คุณจะได้ไม่พลาดกับเคสแบบขอบ สิ่งนี้มีความสำคัญเนื่องจากแลมบ์ดาพยายามทำหน้าที่ล้มเหลวก่อนที่จะยอมแพ้ ดังนั้นคุณสามารถประหยัดเวลาได้ล่วงหน้าถ้าคุณทดสอบฟังก์ชั่นอย่างถูกต้อง คู่มือการทดสอบฟังก์ชั่นแลมบ์ดา

5

ตรวจสอบโปรไฟล์ของ IOpipeเพื่อรับ v8 profiler แบบเต็มจากการเรียกใช้ของแลมบ์ดา คุณสามารถโหลดสิ่งเหล่านั้นลงใน Chrome Devtools เพื่อดูว่าที่ CPU ใช้เวลาเท่าไรและใช้หน่วยความจำสำหรับฟังก์ชั่นของคุณอย่างไร

ป้อนคำอธิบายรูปภาพที่นี่

คำเตือน: ฉันทำงานให้กับ IOpipe


0

ใช้เอเจนต์ StackImpactเพื่อรับ CPU และโปรไฟล์หน่วยความจำ รายละเอียดเพิ่มเติมในบล็อกโพสต์: AWS แลมบ์ดา CPU และหน่วยความจำ Profiling (Node.js) เนื่องจากกระบวนการแลมบ์ดา Node.js ค้างระหว่างการร้องขอเครื่องมืออื่น ๆ ส่วนใหญ่อาจไม่ทำงานนอกกรอบ

ป้อนคำอธิบายรูปภาพที่นี่

คำเตือน: ฉันทำงานให้กับ StackImpact


ในขณะที่ฟังดูเกี่ยวข้องและอาจเป็นทางออกที่ถูกต้อง แต่การขยายเล็กน้อยว่าจะช่วยตอบคำถามได้อย่างไรจะช่วยหลีกเลี่ยงความรู้สึกของลิงก์ได้เฉพาะคำตอบก็ต่อเมื่อการเชื่อมโยงเน่ามีน้อยมากที่จะได้รับแนวคิดแรก
Tensibai
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.