Medium’s DynamoDB Data Source for Apache Spark

Bài tóm tắt Medium 2016 2. Tăng trưởng Độ khó: Dễ

Medium · 2016 · 2. Tăng trưởng · Độ khó: Dễ — bài gốc

Bài rất ngắn, công bố một thư viện mã nguồn mở. Đọc qua trình duyệt (Medium chặn crawler); ghi chú bằng lời của wiki.

Bối cảnh

  • Năm 2016, dữ liệu production của Medium nằm trên DynamoDB, còn xử lý dữ liệu phía sau dùng Spark. Data warehouse cần một đường đưa dữ liệu từ DynamoDB sang Spark nhanh và tin cậy. Theo tác giả, nhiều công ty có cặp này và đều tự viết công cụ nội bộ tương tự.
  • Một năm trước, Medium từng gặp hot partition trên DynamoDB (Medium 2015).

Thay đổi chính

  • Mở mã nguồn một data source của Spark cho DynamoDB: nạp bảng thành DataFrame hoặc RDD.
  • Scan song song theo khuyến nghị của Amazon: driver của Spark tạo các mô tả scan (mỗi cái một phần của bảng, kèm projection/filter) rồi chia cho worker scan song song. Vì bảng DynamoDB đã chia partition, chỉ scan song song mới dùng hết read capacity đã mua. Theo Medium, thời gian scan cải thiện khoảng 75%.
  • Giới hạn tốc độ (rate limit) cho lần scan, để job analytics không ăn hết capacity của bảng đang phục vụ người dùng.
  • Use case chính: backup bảng DynamoDB ra S3 dạng JSON bằng Spark; các job Spark khác nạp bản backup vào Redshift, Databricks. Medium chọn cách này thay vì AWS Data Pipeline để mọi job ETL và phân tích có cùng một kiểu viết.
  • DataFrame: DynamoDB không ép schema, nên schema được suy ra bằng cách lấy mẫu bản ghi, hoặc truyền vào (Medium sinh từ protobuf).

Vì sao

  • Theo Medium, giữ một công cụ chung (Spark) cho cả backup, ETL và phân tích giúp người dùng và developer đỡ phải học nhiều hệ.

Bài học cho SWE

  • Lấy dữ liệu ra khỏi kho online để phân tích cần hai núm vặn cùng lúc: song song để nhanh, giới hạn tốc độ để không làm hại production (Pipeline dữ liệu và analytics).
  • Snapshot định kỳ ra object storage (S3) rồi nạp vào nhiều đích là dạng pipeline batch đơn giản nhất: nguồn chỉ bị đọc một lần, các đích tách khỏi nhau.
  • Scan toàn bảng dù song song vẫn là đọc toàn bộ dữ liệu mỗi lần; khi bảng lớn lên, đây là lúc cân nhắc CDC hoặc stream (xem các mốc sau trong concept).

Liên quan