Dữ liệu streaming

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

Ricardo Sueiras

Principal Technologist

Các nguyên lý của dữ liệu streaming

 

dữ liệu streaming

  • Bản ghi được xử lý liên tục ngay khi đến.
  • Producer ghi vào một stream.
  • Consumer đọc độc lập và song song.
  • Hấp thụ lưu lượng tăng đột biến mà không chờ batch.
Phát triển ứng dụng trên AWS

Streaming data gồm những gì?

 

thành phần hệ thống streaming

  • Producer: ứng dụng phát ra bản ghi.
  • Stream: bộ đệm bền vững, có thứ tự, tách producer khỏi consumer.
  • Consumer: ứng dụng đọc và xử lý bản ghi.
  • Lưu trữ và giữ lại: xác định thời gian bản ghi còn khả dụng để replay.
Phát triển ứng dụng trên AWS

Shards

 

shards

 

  • Shard là đơn vị thông lượng và xử lý song song.
  • Khóa phân vùng phân phối bản ghi qua các shard.
  • Bảo đảm thứ tự chỉ trong phạm vi một shard.
  • Consumer dùng checkpoint để theo dõi tiến độ và khôi phục khi lỗi.
Phát triển ứng dụng trên AWS

Dịch vụ AWS quản lý cho dữ liệu streaming

  • Amazon Kinesis Data Streams.
  • Amazon Data Firehose.
  • Các khối xây dựng cốt lõi cho ứng dụng dữ liệu streaming.

 

dịch vụ aws

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

Kinesis Data Streams

  • Độ trễ thấp.
  • Giữ lại cấu hình được: 24 giờ (mặc định) đến 365 ngày.
  • Stream bền vững, có thể replay.
  • Nhiều consumer có thể đọc song song.
  • Nhà phát triển quản lý scale bằng shard.

 

kinesis data streams

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

Khi nào dùng Kinesis Data Streams

  • Chọn khi bạn cần độ trễ thời gian thực.
  • Cần replay bản ghi.
  • Có nhiều consumer độc lập.
  • Cần logic chuyển đổi tùy chỉnh.

 

kinesis data streams

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

Ghi bản ghi

 

thư viện máy khách

  • Khóa phân vùng kiểm soát đặt shard và thứ tự.
  • PutRecords gom tối đa 500 bản ghi hoặc 5 MB mỗi yêu cầu.
  • Lỗi được báo theo từng bản ghi.
  • FailedRecordCount giúp xác định bản ghi lỗi.
Phát triển ứng dụng trên AWS

Đọc bản ghi: chế độ cổ điển

 

cổ điển

 

  • Consumer thăm dò theo nhu cầu qua Kinesis API.
  • Giới hạn ghi: 1 MB/giây hoặc 1.000 bản ghi/giây.
  • Giới hạn đọc: 2 MB/giây hoặc 5 lệnh GetRecords/giây.
Phát triển ứng dụng trên AWS

Đọc bản ghi: điểm bắt đầu stream

 

bắt đầu stream

  • Consumer chỉ định điểm bắt đầu đọc trong stream.
  • TRIM_HORIZON: bản ghi cũ nhất còn trong shard.
  • LATEST: bản ghi mới tiếp theo.
  • AT_SEQUENCE_NUMBER hoặc AFTER_SEQUENCE_NUMBER: từ một sequence number cụ thể.
  • AT_TIMESTAMP: tại hoặc sau một timestamp chỉ định.
Phát triển ứng dụng trên AWS

Đọc bản ghi: enhanced fan-out

  • Mỗi consumer đã đăng ký có 2 MB/giây riêng trên mỗi shard.
  • Bản ghi được đẩy qua HTTP/2.
  • Dùng khi nhiều consumer độc lập cần độ trễ thấp.
  • Đồng thời cần thông lượng cao đến cùng stream.

 

mẫu - enhanced fan-out

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

Ánh xạ nguồn sự kiện Lambda

  • Lambda thăm dò Kinesis và gọi theo lô.
  • BatchSize và MaximumBatchingWindow điều chỉnh hình dạng lô.
  • ParallelizationFactor: số lần gọi đồng thời mỗi shard.
  • BisectBatchOnFunctionError: tách lô lỗi để cô lập bản ghi hỏng.
  • ReportBatchItemFailures: tránh retry các bản ghi đã thành công.
  • OnFailure: gửi lô không xử lý được tới SQS hoặc SNS DLQ.

 

lambda event sourcing

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

Data Firehose

  • Dịch vụ quản lý chuyển dữ liệu streaming đến đích.
  • Đích gồm Amazon S3, Redshift và HTTP endpoint.
  • Hỗ trợ đệm, chuyển đổi định dạng và biến đổi bằng Lambda.
  • Độ trễ cao hơn, đệm từ vài giây đến vài phút.
  • Không hỗ trợ replay hoặc giữ lâu dài.
  • Tuyệt vời để đưa dữ liệu đến đích một cách đơn giản.

 

data firehose

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

Mẫu: nóng-lạnh

 

mẫu - nóng/lạnh

 

  • Mẫu nóng-lạnh kết hợp Data Streams và Data Firehose.
  • Data Streams cho phép xử lý thời gian thực cho producer.
  • Firehose lưu trữ bản ghi từ cùng nguồn vào S3.
Phát triển ứng dụng trên AWS

Kinesis vs SQS

 

sqs vs kinesis

 

  • Dùng Kinesis cho stream có thứ tự, có thể replay, với nhiều consumer.
  • Kinesis phù hợp dữ liệu chuỗi thời gian và có thứ tự.
  • Dùng SQS để phân phối tác vụ.
Phát triển ứng dụng trên AWS

Mở rộng dữ liệu streaming

 

mở rộng

  • Data stream được chia thành các shard.
  • Khóa phân vùng định tuyến bản ghi tới shard cụ thể.
  • Cùng một khóa luôn vào cùng một shard, giữ nguyên thứ tự.
  • Phân phối khóa không đều dẫn đến shard nóng.
  • Giảm thiểu bằng khóa có độ phân biệt cao.
  • Reshard để mở rộng hoặc thu hẹp.
Phát triển ứng dụng trên AWS

Chế độ dung lượng: provisioned

  • Có hai chế độ dung lượng.
  • Chế độ Provisioned dùng số shard cố định, quản lý thủ công.
  • Cung cấp chi phí và dung lượng dự đoán được.
  • Cần giám sát để tránh throttling và cấp phát quá mức.

 

chế độ dung lượng

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

Chế độ dung lượng: on-demand

  • Chế độ On-demand tự động scale theo lưu lượng.
  • Không cần quản lý shard thủ công.
  • Đơn giản vận hành cho tải không dự đoán được.
  • Chi phí cao hơn khi tải nặng kéo dài.

 

chế độ dung lượng

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

Kinesis Producer Library (KPL)

  • Thư viện AWS giúp xây dựng producer/consumer có khả năng mở rộng.
  • Kinesis Producer Library (KPL) gom lô và tổng hợp bản ghi.
  • Cũng nén bản ghi và retry khi lỗi.
  • Đệm bất đồng bộ để tối đa hóa thông lượng ghi.

 

thư viện máy khách

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

Kinesis Consumer Library (KCL)

 

thư viện máy khách

 

  • Kinesis Consumer Library (KCL) xử lý điều phối shard.
  • Quản lý thuê worker và checkpoint.
  • Trạng thái lưu trong bảng DynamoDB.
  • Consumer dùng trạng thái đó để biết nơi tiếp tục.
Phát triển ứng dụng trên AWS

Xử lý lỗi: tính idempotent

 

xử lý lỗi

 

  • Kinesis giao hàng tối thiểu một lần, nên có thể trùng lặp.
  • Thiết kế consumer idempotent.
  • Khử trùng lặp bằng sequence number hoặc khóa nghiệp vụ trong DynamoDB.
  • Consumer có thể đọc lại bản ghi được giữ từ sequence number hoặc timestamp.
Phát triển ứng dụng trên AWS

Xử lý lỗi: lỗi thông lượng

 

xử lý lỗi

 

  • ProvisionedThroughputExceededException báo hiệu bị throttling.
  • Khắc phục bằng cách tăng số shard.
  • Cải thiện phân phối khóa phân vùng.
  • Retry với backoff.
  • Chuyển chế độ dung lượng.
Phát triển ứng dụng trên AWS
  • Theo dõi IncomingBytes và IncomingRecords trong CloudWatch.
  • Theo dõi WriteProvisionedThroughputExceeded để phát hiện throttling.
  • Độ trễ consumer xảy ra khi đọc chậm hơn ghi.
  • Theo dõi GetRecords.IteratorAgeMilliseconds: tuổi cao là có độ trễ.

 

ghi log và giám sát

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

Bảo mật

  • Mã hóa phía máy chủ khi lưu trữ bằng AWS KMS.
  • Mã hóa khi truyền bằng TLS.
  • Chính sách IAM kiểm soát truy cập.

 

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...