Lambda, SNS & SQS
Lambda, SNS và SQS đều là các dịch vụ tính toán của Amazon Web Services (AWS) để xử lý các tác vụ, thông báo và hàng đợi.
AWS Lambda là một dịch vụ tính toán đám mây hoàn toàn quản lý, cho phép bạn chạy mã của mình trên nền tảng đám mây của AWS mà không cần phải quản lý máy chủ. Lambda cho phép bạn chạy mã trong các “hàm” mà không cần phải quản lý các máy chủ riêng biệt. Bạn có thể kích hoạt các hàm Lambda bằng cách gọi từ các sự kiện như các API Gateway, S3, DynamoDB, hoặc bất kỳ sự kiện nào trong AWS.
AWS SNS (Simple Notification Service) là dịch vụ thông báo đám mây của AWS, cho phép bạn gửi thông báo đến nhiều kênh khác nhau như email, SMS và HTTP. SNS cho phép bạn tạo các chủ đề (topic) để nhận thông báo và đăng ký các người nhận thông báo cho các chủ đề đó. Bạn có thể sử dụng SNS để gửi thông báo đến một nhóm người dùng hoặc một ứng dụng cụ thể.
AWS SQS (Simple Queue Service) là dịch vụ hàng đợi đơn giản của AWS. SQS cho phép bạn chuyển các tác vụ xử lý đến hàng đợi và xử lý chúng một cách độc lập. Hàng đợi SQS có thể được sử dụng để giảm tải cho các ứng dụng bận rộn, giúp ứng dụng xử lý các tác vụ một cách hiệu quả hơn. Các ứng dụng có thể truy cập hàng đợi SQS bằng các yêu cầu API, cho phép chúng lấy các tác vụ xử lý khi nó phù hợp với nó và gửi lại kết quả khi xử lý hoàn tất.
Trong Event Processing in AWS, quy trình hoạt động của Lambda, SNS và SQS như sau:
- SNS (Simple Notification Service) nhận các sự kiện từ nguồn khác nhau như AWS services, ứng dụng và các hệ thống khác. SNS được sử dụng để định tuyến các sự kiện đến các kênh khác nhau (ví dụ như email, SMS, HTTP, Lambda, SQS,…).
- SNS đưa sự kiện tới Lambda để xử lý (nếu đã đăng ký Lambda nhận sự kiện đó).
- Lambda xử lý các sự kiện đó, thực hiện các hành động cần thiết, và gửi các kết quả đến các kênh khác nhau (ví dụ như email, SMS, HTTP, SNS,…).
- Nếu Lambda không thể xử lý sự kiện được, nó sẽ đưa sự kiện vào hàng đợi SQS (Simple Queue Service) để xử lý sau.
- SQS nhận các sự kiện từ Lambda, lưu trữ chúng trong hàng đợi và đưa chúng tới các ứng dụng hoặc các hệ thống khác để xử lý sau.
- Khi ứng dụng hoặc hệ thống đang chạy, nó sử dụng SQS để lấy các sự kiện từ hàng đợi và xử lý chúng.
Như vậy, việc sử dụng Lambda, SNS và SQS trong Event Processing in AWS giúp các nhà phát triển xây dựng các hệ thống xử lý sự kiện tự động và linh hoạt hơn, giúp tăng tốc độ và hiệu suất của hệ thống, đồng thời giảm chi phí vận hành.
Fan Out Pattern: deliver to multiple SQS
Trong Event Processing in AWS, Fan Out Pattern được sử dụng để đẩy thông điệp (message) từ một nguồn (source) tới nhiều đích (destinations) thông qua việc gửi thông điệp tới nhiều hàng đợi (queues) thông qua Amazon SQS (Simple Queue Service). Quá trình này được gọi là fan-out vì thông điệp được sao chép và gửi tới nhiều hàng đợi, tương tự như quá trình tán xạ trong vật lý.
Quy trình hoạt động của Fan Out Pattern bao gồm các bước sau:
- Người dùng hoặc ứng dụng đẩy một thông điệp tới một hàng đợi được xác định.
- SQS nhận thông điệp và sao chép nó đến các hàng đợi khác mà đã được đăng ký sẵn với SQS.
- Các hàng đợi đó sẽ được sử dụng bởi các subscriber để lấy thông điệp.
- Subscriber xử lý thông điệp nhận được.
Fan Out Pattern giúp cho việc mở rộng ứng dụng trở nên đơn giản hơn bằng cách cho phép nhiều subscriber có thể đăng ký để nhận thông điệp từ hàng đợi mà không ảnh hưởng đến tốc độ hoặc hiệu suất của ứng dụng. Nó cũng giúp tăng tính sẵn sàng và độ tin cậy của ứng dụng bằng cách cho phép nhiều subscriber được đăng ký để nhận thông điệp và xử lý nó, đồng thời giảm thiểu thời gian chờ đợi cho việc xử lý thông điệp.
S3 Event Notifications
S3 Event Notifications là tính năng của Amazon S3 cho phép tạo ra các thông báo về sự kiện xảy ra trong bucket S3 như tạo, xóa, phục hồi đối tượng hoặc sao chép đối tượng. Khi một sự kiện được kích hoạt, S3 sẽ gửi một thông báo tới một hoặc nhiều hệ thống khác trong hệ sinh thái AWS, chẳng hạn như AWS Lambda, Amazon SNS hay Amazon SQS, và sử dụng các thông tin trong thông báo đó để kích hoạt một hành động cụ thể.
S3 Event Notifications cung cấp khả năng lọc file theo tên hoặc định dạng (chẳng hạn như *.jpg) và tạo các sự kiện tùy chỉnh cho các trường hợp sử dụng đặc biệt. Một trong các trường hợp sử dụng thông dụng của S3 Event Notifications là để tạo các bản thu nhỏ của các hình ảnh được tải lên S3 để tiết kiệm dung lượng lưu trữ và cải thiện tốc độ tải trang web.
Thời gian giao hàng của thông báo sự kiện S3 Event Notification thường chỉ mất vài giây, nhưng đôi khi có thể mất đến một phút hoặc lâu hơn.
S3 Event Notifications with Amazon EventBridge
S3 Event Notifications là tính năng cho phép chúng ta tạo ra các sự kiện thông báo khi có hoạt động trên các đối tượng trong Amazon S3 như tạo, xóa hoặc phục hồi đối tượng. Chúng ta có thể lọc các sự kiện này dựa trên tên đối tượng hoặc định dạng file như (*.jpg).
Ngoài ra, với S3 Event Notifications còn cung cấp khả năng tạo nhiều sự kiện như mong muốn và thường giao tiếp các sự kiện này với các dịch vụ khác của AWS như Step Functions, Kinesis Streams/Firehose…
Nếu kết hợp với Amazon EventBridge, chúng ta có thể sử dụng các tùy chọn lọc JSON nâng cao để xử lý các sự kiện S3. Ví dụ, chúng ta có thể lọc các sự kiện dựa trên kích thước đối tượng, các siêu dữ liệu hay tên đối tượng. Ngoài ra, chúng ta có thể gửi các sự kiện này đến nhiều đích khác nhau như Step Functions, Kinesis Stream/Firehose hay có thể lưu trữ sự kiện trên EventBridge để phục vụ cho việc tái phát sự kiện hoặc giám sát sự kiện được nhận đầy đủ.
Amazon EventBridge – Intercept API Calls
Sơ đồ này giúp quản lý và theo dõi các hoạt động API trong DynamoDB của các user bằng cách sử dụng các dịch vụ khác của AWS.
Cụ thể, khi một user thực hiện một API call để xóa bảng trong DynamoDB, API call này sẽ được ghi lại trong CloudTrail. CloudTrail sẽ tạo ra một event và gửi nó đến Amazon EventBridge để xử lý.
Amazon EventBridge có thể áp dụng các luật (rules) để lọc và xử lý các event từ CloudTrail. Trong trường hợp này, một rule sẽ được tạo ra để theo dõi sự kiện API call xóa bảng DynamoDB.
Nếu sự kiện này được kích hoạt, Amazon EventBridge sẽ gửi thông báo đến SNS, cho phép các người quản trị hoặc nhân viên của tổ chức có thể được cảnh báo ngay lập tức về hành động xóa bảng này. Điều này giúp cho tổ chức có thể phát hiện các hành động độc hại hoặc người dùng vô tình thực hiện các hoạt động sai lầm trong hệ thống DynamoDB của mình.
API Gateway – AWS Service Integration Kinesis Data Streams example
Quá trình này mô tả cách mà một ứng dụng gửi các yêu cầu tới một RESTful API trên Amazon API Gateway, các yêu cầu này sẽ được ghi lại dưới dạng bản ghi trong Kinesis Data Streams. Sau đó, các bản ghi này sẽ được chuyển đến Kinesis Data Firehose để xử lý và lưu trữ dưới dạng các file JSON vào Amazon S3.
Khi một ứng dụng gửi yêu cầu tới RESTful API trên API Gateway, các yêu cầu này sẽ được ghi lại dưới dạng bản ghi trong Kinesis Data Streams. Kinesis Data Streams là một dịch vụ streaming data của AWS cho phép lưu trữ và xử lý dữ liệu stream từ hàng trăm ngàn nguồn khác nhau cùng lúc.
Các bản ghi được ghi lại trong Kinesis Data Streams sẽ được chuyển đến Kinesis Data Firehose, một dịch vụ xử lý dữ liệu và gửi dữ liệu tới các đích khác nhau. Ở đây, dữ liệu sẽ được xử lý và định dạng dưới dạng các file JSON trước khi được gửi đến Amazon S3 để lưu trữ.
Amazon S3 là một dịch vụ lưu trữ đối tượng (object storage) của AWS cho phép lưu trữ và truy cập dữ liệu từ bất kỳ đâu, bất kỳ lúc nào. Các file JSON được lưu trữ trên Amazon S3 có thể được sử dụng để phân tích dữ liệu và trích xuất thông tin hữu ích cho các mục đích khác nhau, như phân tích dữ liệu, xây dựng báo cáo, hay đào tạo mô hình machine learning.