2016-06-20 10 views
14

Lập kế hoạch một hàm lambda để gọi 20 phút một lần với CloudWatch là cách tốt nhất để loại bỏ thời gian bắt đầu lạnh lambda? (không hoàn toàn thoát khỏi) ...Lambda lạnh bắt đầu có thể giải pháp?

Điều này có đắt đỏ không hoặc có điều gì đó tôi thiếu bởi vì tôi đã thiết lập ngay bây giờ và tôi nghĩ nó đang hoạt động.

Trước khi thời gian bắt đầu lạnh của tôi sẽ là 10 giây và mọi cuộc gọi tiếp theo sẽ hoàn thành sau 80 ms. Bây giờ mọi cuộc gọi không có vấn đề thường xuyên là khoảng 80 ms. Đây có phải là một phương pháp tốt cho đến khi nói rằng userbase của bạn phát triển, sau đó bạn có thể tắt tính năng này?

Tùy chọn thứ hai của tôi chỉ là sử dụng cây đậu và có máy chủ chạy 24/7 nhưng điều đó nghe có vẻ tốn kém nên tôi không thích nó.

Trả lời

13

Theo tôi biết đây là cách duy nhất để giữ chức năng nóng ngay bây giờ. Nó chỉ có thể tốn kém khi bạn có rất nhiều chức năng đó.

Bạn sẽ phải tự tính mình trả bao nhiêu để giữ cho các chức năng của bạn luôn cân nhắc xem bạn có bao nhiêu chức năng, bạn mất bao lâu để chạy chúng mỗi lần và bạn cần bao nhiêu bộ nhớ.

Nhưng cứ 20 phút một lần là 2000 lần mỗi tháng, vì vậy nếu bạn sử dụng, ví dụ: 128MB và làm cho chúng hoàn thành dưới 100ms sau đó bạn có thể giữ khá nhiều chức năng như vậy sống ở khoảng 20 phút và vẫn ở dưới cấp miễn phí - nó sẽ là 20 giây mỗi tháng cho mỗi chức năng. Bạn thậm chí không cần phải tắt nó đi sau khi bạn nhận được một tải lớn hơn bởi vì nó sẽ không liên quan tại thời điểm này. Bên cạnh đó bạn không bao giờ có thể chắc chắn để có được một tải thống nhất tất cả các thời gian để bạn có thể giữ cho trái tim của bạn đập mã hoạt động ngay cả sau đó.

Mặc dù tôi đoán là vì nó rất rẻ để giữ một chức năng còn sống (đặc biệt nếu bạn có một đối số đặc biệt khiến chúng trở lại ngay lập tức) và sự khác biệt là rất lớn (10 giây so với 80 ms) nhiều người sẽ làm điều đó - có khá nhiều lý do không nên. Trong trường hợp đó, tôi hy vọng Amazon sẽ chiến đấu với thực hành đó (bằng cách làm cho nó khó khăn hoặc đắt hơn hiện tại - đó sẽ không phải là một động thái thông minh) hoặc để làm cho nó không cần thiết trong tương lai. Nếu sự khác biệt giữa nóng và lạnh bắt đầu là 100ms thì không ai bận tâm. Nếu nó là 10 giây hơn tất cả mọi người cần phải làm việc xung quanh nó.

Sẽ luôn có sự khác biệt giữa việc chạy mã được chạy cách đây một giây và mã được chạy cách đây một tháng, vì tất cả chúng trong RAM và sẵn sàng sử dụng sẽ lãng phí rất nhiều tài nguyên, nhưng tôi thấy không có lý do tại sao sự khác biệt đó không thể được thực hiện ít đáng chú ý hoặc thậm chí có thêm vài bước thay vì chỉ bắt đầu nóng và lạnh.

+0

Cảm ơn mẹo. Có điều gì đặc biệt bên ngoài với mã chức năng có thể trì hoãn sự bắt đầu không? Tôi có 2 nodejs lambdas, mặc dù ngay cả từ các cuộc gọi lạnh, một (158Kb) bắt đầu dưới ~ 1 giây trong khi một dưới VPC-Elasticache (54Kb) mất khoảng 10 giây. Nhưng có lẽ điều đó chỉ liên quan đến thư viện redis mà nó tải, có thể là CPU mạnh, chứ không phải là bản thân thiết lập? – zanona

5

Bạn có thể cải thiện thời gian bắt đầu nguội bằng cách cấp phát bộ nhớ nhiều hơn cho hàm Lambda của bạn. Với 512 MB mặc định, tôi thấy thời gian bắt đầu lạnh từ 8-10 giây đối với các hàm được viết bằng Java. Điều này cải thiện đến 2-3 giây với 1536MB bộ nhớ.

Amazon says rằng đó là phân bổ CPU thực sự quan trọng, nhưng không có cách nào để trực tiếp thay đổi nó. Phân bổ CPU tăng tương ứng với bộ nhớ.

Và nếu bạn muốn gần thời gian bắt đầu không lạnh, việc giữ ấm chức năng là cách để đi, như được mô tả rsp được đề xuất.

+2

Đặt bộ nhớ cho 1536mb hoạt động cho tôi.Giảm thời gian bắt đầu lạnh từ 12 giây xuống còn 3 giây. – Guus

+0

Big lambdas bắt đầu nhanh hơn, họ cũng nhận được rác thu thập trước đó. Nói cách khác, thời gian chờ nhàn rỗi của chúng ngắn hơn. – sepehr

Các vấn đề liên quan