Phân tích chi tiết AWS Lambda

Bản dịch của bài viết được chuẩn bị riêng cho các học viên của khóa học "Dịch vụ điện toán đám mây". Quan tâm đến việc phát triển theo hướng này? Xem lớp học nâng cao của Egor Zuev (Trưởng nhóm tại InBit) "Dịch vụ AWS EC2" và tham gia nhóm khóa học tiếp theo: khai giảng vào ngày 26/XNUMX.

Phân tích chi tiết AWS Lambda

Ngày càng có nhiều người chuyển sang AWS Lambda để có khả năng mở rộng, hiệu suất, tiết kiệm và khả năng xử lý hàng triệu hoặc thậm chí hàng nghìn tỷ yêu cầu mỗi tháng. Để thực hiện việc này, bạn không cần quản lý cơ sở hạ tầng nơi dịch vụ chạy trên đó. Và tính năng tự động điều chỉnh quy mô cho phép bạn phục vụ hàng nghìn yêu cầu đồng thời mỗi giây. Tôi nghĩ AWS Lambda có thể được gọi một cách chính đáng là một trong những dịch vụ AWS phổ biến nhất.

AWS Lambda

AWS Lambda là dịch vụ điện toán serverless theo sự kiện cho phép bạn chạy mã mà không cần cung cấp hay quản lý máy chủ, đồng thời mở rộng các dịch vụ AWS khác bằng logic tùy chỉnh. Lambda tự động phản hồi với nhiều sự kiện khác nhau (được gọi là trình kích hoạt), chẳng hạn như yêu cầu HTTP thông qua Amazon API Gateway, các thay đổi đối với dữ liệu trong bộ chứa Amazon S3 hoặc bảng Amazon DynamoDB; hoặc bạn có thể chạy mã thông qua lệnh gọi API bằng AWS SDK và chuyển đổi trạng thái trong AWS Step Functions.

Lambda chạy mã trên cơ sở hạ tầng điện toán có tính sẵn sàng cao và chịu trách nhiệm hoàn toàn trong việc quản trị nền tảng cơ bản, bao gồm bảo trì máy chủ và hệ điều hành, cung cấp tài nguyên, tự động thay đổi quy mô, giám sát mã và ghi nhật ký. Nghĩa là, bạn chỉ cần tải mã của mình lên và định cấu hình cách thức cũng như thời điểm thực thi mã đó. Đổi lại, dịch vụ sẽ đảm nhiệm việc khởi chạy và đảm bảo tính sẵn sàng cao cho ứng dụng của bạn.

Khi nào nên chuyển sang Lambda?

AWS Lambda là một nền tảng điện toán tiện lợi, phù hợp với nhiều trường hợp sử dụng khác nhau, miễn là ngôn ngữ và thời gian chạy mã của bạn được dịch vụ hỗ trợ. Nếu bạn muốn tập trung vào mã và logic kinh doanh của mình trong khi thuê ngoài bảo trì, cung cấp và thay đổi quy mô máy chủ với chi phí hợp lý, AWS Lambda chắc chắn là lựa chọn phù hợp.

Lambda lý tưởng để tạo giao diện lập trình và khi sử dụng kết hợp với API Gateway, bạn có thể giảm đáng kể chi phí và tiếp cận thị trường nhanh hơn. Có nhiều cách khác nhau để sử dụng các hàm và tùy chọn Lambda nhằm tổ chức kiến ​​trúc serverless - mọi người đều có thể chọn thứ gì đó phù hợp dựa trên mục tiêu của mình.

Lambda cho phép bạn thực hiện nhiều nhiệm vụ khác nhau. Do đó, nhờ hỗ trợ CloudWatch, bạn có thể tạo các tác vụ bị trì hoãn và tự động hóa các quy trình riêng lẻ. Không có hạn chế nào về tính chất và cường độ sử dụng dịch vụ (mức tiêu thụ bộ nhớ và thời gian được tính đến) và không có gì ngăn cản bạn làm việc một cách có hệ thống trên một dịch vụ vi mô chính thức dựa trên Lambda.

Tại đây bạn có thể tạo các hành động hướng dịch vụ không chạy liên tục. Một ví dụ điển hình là chia tỷ lệ hình ảnh. Ngay cả trong trường hợp hệ thống phân tán, các hàm Lambda vẫn có liên quan.

Vì vậy, nếu bạn không muốn giải quyết vấn đề phân bổ và quản lý tài nguyên máy tính, hãy thử AWS Lambda; nếu bạn không cần các phép tính nặng nề, tốn nhiều tài nguyên, hãy thử AWS Lambda; nếu mã của bạn chạy định kỳ thì đúng vậy, bạn nên dùng thử AWS Lambda.

Безопасность

Cho đến nay không có khiếu nại về an toàn. Mặt khác, do nhiều quy trình nội bộ và tính năng triển khai của mô hình này bị ẩn khỏi người dùng môi trường thời gian chạy được quản lý AWS Lambda nên một số quy tắc được chấp nhận chung về bảo mật đám mây trở nên không còn phù hợp.

Giống như hầu hết các dịch vụ AWS, Lambda được cung cấp trên cơ sở tuân thủ và bảo mật chung giữa AWS và khách hàng. Nguyên tắc này giúp giảm gánh nặng vận hành cho khách hàng vì AWS đảm nhận nhiệm vụ duy trì, quản lý và giám sát các thành phần dịch vụ - từ hệ điều hành máy chủ và lớp ảo hóa đến bảo mật vật lý của tài sản cơ sở hạ tầng.

Nói cụ thể về AWS Lambda, AWS chịu trách nhiệm quản lý cơ sở hạ tầng cơ bản, các dịch vụ cơ bản liên quan, hệ điều hành và nền tảng ứng dụng. Mặc dù khách hàng chịu trách nhiệm bảo mật mã của mình, lưu trữ dữ liệu bí mật, kiểm soát quyền truy cập vào mã đó cũng như dịch vụ và tài nguyên Lambda (Quản lý danh tính và quyền truy cập, IAM), bao gồm cả trong giới hạn của các chức năng được sử dụng.

Sơ đồ bên dưới thể hiện mô hình chia sẻ trách nhiệm khi áp dụng cho AWS Lambda. Trách nhiệm của AWS có màu cam và Trách nhiệm của khách hàng có màu xanh lam. Như bạn có thể thấy, AWS chịu trách nhiệm nhiều hơn đối với các ứng dụng được triển khai trên dịch vụ.

Phân tích chi tiết AWS Lambda

Mô hình trách nhiệm chung áp dụng cho AWS Lambda

Thời gian chạy Lambda

Ưu điểm chính của Lambda là bằng cách thay mặt bạn thực hiện một chức năng, dịch vụ sẽ tự phân bổ các tài nguyên cần thiết. Bạn có thể tránh lãng phí thời gian và công sức vào việc quản trị hệ thống và tập trung vào logic nghiệp vụ và mã hóa.

Dịch vụ Lambda được chia thành hai mặt phẳng. Đầu tiên là mặt phẳng điều khiển. Theo Wikipedia, mặt phẳng điều khiển là một phần của mạng chịu trách nhiệm vận chuyển lưu lượng tín hiệu và định tuyến. Đây là thành phần chính đưa ra các quyết định toàn cầu về việc cung cấp, phục vụ và phân phối khối lượng công việc. Ngoài ra, mặt phẳng điều khiển đóng vai trò là cấu trúc liên kết mạng của nhà cung cấp giải pháp, chịu trách nhiệm định tuyến và quản lý lưu lượng.

Mặt phẳng thứ hai là mặt phẳng dữ liệu. Nó, giống như mặt phẳng điều khiển, có nhiệm vụ riêng. Mặt phẳng điều khiển cung cấp các API để quản lý các chức năng (CreatFunction, UpdateFunctionCode) và kiểm soát cách Lambda giao tiếp với các dịch vụ AWS khác. Mặt phẳng dữ liệu kiểm soát API gọi, chạy các hàm Lambda. Sau khi một hàm được gọi, mặt phẳng điều khiển sẽ phân bổ hoặc chọn một môi trường thời gian chạy hiện có được chuẩn bị trước cho hàm đó, sau đó thực thi mã trong đó.

AWS Lambda hỗ trợ nhiều ngôn ngữ lập trình, bao gồm Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 và các ngôn ngữ khác thông qua môi trường thời gian chạy tương ứng của chúng. AWS thường xuyên cập nhật chúng, phân phối các bản vá bảo mật và thực hiện các hoạt động bảo trì khác trên các môi trường này. Lambda cũng cho phép bạn sử dụng các ngôn ngữ khác, miễn là bạn tự triển khai thời gian chạy thích hợp. Và sau đó bạn sẽ phải lo việc bảo trì nó, bao gồm cả việc giám sát sự an toàn của nó.

Tất cả hoạt động như thế nào và dịch vụ sẽ thực hiện các chức năng của bạn như thế nào?

Mỗi chức năng chạy trong một hoặc nhiều môi trường chuyên dụng, chỉ tồn tại trong vòng đời của chức năng đó và sau đó bị hủy. Mỗi môi trường chỉ thực hiện một lệnh gọi tại một thời điểm nhưng nó sẽ được sử dụng lại nếu có nhiều lệnh gọi nối tiếp đến cùng một chức năng. Tất cả các môi trường thời gian chạy đều chạy trên các máy ảo có ảo hóa phần cứng - còn được gọi là microVM. Mỗi microVM được gán cho một tài khoản AWS cụ thể và có thể được các môi trường sử dụng lại để thực hiện các chức năng khác nhau trong tài khoản đó. MicroVM được đóng gói thành các khối xây dựng của nền tảng phần cứng Lambda Worker do AWS sở hữu và vận hành. Các chức năng khác nhau không thể sử dụng cùng một thời gian chạy và các microVM cũng không phải là duy nhất cho các tài khoản AWS khác nhau.

Phân tích chi tiết AWS Lambda

Mô hình cách ly AWS Lambda

Việc cách ly môi trường thời gian chạy được thực hiện bằng một số cơ chế. Ở cấp cao nhất của mỗi môi trường có các bản sao riêng biệt của các thành phần sau:

  • Mã chức năng
  • Bất kỳ lớp Lambda nào được chọn cho hàm
  • Môi trường thực thi chức năng
  • Không gian người dùng tối thiểu dựa trên Amazon Linux

Các cơ chế sau đây được sử dụng để tách biệt các môi trường thực thi khác nhau:

  • cgroups - giới hạn quyền truy cập vào tài nguyên CPU, bộ nhớ, bộ lưu trữ và mạng cho từng môi trường thời gian chạy;
  • không gian tên - nhóm ID tiến trình, ID người dùng, giao diện mạng và các tài nguyên khác do nhân Linux quản lý. Mỗi thời gian chạy chạy trong không gian tên riêng của nó;
  • seccomp-bpf - hạn chế các lệnh gọi hệ thống có thể được sử dụng trong thời gian chạy;
  • iptables và bảng định tuyến - cách ly các môi trường thực thi với nhau;
  • chroot - cung cấp quyền truy cập hạn chế vào hệ thống tệp cơ bản.

Kết hợp với các công nghệ cách ly độc quyền của AWS, các cơ chế này đảm bảo khả năng phân tách thời gian chạy đáng tin cậy. Các môi trường bị cô lập theo cách này không thể truy cập hoặc sửa đổi dữ liệu từ các môi trường khác.

Mặc dù nhiều thời gian chạy của cùng một tài khoản AWS có thể chạy trên một microVM duy nhất, nhưng trong mọi trường hợp, microVM không thể được chia sẻ giữa các tài khoản AWS khác nhau. AWS Lambda chỉ sử dụng hai cơ chế để tách biệt microVM: phiên bản EC2 và Firecracker. Cách ly khách ở Lambda dựa trên phiên bản EC2 đã có từ năm 2015. Firecracker là một trình ảo hóa mã nguồn mở mới được AWS thiết kế đặc biệt cho khối lượng công việc không có máy chủ và được giới thiệu vào năm 2018. Phần cứng vật lý chạy microVM được chia sẻ giữa các khối lượng công việc trên các tài khoản khác nhau.

Lưu môi trường và trạng thái tiến trình

Mặc dù thời gian chạy Lambda là duy nhất cho các hàm khác nhau, nhưng chúng có thể gọi lặp đi lặp lại cùng một hàm, nghĩa là thời gian chạy có thể tồn tại trong vài giờ trước khi bị hủy.

Mỗi thời gian chạy Lambda cũng có một hệ thống tệp có thể ghi có thể truy cập được thông qua thư mục /tmp. Nội dung của nó không thể được truy cập từ các thời gian chạy khác. Liên quan đến tính bền vững của trạng thái quy trình, các tệp được ghi vào /tmp tồn tại trong toàn bộ vòng đời của môi trường thời gian chạy. Điều này cho phép tích lũy kết quả của nhiều cuộc gọi, điều này đặc biệt hữu ích cho các hoạt động tốn kém như tải mô hình học máy.

Truyền dữ liệu cuộc gọi

API gọi có thể được sử dụng ở hai chế độ: chế độ sự kiện và chế độ phản hồi yêu cầu. Trong chế độ sự kiện, cuộc gọi sẽ được thêm vào hàng đợi để thực hiện sau. Trong chế độ phản hồi yêu cầu, hàm này được gọi ngay lập tức với tải trọng được cung cấp, sau đó phản hồi sẽ được trả về. Trong cả hai trường hợp, hàm này chạy trong môi trường Lambda nhưng có đường dẫn tải trọng khác nhau.

Trong các cuộc gọi phản hồi yêu cầu, tải trọng sẽ truyền từ API xử lý yêu cầu (Trình gọi API), chẳng hạn như AWS API Gateway hoặc AWS SDK, đến bộ cân bằng tải, sau đó đến dịch vụ cuộc gọi Lambda (Dịch vụ gọi). Cái sau xác định môi trường thích hợp để thực thi chức năng và chuyển tải trọng đến đó để hoàn thành cuộc gọi. Bộ cân bằng tải nhận lưu lượng truy cập được bảo vệ bằng TLS qua Internet. Lưu lượng truy cập trong dịch vụ Lambda—sau bộ cân bằng tải—đi qua VPC nội bộ trong một khu vực AWS cụ thể.

Phân tích chi tiết AWS Lambda

Mô hình xử lý cuộc gọi AWS Lambda: Chế độ phản hồi yêu cầu

Cuộc gọi sự kiện có thể được thực hiện ngay lập tức hoặc được thêm vào hàng đợi. Trong một số trường hợp, hàng đợi được triển khai bằng Amazon SQS (Amazon Simple Queue Service), dịch vụ này chuyển lệnh gọi đến dịch vụ thực hiện cuộc gọi Lambda thông qua quy trình thăm dò nội bộ. Lưu lượng truyền đi được bảo vệ bởi TLS và không có mã hóa bổ sung nào cho dữ liệu được lưu trữ trong Amazon SQS.

Lệnh gọi sự kiện không trả về phản hồi—Công nhân Lambda chỉ cần bỏ qua mọi thông tin phản hồi. Lệnh gọi dựa trên sự kiện từ Amazon S3, Amazon SNS, CloudWatch và các nguồn khác được Lambda xử lý ở chế độ sự kiện. Lệnh gọi từ luồng Amazon Kinesis và DynamoDB, hàng đợi SQS, Cân bằng tải ứng dụng và lệnh gọi Cổng API được xử lý theo kiểu phản hồi yêu cầu.

Giám sát

Bạn có thể giám sát và kiểm tra các chức năng Lambda bằng nhiều cơ chế và dịch vụ AWS, bao gồm những cơ chế và dịch vụ sau.

amazoncloudwatch
Thu thập các số liệu thống kê khác nhau như số lượng yêu cầu, thời lượng yêu cầu và số lượng yêu cầu không thành công.

Đường mòn đám mây Amazon
Cho phép bạn ghi nhật ký, giám sát liên tục và duy trì thông tin hoạt động tài khoản được liên kết với cơ sở hạ tầng AWS của bạn. Bạn sẽ có toàn bộ lịch sử các hành động được thực hiện bằng Bảng điều khiển quản lý AWS, AWS SDK, công cụ dòng lệnh và các dịch vụ AWS khác.

Tia X AWS
Cung cấp khả năng hiển thị đầy đủ về tất cả các giai đoạn xử lý yêu cầu trong ứng dụng của bạn dựa trên bản đồ các thành phần bên trong của nó. Cho phép bạn phân tích các ứng dụng trong quá trình phát triển và trong môi trường sản xuất.

Cấu hình AWS
Bạn sẽ có thể theo dõi các thay đổi đối với cấu hình hàm Lambda (bao gồm xóa) và thời gian chạy, thẻ, tên trình xử lý, kích thước mã, phân bổ bộ nhớ, cài đặt thời gian chờ và cài đặt đồng thời, cũng như vai trò thực thi Lambda IAM, mạng con và liên kết nhóm bảo mật .

Kết luận

AWS Lambda cung cấp một bộ công cụ mạnh mẽ để xây dựng các ứng dụng an toàn và có thể mở rộng. Nhiều biện pháp bảo mật và tuân thủ trong AWS Lambda giống như trong các dịch vụ AWS khác, mặc dù vẫn có những trường hợp ngoại lệ. Kể từ tháng 2019 năm 1, Lambda tuân thủ SOC 2, SOC 3, SOC XNUMX, PCI DSS, tuân thủ Đạo luật về trách nhiệm giải trình và cung cấp thông tin bảo hiểm y tế (HIPAA) cũng như các quy định khác. Vì vậy, khi bạn đang nghĩ đến việc triển khai ứng dụng tiếp theo của mình, hãy xem xét dịch vụ AWS Lambda - dịch vụ này có thể phù hợp nhất với nhiệm vụ của bạn.

Nguồn: www.habr.com

Thêm một lời nhận xét