Streaming dữ liệu với DynamoDB

Phát triển ứng dụng trên AWS

Ricardo Sueiras

Principal Technologist

Những điều cơ bản về DynamoDB Streams

 

nền tảng

  • Phản ứng với thay đổi dữ liệu gần thời gian thực.
  • Xây trên mô hình hướng sự kiện.
  • Mỗi thao tác insert, modify, hoặc delete tạo một bản ghi stream.
  • Xây app phản ứng mà không cần polling bảng.
  • Mặc định tắt: bật bằng StreamSpecification.
  • Mỗi stream có ARN riêng, khác ARN của bảng.
Phát triển ứng dụng trên AWS

Thời gian lưu trữ

 

thời gian lưu trữ

  • Bản ghi stream được giữ trong 24 giờ.
    • Thời gian lưu trữ cố định, không cấu hình được.
  • Đổi kiểu view đồng nghĩa tạo lại stream.
    • Stream mới sẽ có ARN mới.
Phát triển ứng dụng trên AWS

Streams và read capacity units của DynamoDB

 

rcu

  • Đọc từ stream KHÔNG tiêu tốn read capacity units (RCU).
  • Bật streams không ảnh hưởng thông lượng đã cấp trước.
Phát triển ứng dụng trên AWS

Bản ghi stream

  • Mỗi bản ghi stream có metadata mô tả thay đổi.
  • Streams ghi lại ba loại sự kiện:
    • INSERT
    • MODIFY
    • REMOVE

 

bản ghi stream

Phát triển ứng dụng trên AWS
  • Kiểu view quyết định dữ liệu trong mỗi bản ghi.
    • KEYS_ONLY: chỉ partition key và sort key.
    • NEW_IMAGE: item đầy đủ sau khi thay đổi.
    • OLD_IMAGE: item đầy đủ trước khi thay đổi.
    • NEW_AND_OLD_IMAGES: item trước và sau.
  • NEW_AND_OLD_IMAGES là lựa chọn chuẩn cho kiểm toán.
  • Bắt buộc cho DynamoDB Global Tables.

các kiểu view của stream

Phát triển ứng dụng trên AWS
  • Streams giữ thứ tự theo từng partition key.
  • Lambda xử lý bản ghi theo lô.
    • Checkpoint tiến độ sau mỗi lô thành công.
    • Lô lỗi sẽ được thử lại.
    • Thử lại cho đến khi thành công hoặc bản ghi hết hạn.

 

thứ tự

Phát triển ứng dụng trên AWS

 

streams và aws lambda

  • Lambda là consumer stream phổ biến nhất.
  • Dùng ánh xạ nguồn sự kiện dựa trên polling.
  • Đọc bản ghi từ stream.
  • Gọi hàm của bạn với các lô bản ghi.
Phát triển ứng dụng trên AWS

Mẫu kiến trúc

 

mẫu kiến trúc

  • Mẫu end-to-end phổ biến:
    • Cập nhật item được ghi vào DynamoDB.
    • Thay đổi tạo ra bản ghi stream.
    • Bản ghi kích hoạt Lambda để xử lý.
Phát triển ứng dụng trên AWS

Mở rộng

 

mở rộng

  • Streams được chia nội bộ thành shard.
    • Tương tự Kinesis Data Streams.
  • Mỗi shard cho phép tối đa hai consumer đồng thời.
    • Vượt giới hạn này thường gây throttling khi đọc.
Phát triển ứng dụng trên AWS
  • Độ đồng thời của Lambda tỉ lệ với số shard.
  • Tinh chỉnh xử lý với:
    • BatchSize: số bản ghi tối đa mỗi lần gọi.
    • MaximumBatchingWindow: chờ trước khi xử lý lô chưa đầy.
    • MaximumRetryAttempts: số lần thử lại trước khi gửi đến nơi xử lý lỗi.
    • MaximumRecordAgeInSeconds: bỏ bản ghi quá tuổi này.
    • ParallelizationFactor: xử lý đồng thời trên mỗi shard (tối đa 10).

mở rộng với lambda

Phát triển ứng dụng trên AWS

Lọc và tumbling windows

  • Lambda hỗ trợ tiêu chí lọc.
    • Loại bỏ bản ghi trước khi hàm được gọi.
    • Giảm số lần gọi không cần thiết và chi phí.
  • Lambda hỗ trợ tumbling windows.
    • Tổng hợp trạng thái qua các lô trong một shard.

 

lọc và tumbling windows

Phát triển ứng dụng trên AWS

Quản lý bản ghi trùng lặp

  • Streams ghi nhận mỗi thay đổi đúng một lần.
  • Lambda xử lý với ngữ nghĩa at-least-once.
    • Thử lại có thể xử lý lại cùng bản ghi.
  • Thiết kế consumer idempotent.
  • Mẫu phổ biến: lưu eventID hoặc SequenceNumber đã xử lý.
    • Bỏ qua bản ghi đã xử lý.
    • Cả hai ổn định qua các lần thử lại.
    • Khóa idempotency đáng tin cậy.

 

xử lý bản ghi trùng lặp

Phát triển ứng dụng trên AWS

Xử lý lỗi

 

xử lý lỗi

  • ReportBatchItemFailures chỉ thử lại các bản ghi lỗi.
  • Xử lý lỗi Lambda với:
    • BisectBatchOnFunctionError để chia đôi lô.
    • Điều khiển retry.
    • Điểm đến xử lý lỗi cho các lô độc gây hết số lần retry.
Phát triển ứng dụng trên AWS

Tích hợp DynamoDB với Kinesis

 

tích hợp

  • Bảng có thể đẩy thay đổi trực tiếp sang Kinesis Data Streams.
    • Qua tính năng Kinesis Data Streams for DynamoDB.
    • Năng lực riêng, song song, không phải chuỗi nối.
    • Sự kiện KHÔNG đi qua DynamoDB Streams.
  • Cả hai có thể chạy đồng thời trên cùng bảng.
    • Hoạt động độc lập.
    • Phục vụ kiến trúc streaming và phân tích rộng hơn.
Phát triển ứng dụng trên AWS

Giám sát: vấn đề thường gặp

 

khắc phục sự cố

  • Vấn đề vận hành thường gặp cần theo dõi:
    • Partition nóng.
    • Thử lại thất bại.
    • Xử lý trùng lặp.
    • Throttling và độ trễ consumer.
Phát triển ứng dụng trên AWS

Giám sát: CloudWatch metrics

  • Metric CloudWatch cần theo dõi:
    • Lambda Errors: lộ ra lỗi mã hoặc lỗi downstream.
    • IteratorAge: giá trị cao báo hiệu consumer chậm.
    • Throttling metrics: vượt giới hạn đọc.
    • Batch processing failures: bản ghi gửi tới DLQ.

 

khắc phục sự cố

Phát triển ứng dụng trên AWS

Bảo mật

  • Quyền truy cập stream được kiểm soát bằng IAM.
  • Streams thừa hưởng cấu hình mã hóa của bảng.
    • Gồm mã hóa phía máy chủ ở trạng thái lưu trữ với KMS.
  • Áp dụng nguyên tắc đặc quyền tối thiểu cho consumer và bộ xử lý downstream.

 

bảo mật

Phát triển ứng dụng trên AWS

Cùng luyện tập nào!

Phát triển ứng dụng trên AWS

Preparing Video For Download...