Làm thế nào để kiểm tra hiệu năng chức năng AWS Lambda?


14

Chi phí AWS Lambda phụ thuộc vào thời gian một chức năng chạy và ở một mức độ nào đó trên dấu chân bộ nhớ. Có các chức năng hoàn thành nhanh hơn và chiếm ít bộ nhớ hơn có thể tiết kiệm khá nhiều tiền. Đặc biệt là khi một chức năng như vậy được thực hiện thường xuyên.

Làm thế nào một chức năng Lambda của Node.js có thể được điều chỉnh tốc độ và dung lượng bộ nhớ nhỏ để tiết kiệm chi phí?

Có những khía cạnh khác cho Lambda là lợi thế để cải thiện?

Câu trả lời:


6

Phản hồi của Dawny33 là tốt, nhưng tôi sẽ bắt đầu sớm hơn trong quá trình phát triển.

Theo dõi môi trường đám mây của bạn để đảm bảo rằng các chức năng của bạn hoạt động như bạn mong đợi (bao gồm các chức năng "sản xuất", có thể hoạt động trên một tập dữ liệu khác) là rất quan trọng, bởi vì nó có thể tiết lộ những thứ không thể sao chép cục bộ hoặc với một tập dữ liệu thử nghiệm.

Tuy nhiên, tôi sẽ nói rằng thử nghiệm hiệu năng này mà bạn thực hiện với mục đích tối ưu hóa nên bắt đầu trực tiếp từ máy của nhà phát triển. Hoặc, ít nhất, từ một số môi trường địa phương trước khi đẩy lên đám mây.

Lý do tôi nói như vậy là trong khi AWS Lambdas tuyệt vời ở nhiều điểm, thì việc bạn không có toàn quyền kiểm soát trên máy chủ sẽ hạn chế khả năng thiết bị của bạn. Tôi không nói rằng thiết bị là không thể khi không có máy chủ, nhưng hãy thử tìm hiểu xem bạn có bao nhiêu CPU bị gián đoạn (và có bao nhiêu nguyên nhân gây ra bởi mã của bạn ) chỉ để giải trí;)

Vì vậy, những gì tôi khuyên, và điều này thực sự không giới hạn ở serverless, là bắt đầu hồ sơ sớm. Hồ sơ NodeJS có thể được thực hiện với nhiều công cụ khác nhau, NewRelic, dynatrace và AppDocate là một số người chơi lớn. Ngoài ra còn có trình phát nhỏ hơn, một số trong số chúng chỉ là gói NPM để cài đặt (như Nodefly). Cũng có thể thực hiện một số NodeJS mà không cần bất kỳ công cụ bổ sung nào, vì có một trình lược tả được tích hợp trong động cơ V8. Tài liệu này từ NodeJS sẽ giúp bạn bắt đầu.

Dù bạn chọn công cụ nào, bạn muốn cài đặt nó cục bộ và thu thập dữ liệu định hình. Điều đó có thể liên quan đến việc chạy một tác nhân hoặc bao gồm một gói trong gói.json của bạn. Hướng dẫn của công cụ của bạn sẽ cho bạn biết cách cài đặt nó. Một hồ sơ tốt sẽ cho bạn biết bạn sử dụng bao nhiêu bộ nhớ và CPU. Các công cụ tốt hơn sẽ cung cấp cho bạn cái nhìn sâu sắc về số lượng cuộc gọi từ xa đã được thực hiện, chúng mất bao lâu.

Sử dụng dữ liệu định hình mà công cụ cung cấp cho bạn để xác định các tắc nghẽn và giải quyết chúng. Không có giới hạn về số lượng hồ sơ bạn có thể thực hiện. Một số người (crazy?) Sẽ xem xét các cuộc gọi hệ thống của chức năng quan trọng nhất của họ. Bạn có thể phải làm điều đó nếu bạn muốn cạo các nano giây của chức năng của mình (nhưng sau đó, có thể AWS Lambda không phải là lựa chọn tốt nhất để bắt đầu).

Điều đáng chú ý ở điểm này là tôi chưa đề cập đến bất cứ điều gì cụ thể về AWS Lambda. Đó là bởi vì tối ưu hóa của bạn rất có thể sẽ không phải là AWS Lambda cụ thể (xét cho cùng, trong máy chủ, bạn không nên lo lắng về máy chủ / môi trường).

Hãy chắc chắn rằng không chỉ mã của bạn hoạt động, mà nó còn hoạt động theo cách bạn mong đợi. Đừng tối ưu hóa quá mức, nhưng hãy chú ý đến việc sử dụng CPU và bộ nhớ. Mảng 2MB có thực sự tăng lên 10MB khi bạn sắp xếp nó không? Chắc là không.

Sau đó, bạn sẽ có thể sử dụng các công cụ được đề cập bởi Dawny33 hoặc một số công cụ khác để xác nhận rằng các chức năng của bạn hoạt động tương tự khi được triển khai cho Lambda. Tuy nhiên, bạn sẽ có mức độ tin cậy rất cao đối với chức năng của mình và sẽ chỉ cần xác thực rằng chúng hoạt động đúng, không phải hồ sơ đầy đủ về chúng.


Vâng, nó rất quan trọng, nhưng làm thế nào nó có thể được thực hiện? Có một số công cụ, thực hành, chính xác thì nhà phát triển có thể làm gì? Tôi không thấy bất kỳ điều nào được đề cập trong câu trả lời này: /
Evgeny

Tôi đã nói như vậy, thông qua hồ sơ và thiết bị. NewRelic APM là một ví dụ, nhưng đó chỉ là một trong những hồ sơ có sẵn. Cài đặt profiler, chạy chức năng của bạn, tối ưu hóa. Việc nó có chạy trên AWS Lambda hay không, trừ khi bạn có vấn đề cụ thể với AWS. Tôi sẽ cập nhật câu trả lời của tôi dựa trên bình luận của bạn.
Alexandre

Một số ví dụ và liên kết đến bài viết, blog, trình biên dịch đã biết có thể thực hiện công việc. Đó là điều mà imho làm cho câu trả lời có giá trị, không chỉ gửi cho mọi người để hỏi một câu hỏi ở đâu đó "làm thế nào để tôi đếm các ngắt cpu của tôi, tôi không có manh mối".
Evgeny

Điểm tốt. Tôi đã cải thiện câu trả lời của tôi một lần nữa.
Alexandre

5

Tôi có thể không trả lời được hoàn toàn, nhưng đây là quan điểm của tôi từ trải nghiệm hạn chế của tôi với lambda:

  1. Hiệu suất tốc độ: Thời lượng của một lần chạy chức năng lambda sẽ xuất hiện trong bảng điều khiển của monitoringtab Lambda , trông giống như thế này:

nhập mô tả hình ảnh ở đây

Do đó, điều tiết / lỗi / số lần gọi.

  1. Người ta cũng có thể thiết lập các bộ lọc CloudWatch cho việc sử dụng bộ nhớ của chức năng lambda, có dữ liệu có thể được sử dụng để tiếp tục tối ưu hóa trình xử lý của bạn. Đây là một bài viết tốt về cách thiết lập một.
  2. Ngoài ra, hãy thiết lập ghi nhật ký thích hợp để sau này bạn có thể xem qua nhật ký trong CloudWatch. Đây không phải là một hack tối ưu hóa mỗi se, nhưng nhiều hơn một cách thực hành tốt nhất
  3. Kiểm tra : Kiểm tra các chức năng lambda của bạn một cách kỹ lưỡng, để bạn không bỏ lỡ các trường hợp cạnh. Điều này rất quan trọng, vì lambda thử lại các chức năng thất bại trước khi từ bỏ. Vì vậy, bạn có thể tiết kiệm thời gian thuận tay nếu bạn đã kiểm tra chức năng đúng cách. Hướng dẫn kiểm tra chức năng Lambda

5

Kiểm tra trình hồ sơ IOpipe để có được các trình biên dịch v8 đầy đủ từ các yêu cầu Lambda. Bạn có thể tải chúng vào Chrome Devtools để xem chính xác thời gian sử dụng CPU và cách sử dụng bộ nhớ cho các chức năng của bạn.

nhập mô tả hình ảnh ở đây

Tuyên bố miễn trừ trách nhiệm: Tôi làm việc cho IOpipe


0

Sử dụng tác nhân StackImpact để lấy cấu hình CPU và bộ nhớ. Thêm chi tiết trong bài đăng trên blog: Cấu hình CPU và bộ nhớ AWS Lambda (Node.js) . Vì quá trình Lambda Node.js bị đóng băng giữa các yêu cầu, nên hầu hết các công cụ khác có thể sẽ không hoạt động.

nhập mô tả hình ảnh ở đây

Tuyên bố miễn trừ trách nhiệm: Tôi làm việc cho StackImpact


Mặc dù nghe có vẻ liên quan và có khả năng là một giải pháp hợp lệ, nhưng việc mở rộng một chút về cách nó có thể giúp giải quyết câu hỏi sẽ tránh cảm giác liên kết chỉ trả lời trong trường hợp nếu liên kết bị thối thì không có ý tưởng đầu tiên về cách nó có thể giúp ích.
Tensibai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.