AWS Messaging: SQS, SNS & Kinesis Overview

3 min read

SQS

  • Hoạt động theo cơ chế queuing (polling data)
  • Retention: 4 (mặc định) – 14 ngày
  • Security:
    • Encryption: HTTPS, KMS Keys, client-side encryption
    • SQS Access Policies: tương tự như các service khác, kiểu soát việc gửi messages vào queue, đọc queue, …..
  • Visibility timeout:
    • Quãng thời gian mà sau khi message được polled, message sẽ quay ngược trở lại queue ⇒ khoảng thời gian mà message (request) bắt buộc phải được xử lý xong nếu không muốn bị duplicated
    • Có thể dùng API ChangeMessageVisibility có request thêm time nếu chưa handle xong
  • Bao gồm Standard Queue và FIFO Queue
  • Dead Letter Queue (DLQ)
    • Nếu một message bị xử lý fail, nó sẽ quay trở lại queue sau một khoảng time (visibility timeout)
    • Điều này có thể lặp lại nhiều lần ⇒ Set up MaximumReceives threshold và sau đó message sẽ bị đưa vào DLQ nếu vượt quá số lần được processed
    • DLQ cũng là một queue, giúp hỗ trợ debug dễ dàng hơn
    • Sử dụng cơ chế redrive task để move hết message quay trở lại queue thật sau khi debug và fix bug
  • Delay Queue: message sẽ không xuất hiện trong queue ngay lập tức mà sẽ xuất hiện sau một khoảng thời gian (0s – 15 mins)
  • Long Polling: giảm số lần polling bằng cách tăng thời gian chờ mỗi lần polling data (thời gian chờ thường từ 1s-20s)
  • Cách để queue một message ứng với một lượng dữ liệu lớn (static data)
  • Deduplication:
    • Interval là 5 mins
    • Có 2 phương pháp để de-duplicate:
      • dựa vào content: message body sẽ được hash theo phương thức SHA-256 và so sánh
      • Dựa vào message deduplication ID
  • Message Group:
    • Chia một SQS thành các group nhỏ
    • Các messages trong một group sẽ được đảm bảo thứ tự
    • Messages trong các groups có thể được handle song song với nhau

SNS

  • Hoạt động theo cơ chế Pub / Sub
  • Cho phép gửi messages tới nhiều receivers
  • Các giới hạn Số lượng topic Số lượng subscription mỗi topic 100.000 12.500.000
  • Có thể tương tác với rất nhiều các AWS Services
  • Security:
    • Encryption: HTTPS, KMS, client-side encrypt
    • IAM policies
    • SNS Access Policies (tương tự như cái S3 bucket policies)
  • Kết hợp với SQS tạo ra một số mô hình:
  • Bao gồm 2 loại là Standard và FIFO (tương tự như SQS)
    • Hỗ trợ cơ chế Message Group ID và Deduplication tương tự như SQS
    • Dùng SNS loại nào thì CHỈ có thể kết hợp với SQS loại đó
  • Có thể apply cơ chế Filter trước khi gửi data tới các subsriptions

Kinesis

  • Xử lý các luồng dữ liệu real-time
  • Bao gồm:
    • Kinesis Data Streams: xử lý data stream
    • Kinesis Data Firehose: load data stream vào AWS data stores
    • Kinesis Data Analytics: phân tích data stream với SQL hoặc Apache Flink
    • Kinesis Video Streams: làm việc với video stream
  • Retention: 1 – 365 ngày
  • Security
    • HTTPS
    • KMS
    • IAM Policies
    • VPC Endpoints (?????)
  • Producers
  • Khi gặp ThroughoutExceeded
    • Sử dụng highly distributed partition key
    • Tăng số lượng shards
    • Áp dụng cơ chế Retry Exponential backoff
  • Consumers
  • Shard Splitting
    • Khi traffic đến một shard quá lớn, có thể áp dụng cơ chế chia shard để tăng capacity
    • Với mỗi lần chia, 1 shard CHỈ CÓ THỂ chia thành tối đa 2 shards
    • Shard cũ sẽ bị xoá
  • Merge shards
    • Ngược lại với Split shards
    • Các shard có lượng traffics thấp có thể sẽ merge lại với nhau thành 1
    • 1 lần chỉ có thể merge tối đa 2 shards lại với nhau
  • Sử dụng cơ chế Partition Key để gom data liên quan đến nhau vào cùng một shard ⇒ tăng khả năng xử lý song song

Kinesis Data Firehose/Analytics

So sánh Kinesis Data Stream với Kinesis Data Firehose

StreamFirehose
Gần như realtimeĐộ trễ khá lớn (~60s)
Store data tối đa 365 ngàyStore data trong S3 hoặc đổ data đến các Services khác
Cần phải tự setup cơ chế splitting, merging shardsTự động scaling

Link tham khảo hữu ích

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *