1. Auto Scaling Group (ASG).
1.1. If the load is too big, some transactions may be lost.
Nếu tải của hệ thống quá lớn và vượt quá khả năng xử lý, một số giao dịch có thể bị mất. Điều này có thể xảy ra khi hệ thống không thể xử lý tất cả các yêu cầu được gửi đến trong thời gian quy định hoặc khi tình huống xảy ra vượt quá khả năng xử lý của hệ thống. Ví dụ, một trang web bán hàng có thể mất một số đơn hàng nếu số lượng người dùng truy cập cùng lúc quá lớn, vượt quá khả năng xử lý của hệ thống. Để tránh mất giao dịch, các nhà phát triển có thể triển khai các giải pháp như scale-up hoặc scale-out hệ thống, tăng khả năng xử lý của hệ thống hoặc sử dụng các cơ chế giảm tải tạm thời như giảm bớt số lượng yêu cầu được chấp nhận vào một thời điểm.
Trong mô hình ứng dụng có tự động co dãn (Auto-Scaling), các yêu cầu gửi tới ứng dụng (requests) được chia nhỏ thành các giao dịch (transactions), ví dụ như thêm, sửa hoặc xóa dữ liệu từ người dùng. Những giao dịch này sau đó sẽ được chuyển đến các dịch vụ lưu trữ dữ liệu của AWS như Amazon RDS, Amazon Aurora, Amazon DynamoDB để lưu trữ và xử lý.
Amazon RDS là dịch vụ quản lý cơ sở dữ liệu quan hệ (RDBMS) được quản lý bởi AWS, giúp quản lý các tác vụ như phân phối cơ sở dữ liệu, sao lưu và khôi phục dữ liệu tự động. Amazon Aurora cũng là một dịch vụ quản lý cơ sở dữ liệu quan hệ (RDBMS), nhưng được tối ưu hóa cho hiệu suất và khả năng mở rộng cao. Trong khi đó, Amazon DynamoDB là một dịch vụ cơ sở dữ liệu NoSQL, được tối ưu hóa cho việc lưu trữ và truy xuất dữ liệu có tính mở rộng cao.
Khi một yêu cầu đến được chuyển đến các dịch vụ này, nó sẽ được thêm vào một hàng đợi (queue) để đảm bảo các giao dịch được xử lý theo thứ tự và tránh mất dữ liệu. Tùy thuộc vào số lượng giao dịch và lưu lượng truy cập, kích thước của các máy chủ và số lượng các tài nguyên lưu trữ sẽ tự động được điều chỉnh (co dãn hoặc giãn nở) để đáp ứng nhu cầu sử dụng của ứng dụng một cách hiệu quả và tiết kiệm chi phí.
1.2. SQS as a buffer to database writes.
SQS có thể được sử dụng như một bộ đệm để giảm thiểu tải cho các ghi dữ liệu vào cơ sở dữ liệu. Khi các ứng dụng nhận được yêu cầu ghi dữ liệu, thay vì ghi trực tiếp vào cơ sở dữ liệu, chúng có thể tạo một thông điệp và gửi đến một hàng đợi SQS. Sau đó, một nhóm worker có thể lấy các thông điệp này từ hàng đợi, xử lý chúng và ghi vào cơ sở dữ liệu.
Sử dụng SQS như một bộ đệm cho phép ứng dụng xử lý các ghi dữ liệu theo lô, giảm số lượng truy vấn đến cơ sở dữ liệu và làm giảm đáng kể tải cho cơ sở dữ liệu. Hơn nữa, SQS cung cấp tính năng tự động mở rộng, cho phép tăng đáng kể khả năng chịu tải của hệ thống mà không ảnh hưởng đến tốc độ xử lý và sự phản hồi của hệ thống.
Cách sử dụng Amazon SQS như một hàng đợi tạm thời để xử lý các thao tác ghi vào cơ sở dữ liệu.
Trong kịch bản này, bạn có thể sử dụng SQS như một bộ đệm cho các thao tác ghi vào cơ sở dữ liệu, giúp giảm tải cho cơ sở dữ liệu và tăng khả năng mở rộng.
Các yêu cầu ghi vào cơ sở dữ liệu của bạn sẽ được chuyển đến hàng đợi SQS bằng cách sử dụng SendMessage API. Các máy chủ địa phương có thể gửi yêu cầu ghi vào hàng đợi mà không cần phải kết nối trực tiếp đến cơ sở dữ liệu.
Sau đó, bạn có thể sử dụng Auto-Scaling để đẩy nhiều hơn các máy chủ đến xử lý các yêu cầu ghi vào hàng đợi SQS. Khi các yêu cầu được xử lý, SQS sẽ trả về các thông báo cho các máy chủ của bạn để thực hiện các thao tác ghi vào cơ sở dữ liệu.
Điều này có nghĩa là bạn có thể tận dụng khả năng mở rộng của SQS để xử lý lượng lớn yêu cầu ghi vào cơ sở dữ liệu một cách hiệu quả, đồng thời giảm tải cho cơ sở dữ liệu và giảm thời gian phản hồi cho các yêu cầu ghi vào.
1.3. SQS to decouple between application tiers.
Giả sử bạn có một ứng dụng web với kiến trúc Auto-Scaling đằng sau một hàng đợi SQS. Quá trình hoạt động của ứng dụng như sau:
- Front-end web app (Auto-Scaling) xử lý các yêu cầu của người dùng và gửi các tin nhắn đến SQS Queue thông qua SendMessage.
- SQS Queue lưu trữ các tin nhắn đó và chờ đợi các Back-end processing application (Auto-Scaling) để xử lý chúng thông qua ReceiveMessages.
- Back-end processing application (Auto-Scaling) lấy các tin nhắn từ SQS Queue thông qua ReceiveMessages và xử lý chúng.
- Sau khi tin nhắn được xử lý xong, ứng dụng sẽ tiến hành thêm dữ liệu vào cơ sở dữ liệu thông qua các yêu cầu SQL.
Việc sử dụng SQS làm bộ đệm giúp giảm bớt tải cho ứng dụng và tăng tính ổn định của nó. Nó cũng cho phép ứng dụng xử lý các yêu cầu nhanh hơn bằng cách phân tán các tác vụ đến các máy chủ khác nhau và đảm bảo rằng các tác vụ được xử lý theo thứ tự đúng đắn.
2. Amazon SNS.
Nếu bạn muốn gửi một thông báo đến nhiều người nhận, bạn có thể sử dụng dịch vụ Amazon SNS (Simple Notification Service) để phát thông báo đến tất cả các người đăng ký trên một chủ đề. Bạn chỉ cần gửi thông báo đến chủ đề SNS và tất cả các người đăng ký trên chủ đề đó sẽ nhận được thông báo. Bạn có thể tạo nhiều chủ đề khác nhau để phân loại các thông báo khác nhau và người dùng có thể đăng ký nhận các thông báo từ các chủ đề khác nhau. Điều này giúp tăng tính linh hoạt và hiệu quả trong việc phân phối thông báo đến nhiều người nhận cùng một lúc.
Amazon Simple Notification Service (SNS) là một dịch vụ được sử dụng để gửi thông báo hoặc thông điệp đến nhiều đối tượng nghe. Trong kiến trúc của SNS, có một bên gửi thông điệp (event producer) và nhiều bên nhận thông điệp (event receivers). Bên gửi chỉ cần gửi thông điệp tới một chủ đề (SNS topic) duy nhất, và các bên nhận được đăng ký nhận thông điệp từ chủ đề đó.
SNS topic có thể có nhiều người đăng ký để nhận thông báo. Khi có thông điệp gửi tới chủ đề đó, SNS sẽ gửi thông điệp đó đến tất cả các đăng ký (subscribers) của chủ đề đó. Hiện nay, SNS cho phép lọc thông điệp để chỉ gửi đến một số đăng ký nhất định.
Mỗi chủ đề SNS có thể có tối đa 12,500,000 người đăng ký và tối đa 100,000 chủ đề.
SNS integrates with a lot of AWS services
Đúng vậy, SNS tích hợp được với rất nhiều dịch vụ AWS khác, cho phép các dịch vụ đó gửi dữ liệu trực tiếp đến SNS để nhận thông báo. Các dịch vụ này bao gồm, nhưng không giới hạn trong, Amazon CloudWatch, AWS CloudFormation, AWS Elastic Beanstalk, Amazon S3, Amazon EC2 Auto Scaling, AWS CloudTrail, AWS Cloud9, Amazon CloudFront, AWS CodeCommit, AWS Config, Amazon SES, Amazon SQS, Amazon Kinesis Data Firehose, và nhiều hơn nữa. Việc tích hợp với nhiều dịch vụ này giúp SNS trở thành một phương tiện thông báo phổ biến và đa năng cho các ứng dụng và hệ thống AWS.
AWS SNS – How to publish
Để gửi thông báo đến các đối tượng khác nhau, ta có thể sử dụng AWS SNS. SNS có thể kết nối với rất nhiều dịch vụ của AWS, cho phép gửi thông báo đến các kênh khác nhau. Các thông báo này có thể được gửi đến email, SMS, HTTP, Lambda function, SQS, hoặc SNS topics.
Để gửi thông báo đến các đối tượng khác nhau, ta cần thực hiện các bước sau:
- Tạo một SNS topic
- Tạo một hoặc nhiều subscription để đăng ký nhận thông báo (có thể là email, SMS, HTTP, Lambda function, SQS, hoặc SNS topics khác)
- Publish thông báo đến topic
Để gửi thông báo trực tiếp đến các ứng dụng di động, SNS cung cấp phương thức Direct Publish. Để sử dụng phương thức này, ta cần thực hiện các bước sau:
- Tạo một ứng dụng trên nền tảng của ứng dụng di động (ví dụ: Apple APNS, Google GCM, Amazon ADM)
- Tạo một endpoint trên ứng dụng
- Publish thông báo đến endpoint của ứng dụng.
SNS cũng cung cấp SDK cho phép ta tích hợp SNS vào các ứng dụng của mình. Với SDK, ta có thể tạo và quản lý các SNS topic và subscription, cũng như gửi thông báo đến topic hoặc endpoint của ứng dụng di động.
Amazon SNS – Security
Amazon SNS cung cấp các tính năng bảo mật để đảm bảo an toàn cho các thông báo được gửi đến các chủ đề (topics) của nó. Các tính năng bảo mật bao gồm:
Encryption (Mã hóa):
- In-flight encryption: SNS sử dụng HTTPS API để mã hóa dữ liệu truyền tải giữa SNS và người dùng.
- At-rest encryption: SNS cung cấp khả năng mã hóa dữ liệu ở trạng thái nghỉ ngơi bằng cách sử dụng các khóa KMS (Key Management Service) của AWS.
- Client-side encryption: Nếu khách hàng muốn thực hiện mã hóa / giải mã bằng chính mình, SNS cung cấp khả năng mã hóa / giải mã trên máy khách.
Access Controls (Kiểm soát truy cập):
- SNS sử dụng IAM policies để quản lý quyền truy cập vào API của nó.
- SNS Access Policies: Tương tự như S3 bucket policies, SNS Access Policies được sử dụng để kiểm soát quyền truy cập vào các chủ đề SNS.
- SNS Access Policies rất hữu ích cho việc cấp quyền truy cập chéo tài khoản đến các chủ đề SNS.
- Nó cũng rất hữu ích để cho phép các dịch vụ khác (S3…) ghi vào một chủ đề SNS.