của James Beswick | Ngày 7 tháng 11, 2023 4:01 AM| trong Amazon Simple Queue Service (SQS) , AWS Lambda , Serverless | Liên kết cố định | Chia sẻ
Bài đăng này được viết bởi Anton Aleksandrov, Kiến trúc sư giải pháp chính và Tarun Rai Madan, Giám đốc sản phẩm cấp cao.
Hôm nay, AWS thông báo rằng AWS Lambda hỗ trợ tốc độ mở rộng quy mô thăm dò nhanh hơn tới 5 lần cho khối lượng công việc Lambda tăng đột biến được định cấu hình bằng Amazon Simple Queue Service (Amazon SQS) làm event source.
Tính năng này cho phép khách hàng xây dựng các ứng dụng hướng sự kiện bằng cách sử dụng Lambda và SQS để đạt được khả năng mở rộng phản hồi nhanh hơn khi có nhiều message đột ngột xuất hiện trong SQS queues, đồng thời giảm nhu cầu sao chép các Lambda function hoặc SQS queues để xử lý message nhanh hơn.
Tổng quan
Khách hàng xây dựng các ứng dụng nhắn tin và hướng sự kiện hiện đại bằng AWS Lambda sử dụng Amazon SQS làm khối xây dựng cơ bản để tạo kiến trúc tách rời. Amazon SQS là dịch vụ xếp hàng message được quản lý toàn phần dành cho các vi dịch vụ, hệ thống phân tán và ứng dụng serverless. Khi Lambda function đăng ký SQS queues làm event source, Lambda sẽ thăm dò hàng đợi, truy xuất message và gửi hàng loạt message đã truy xuất đến trình xử lý hàm để xử lý. Để sử dụng message một cách hiệu quả, Lambda phát hiện sự gia tăng về độ sâu hàng đợi và tăng số lượng quy trình thăm dò để xử lý messages được xếp hàng đợi.
Cho đến hôm nay, Lambda đã bổ sung tối đa 60 lần thực thi đồng thời mỗi phút cho các Lambda function được đăng ký vào SQS queues, tăng quy mô lên tối đa 1.250 lần thực thi đồng thời trong khoảng 20 phút. Tuy nhiên, khách hàng cho chúng tôi biết rằng một số ứng dụng hướng sự kiện hiện đại mà họ xây dựng bằng Lambda và SQS rất nhạy cảm với lượng message tăng đột biến, điều này có thể gây ra sự chậm trễ đáng kể trong việc xử lý message cho người dùng cuối. Để khai thác sức mạnh của Lambda cho các ứng dụng gặp phải hàng loạt message trong SQS queues, những khách hàng này cần tính năng thăm dò message Lambda để mở rộng quy mô nhanh hơn.
Với thông báo ngày hôm nay, các Lambda function đăng ký SQS queues có thể mở rộng quy mô nhanh hơn tới 5 lần đối với các hàng đợi có lượng message tồn đọng tăng đột biến, thêm tới 300 lần thực thi đồng thời mỗi phút và tăng quy mô lên tối đa 1.250 lần thực thi đồng thời. Cải tiến mở rộng quy mô này giúp tận dụng tính đơn giản của tích hợp Lambda và SQS để xây dựng các ứng dụng hướng sự kiện có khả năng mở rộng nhanh hơn khi có nhiều message đến, đặc biệt là đối với các hệ thống thời gian thực. Nó cũng mang lại cho khách hàng lợi ích của việc xử lý nhanh hơn khi có nhiều message trong SQS queues, đồng thời tiếp tục mang đến sự linh hoạt để hạn chế số lệnh gọi Lambda đồng thời tối đa trên mỗi SQS event source.
Kiểm soát số lệnh gọi Lambda đồng thời tối đa bằng SQS
Tỷ lệ mở rộng cải tiến mới sẽ tự động được áp dụng cho tất cả tài khoản AWS sử dụng Lambda và SQS làm event source. Bạn không phải thực hiện hành động rõ ràng nào và không phải trả thêm phí. Cải tiến mở rộng quy mô này giúp khách hàng xây dựng các ứng dụng Lambda hiệu suất cao hơn khi họ cần mở rộng quy mô thăm dò SQS nhanh hơn. Để ngăn chặn khả năng làm quá tải các phần phụ thuộc xuôi dòng, Lambda cung cấp cho khách hàng quyền kiểm soát để đặt số lần thực thi đồng thời tối đa ở cấp chức năng có tính đồng thời dự trữ và cấp event source có tính đồng thời tối đa .
Sơ đồ sau đây minh họa các cài đặt mà bạn có thể sử dụng để kiểm soát tốc độ luồng của SQS event source. Bạn sử dụng đồng thời dành riêng để kiểm soát tỷ lệ cấp độ chức năng và đồng thời tối đa để kiểm soát tỷ lệ event source.
Reserved concurrency là đồng thời tối đa mà bạn muốn phân bổ cho một hàm. Khi một hàm được phân bổ đồng thời dành riêng thì không có hàm nào khác có thể sử dụng đồng thời đó.
AWS khuyên bạn nên sử dụng đồng thời dành riêng khi muốn đảm bảo một hàm có đủ đồng thời để mở rộng quy mô. Khi SQS event source đang cố gắng mở rộng quy mô các lệnh gọi Lambda đồng thời, nhưng hàm đã đạt đến ngưỡng được xác định bởi sự tương tranh dành riêng, thì dịch vụ Lambda sẽ điều tiết các lệnh gọi hàm tiếp theo.
Điều này có thể dẫn đến việc SQS event source cố gắng giảm quy mô, giảm số lượng message được xử lý đồng thời. Tùy thuộc vào cấu hình hàng đợi, messages được điều chỉnh sẽ được trả về hàng đợi để thử lại, hết hạn dựa trên chính sách lưu giữ hoặc được gửi đến dead-letter queue (DLQ) hoặc on-failure destination .
Cài đặt maximum concurrency cho phép bạn kiểm soát đồng thời ở cấp event source. Nó cho phép bạn xác định số lượng lệnh gọi đồng thời tối đa mà event source cố gắng gửi đến Lambda function. Đối với các trường hợp trong đó một chức năng có nhiều SQS event source được định cấu hình, bạn có thể xác định mức độ đồng thời tối đa cho từng event source riêng biệt, cung cấp khả năng kiểm soát chi tiết hơn. Khi cố gắng thêm khả năng kiểm soát tốc độ vào các SQS event source, AWS khuyên bạn nên bắt đầu đánh giá khả năng kiểm soát đồng thời tối đa trước tiên vì nó mang lại tính linh hoạt cao hơn.
Đồng thời dành riêng và đồng thời tối đa là các khả năng bổ sung và có thể được sử dụng cùng nhau. Tính đồng thời tối đa có thể giúp ngăn chặn tình trạng áp đảo các hệ thống hạ nguồn và các lệnh gọi bị điều tiết. Đồng thời dành riêng giúp đảm bảo tính đồng thời có sẵn cho chức năng.
Kịch bản ví dụ
Hãy xem xét doanh nghiệp của bạn phải xử lý khối lượng lớn tài liệu từ bộ lưu trữ. Cứ sau vài giờ, các đối tác kinh doanh của bạn tải khối lượng lớn tài liệu lên bộ chứa S3 trong tài khoản của bạn.
Để có khả năng phục hồi, bạn đã thiết kế ứng dụng của mình để gửi message đến SQS queues cho từng tài liệu được tải lên, nhờ đó, bạn có thể xử lý chúng một cách hiệu quả mà không vô tình bỏ qua bất kỳ tài liệu nào. Các tài liệu được xử lý bằng Lambda function, mất khoảng hai giây để xử lý một tài liệu.
Việc xử lý các tài liệu này là một hoạt động tiêu tốn nhiều CPU, do đó bạn quyết định xử lý một tài liệu cho mỗi lệnh gọi. Bạn muốn sử dụng sức mạnh của Lambda để triển khai quá trình xử lý song song cho nhiều môi trường thực thi đồng thời nhất có thể. Bạn muốn Lambda function mở rộng quy mô nhanh chóng để xử lý các tài liệu đó song song nhanh nhất có thể và giảm tỷ lệ về 0 sau khi tất cả tài liệu được xử lý để tiết kiệm chi phí.
Khi một đối tác kinh doanh tải lên 200.000 tài liệu, 200.000 message sẽ được gửi đến SQS queues. Lambda function được định cấu hình bằng SQS event source và bắt đầu sử dụng các thông báo từ hàng đợi.
Sơ đồ này hiển thị kết quả chạy kịch bản thử nghiệm trước khi cải thiện quy mô SQS event source. Đúng như mong đợi, bạn có thể thấy số lần thực thi đồng thời tăng thêm 60 lần mỗi phút. Mất khoảng 16 phút để dần dần mở rộng quy mô lên tới 900 lần thực thi đồng thời và xử lý tất cả thư trong hàng đợi.
Sơ đồ sau đây cho thấy kết quả của việc chạy cùng một kịch bản thử nghiệm sau khi cải thiện quy mô SQS event source. Khung thời gian được sử dụng cho cả hai biểu đồ là như nhau, nhưng hiệu suất trên biểu đồ thứ hai tốt hơn. Số lần thực thi đồng thời tăng thêm 300 mỗi phút. Chỉ mất 4 phút để mở rộng quy mô lên tới 1.250 lần thực thi đồng thời và tất cả thư trong hàng đợi được xử lý trong khoảng 8 phút.
Triển khai ví dụ này
Sử dụng dự án mẫu để sao chép thử nghiệm hiệu suất này trong tài khoản AWS của riêng bạn. Làm theo hướng dẫn trong README.md để cung cấp dự án mẫu trong tài khoản AWS của bạn bằng AWS Cloud Development Kit (CDK).
Dự án mẫu này được cấu hình để minh họa khối lượng công việc quy mô lớn xử lý 200.000 message. Việc chạy dự án mẫu này trong tài khoản của bạn có thể phải chịu phí. Xem giá AWS Lambda và giá Amazon SQS.
Sau khi triển khai, hãy sử dụng ứng dụng trong thư mục “sqs-cannon” để gửi 200.000 message đến SQS queues (hoặc cấu hình lại thành bất kỳ số nào khác). Phải mất vài phút để điền message vào SQS queues. Sau khi tất cả message được gửi, hãy bật SQS event source, như được mô tả trong README.md và theo dõi các biểu đồ trong bảng thông tin CloudWatch được cung cấp.
Hạn ngạch đồng thời mặc định cho tài khoản AWS mới là 1000. Nếu bạn chưa yêu cầu tăng hạn ngạch này thì số lần thực thi đồng thời được giới hạn ở con số này. Sử dụng Service Quotas hoặc liên hệ với nhóm tài khoản của bạn để yêu cầu tăng đồng thời.
Các biện pháp bảo mật tốt nhất
Luôn sử dụng các quyền ít đặc quyền nhất khi cấp cho Lambda function quyền truy cập vào SQS queues. Điều này làm giảm bề mặt tấn công tiềm ẩn bằng cách đảm bảo rằng chỉ những chức năng cụ thể mới có quyền thực hiện các hành động cụ thể trên các hàng đợi cụ thể. Ví dụ: trong trường hợp hàm của bạn chỉ thăm dò từ hàng đợi, hãy cấp cho nó quyền đọc message nhưng không được gửi message mới. Một function execution role xác định những hành động nào mà hàm của bạn được phép thực hiện trên các tài nguyên khác. Một queue access policy xác định các nguyên tắc có thể truy cập hàng đợi này và các hành động được phép.
Sử dụng server-side encryption (SSE) để lưu trữ dữ liệu nhạy cảm trong SQS queues được mã hóa. Với SSE, message của bạn luôn được lưu trữ ở dạng mã hóa và SQS chỉ giải mã chúng để gửi đến người tiêu dùng được ủy quyền. SSE bảo vệ nội dung của message trong hàng đợi bằng khóa mã hóa do SQS quản lý (SSE-SQS) hoặc khóa được quản lý trong AWS Key Management Service (SSE-KMS).
Phần kết luận
Khả năng mở rộng Lambda SQS event source polling được cải tiến cho phép hiệu suất mở rộng nhanh hơn tới 5 lần đối với khối lượng công việc theo sự kiện tăng đột biến bằng cách sử dụng SQS queues mà không mất thêm phí. Cải tiến này mang lại cho khách hàng lợi ích của việc xử lý nhanh hơn khi có nhiều message trong SQS queues, đồng thời tiếp tục cung cấp tính linh hoạt để hạn chế số lần gọi đồng thời tối đa của SQS dưới dạng event source.
Để biết thêm tài nguyên học tập không có máy chủ, hãy truy cập Serverless Land .