Cách thay đổi thời gian chờ trong AWS Lambda

Spread the love

Nếu bạn muốn xây dựng kiến ​​trúc serverless trong AWS hoặc ít nhất là một phần trong đó thì dịch vụ AWS Lambda sẽ là phần quan trọng nhất trong đó.

Đây là một chức năng điện toán không có máy chủ (thường được viết bằng ngôn ngữ lập trình Node.JS hoặc Python) mà bạn có thể phát triển và chạy mà không cần khởi động bất kỳ cụm phụ trợ hoặc máy chủ nào. Bạn có thể kết nối nhiều hàm AWS Lambda để tạo thành các quy trình phức tạp hơn.

Tuy nhiên, một đặc tính quan trọng của hàm Lambda là hạn chế về thời gian xử lý. Điều này cuối cùng sẽ xác định khi nào mục đích sử dụng hàm AWS Lambda là phù hợp.

Nguồn: aws.amazon.com

Khoảng thời gian chờ là gì?

Tính năng hết thời gian chờ của hàm AWS Lambda là cài đặt xác định lượng thời gian tối đa mà một hàm có thể chạy trước khi bị chấm dứt.

Các hàm Lambda được thiết kế để tồn tại trong thời gian ngắn và không có trạng thái và đây là cách chúng nên được sử dụng. Không phải là ngoại lệ hiếm hoi khi xem cách các nhóm cố gắng sử dụng hàm Lambda cho các quy trình chạy dài. Họ làm điều đó chỉ vì muốn tận dụng lợi ích từ tính chất không có máy chủ của AWS Lambda. Việc chạy mã mà không cần phải khởi động máy chủ với cấu hình CPU và bộ nhớ cụ thể luôn rẻ hơn nhiều. Vì vậy, ý định là dễ hiểu.

Tuy nhiên, nếu một hàm chạy quá lâu, nó có thể gây ra các vấn đề về hiệu suất và sử dụng tài nguyên. Bạn có nguy cơ bị khóa tài nguyên và vì bạn được hưởng lợi từ một quy trình chạy dài nên rất có thể bạn không thực sự quan tâm đến việc tối ưu hóa các bước bên trong quy trình. Đột nhiên, thời gian chờ đợi năm phút không còn là vấn đề lớn nữa. Bạn có thể để nó hiện diện ngay cả khi, đối với bản thân quá trình, nó có thể vô dụng.

Theo mặc định, thời gian chờ cho hàm Lambda được đặt thành chỉ 3 giây. Trong trường hợp đó, bạn cần phải tin tưởng vào thực tế là bất kỳ mã nào bạn thực thi bên trong hàm Lambda đều phải hoàn thành trong vòng ba giây. Điều này thật tuyệt nếu bạn muốn xây dựng một kiến ​​trúc có thời gian phản hồi và liên lạc thực sự linh hoạt, có khả năng xử lý hàng triệu giao dịch trong một thời gian rất ngắn. Nhưng điều đó sẽ hạn chế đáng kể các trường hợp sử dụng được của hàm Lambda, vì vậy bạn có thể tăng giới hạn này lên tối đa 900 giây (15 phút). Khi hết thời gian chờ này, Lambda sẽ chấm dứt chức năng và trả về mã lỗi.

  Hiểu cách triển khai danh sách liên kết trong Python

Làm cách nào để thiết lập tính năng hết thời gian?

Nguồn: aws.amazon.com

Bạn có thể đặt thời gian chờ cho hàm Lambda bằng Bảng điều khiển quản lý AWS, AWS CLI hoặc AWS SDK.

Dưới đây là các bước cụ thể để đạt được điều này:

  • Mở Bảng điều khiển quản lý AWS và truy cập dịch vụ Lambda.
  • Chọn hàm Lambda mà bạn muốn sửa đổi.
  • Trong tab “Cấu hình”, cuộn xuống phần “Cấu hình chung” và tìm cài đặt “Hết thời gian”.
  • Nhấp vào nút “Chỉnh sửa” bên cạnh nó.
  • Nhập giá trị thời gian chờ mới tính bằng giây (từ 1 đến 900) và nhấp vào nút “Lưu”.
  • Nhấp vào nút “Lưu” ở đầu trang để lưu các thay đổi đối với hàm Lambda.
  • Bạn cũng có thể sử dụng dòng lệnh AWS CLI để cập nhật thời gian chờ của hàm Lambda. Đây là một lệnh ví dụ:

    <code>aws lambda update-function-configuration --function-name [My_Lambda_Function_Name] --timeout 900

    Lệnh này đặt thời gian chờ cho [My_Lambda_Function_Name] đến 15 phút. Chỉ cần đặt tên thật của hàm và giá trị thời gian chờ mong muốn tính bằng giây.

    Một số cân nhắc

    Cài đặt thời gian chờ áp dụng cho toàn bộ hàm, không chỉ các khối mã riêng lẻ hoặc các thao tác trong hàm. Vì vậy, nếu chức năng của bạn đang thực hiện một thao tác kéo dài, chẳng hạn như xử lý một tệp lớn hoặc thực hiện yêu cầu mạng, bạn sẽ cần đảm bảo rằng thời gian chờ vẫn đủ để thao tác hoàn tất, ngay cả trong trường hợp xấu nhất. .

    Điều đáng chú ý là các hàm Lambda được thiết kế để tồn tại trong thời gian ngắn và không có trạng thái. Chúng được thiết kế để thực hiện các nhiệm vụ nhỏ, rời rạc. Nếu bạn nhận thấy hàm Lambda mất nhiều thời gian để hoàn thành, bạn nên cân nhắc việc chia hàm đó thành nhiều hàm nhỏ hơn. Sau đó, bạn có thể gọi từng người một bằng trình kích hoạt. Ví dụ: nếu đầu ra của hàm Lambda trước đó được lưu trữ trên một bộ chứa S3 cụ thể.

    Ngoài ra, nếu cần chạy một quy trình dài vượt quá giới hạn 15 phút, bạn có thể cân nhắc sử dụng AWS Step Functions để điều phối một loạt hàm Lambda hoặc các dịch vụ AWS khác nhằm đạt được kết quả mong muốn.

    Thực hành tốt nhất

    Bản thân khoảng thời gian làm việc của thời gian chờ dường như không đủ lớn cho một số cuộc đàm phán mở rộng. Hầu hết thời gian, các nhà phát triển đều thiết lập trực tiếp tới 15 phút cho tất cả các hàm Lambda. Ngay cả khi chức năng này kết thúc sớm hơn nhiều thì cũng không có tác dụng phụ tiêu cực nào xảy ra.

    Tuy nhiên, vẫn còn một số phương pháp hay nhất cần lưu ý.

    #1. Xác định giá trị phù hợp

    Bạn nên đặt giá trị thời gian chờ dựa trên thời gian thực hiện dự kiến ​​của hàm. Về cơ bản, điều này có nghĩa là đặt một giá trị không quá ngắn nhưng cũng không dài một cách không cần thiết.

      Điều gì đã xảy ra với ứng dụng Monkey?

    Ví dụ: bạn có thể muốn đảm bảo tổng thời gian của một hàm Lambda không quá ba phút, chỉ vì lý do kiến ​​trúc hoặc hiệu suất tổng thể của ứng dụng của bạn.

    Tương tự, bạn có thể muốn đảm bảo hàm Lambda sẽ không kết thúc sớm hơn, chẳng hạn như ba phút. Một trong những lý do có thể là do bạn muốn thực hiện một số lần thử lại bên trong mã Lambda. Ví dụ: trong trường hợp một số tài nguyên cần thiết để hoàn thành mã đang bận hoặc bị khóa.

    Vì vậy, trước khi bạn tiếp tục và thiết lập thời gian chờ thành 15 phút, hãy suy nghĩ kỹ về giá trị tối ưu của thời gian thực hiện. Việc xác định các giá trị chính xác hơn chỉ là một công cụ khác để đưa ra một số ranh giới cho toàn bộ nhóm phát triển.

    #2. Giám sát theo thời gian

    Sau khi bạn đặt giới hạn thời gian chờ, hãy cố gắng theo dõi thời gian thực thi các hàm Lambda của bạn. Điều này sẽ cung cấp cho bạn những hiểu biết quan trọng về việc liệu quyết định ban đầu có đúng hay cần một số điều chỉnh.

    Bạn có thể sử dụng số liệu và nhật ký của CloudWatch để theo dõi thời gian thực hiện các chức năng. Sau đó, xác định những việc mất nhiều thời gian hơn dự kiến ​​cũng như những việc cần hoàn thành nhanh hơn nhiều so với dự kiến.

    #3. Lời gọi không đồng bộ

    Nếu hàm Lambda của bạn được kích hoạt bởi một sự kiện không yêu cầu phản hồi ngay lập tức, chẳng hạn như tải tệp lên hoặc thông báo từ hàng đợi, hãy sử dụng lệnh gọi không đồng bộ để giảm nguy cơ hết thời gian chờ. Điều này sẽ làm cho hàm chạy ở chế độ nền mà không cần chờ phản hồi. Tất nhiên, điều này có thể dẫn đến giảm thời gian chờ. Điều này đơn giản là vì bạn không cần đưa vào thời gian thực thi tổng thể của Lambda thời gian chờ mà hàm cần cho tài nguyên đó.

    #4. Sử dụng các hàm bước cho các quy trình phức tạp

    Nếu cần chạy một quy trình dài vượt quá giới hạn 15 phút, bạn có thể sử dụng AWS Step Functions để điều phối một loạt hàm Lambda hoặc các dịch vụ AWS khác nhằm đạt được kết quả đó. Step Function sẽ chia quy trình thành các tác vụ nhỏ hơn, dễ quản lý hơn mà bạn có thể thực hiện trong giới hạn thời gian chờ.

    Bạn thậm chí có thể chạy song song một số hàm lambda trong một hàm bước. Sau đó, hãy để hàm bước đợi tất cả các hàm lambda song song trước khi tiếp tục. Đây là một dạng chia tỷ lệ theo chiều ngang trong đó một số hàm lambda có thể chia một vấn đề và giải quyết từng phần một.

      7 Công cụ quản lý và quản trị Active Directory cho Sysadmin

    Cuối cùng, bạn chỉ cần thu thập các kết quả một phần và xây dựng độ phân giải cuối cùng, chỉ cần làm theo hàm lambda độc lập là đủ.

    #5. Tối ưu hóa mã

    Bạn có thể tối ưu hóa mã hàm Lambda để giảm thời gian thực thi và cải thiện hiệu suất. Điều này rất hữu ích nếu khoảng thời gian chờ không đủ chỉ thỉnh thoảng. Trong trường hợp đó, có thể đáng để tìm kiếm cách tối ưu hóa mã để loại bỏ các trường hợp lỗi như vậy.

    Thời gian chờ ảnh hưởng như thế nào đến việc thanh toán?

    Nguồn: aws.amazon.com

    Cài đặt thời gian chờ cho chức năng AWS Lambda không ảnh hưởng trực tiếp đến việc tính phí cho chức năng đó. Tính phí AWS Lambda dựa trên số lượng yêu cầu và thời lượng thực hiện của hàm.

    Nếu bạn tăng cài đặt thời gian chờ cho hàm Lambda, điều đó có thể dẫn đến thời gian thực thi lâu hơn. Nhưng chỉ khi chức năng đó thực sự cần thêm thời gian. Nếu bạn kết hợp điều đó với tần suất cao hơn của một hàm mất nhiều thời gian hơn để thực thi thì có, bạn có thể mong đợi chi phí cao hơn.

    Tuy nhiên, nếu hàm này không được gọi thường xuyên hoặc nếu nó hoàn thành quá trình sớm hơn giá trị hết thời gian chờ thì tác động đến việc thanh toán có thể rất nhỏ.

    Đây là lý do tại sao việc thiết lập tất cả các hàm Lambda ở thời gian chờ là 15 phút theo mặc định có thể không phải là lý do chính khiến chi phí xử lý tổng thể của bạn tăng lên.

    Tuy nhiên, nó chắc chắn dẫn đến sự gia tăng gián tiếp trong tổng chi phí. Các nhà phát triển sẽ cảm thấy họ có một số dự trữ để sử dụng và họ có thể không tối ưu hóa mã đến mức có thể sẽ làm nếu thời gian chờ hạn chế hơn nhưng vẫn thực tế.

    Một điều nữa là AWS Lambda cung cấp cấp độ miễn phí bao gồm 1 triệu yêu cầu miễn phí và 400.000 GB giây thời gian tính toán mỗi tháng. Nếu mức sử dụng hàm Lambda của bạn nằm trong giới hạn bậc miễn phí, bạn sẽ không phải trả phí cho thời gian thực thi của hàm bất kể cài đặt thời gian chờ.

    Từ cuối cùng

    Hàm AWS Lambda là một công cụ mạnh mẽ, đặc biệt để xử lý serverless trên đám mây AWS. Nó có mục đích và giới hạn mà chúng ta nên biết. Chúng ta đừng cố gắng sử dụng nó cho những trường hợp sử dụng mà nó không được thiết kế cho.

    Nó hoàn hảo cho các hành động đơn giản, không đồng bộ và được kích hoạt lý tưởng mà không yêu cầu thời gian thực hiện dài hơn 15 phút. Nếu bạn cần bất cứ điều gì phức tạp hơn, hãy sử dụng AWS Step Functions để kết hợp nhiều hàm Lambda thành một quy trình được phối hợp duy nhất. Hoặc từ bỏ việc xử lý serverless rẻ hơn và sử dụng các máy chủ có cấu hình và sức mạnh tính toán phù hợp để hoàn thành nhiệm vụ của bạn.

    Tiếp theo, hãy xem phần giới thiệu về AWS Lambda dành cho người mới bắt đầu.

    x