Batch Processing vs Stream Processing

Trong bài Kiến trúc dữ liệu lớn (Big Data Architecture) các bạn đã biết trong kiến trúc Big Data có 2 thành phần xử lý dữ liệu khác nhau: xử lý dữ liệu theo lô (Batch Processing) và xử lý dữ liệu theo luồng (Stream Processing).

Xử lý dữ liệu theo lô (Batch Processing): dữ liệu mới được sinh ra sẽ được gom nhóm thành các lô (batch) và sau đó sẽ được xử lý (process) sau đó. Hai cách phổ biến để xác định khi nào các batch này sẽ được xử lý là:

  • Dựa trên một khoảng thời gian nhất định. Ví dụ: cứ 60 phút xử lý một lần
  • Dựa trên một số điều kiện nhất định. Ví dụ: cứ thu thập đủ 50 files dữ liệu sẽ xử lý một lần, hay cứ thu thập đủ 100G dữ liệu sẽ xử lý một lần, …

Trong mô hình xử lý dữ liệu theo lô, dữ liệu sẽ được thu thập từ các nguồn dữ liệu (Data Sources) và lưu trữ vào vùng lưu trữ dữ liệu (Data Storage), sau đó dữ liệu được xử lý bởi nhiều luồng xử lý dữ liệu song song nhau trước khi kết quả được lưu trữ xuống vùng dữ liệu phân tích (Analytical Data Store)

Xử lý dữ liệu theo luồng (Stream Processing): dữ liệu sẽ được xử lý ngay khi nó đến. Không giống như mô hình xử lý dữ liệu theo lô, dữ liệu trong mô hình xử lý theo luồng sẽ không phải chờ cho đến khi đủ batch mới được xử lý, nó sẽ được xử lý ngay khi dữ liệu được phát sinh. Tuy nhiên, rất nhiều hệ thống hiện nay hỗ trợ khái niệm cửa sổ (window) trong stream processing. Window là khoảng thời gian trước và sau thời điểm hiện tại khi dữ liệu xuất hiện

Trong mô hình xử lý dữ liệu theo luồng, dữ liệu được xử lý ngay lập tức hoặc trong khoảng thời gian rất ngắn (hỏi: thế nào là “rất ngắn”, trả lời theo kinh nghiệm: rất ngắn là tính bằng mili giây hoặc vài giây). Dữ liệu từ nguồn sau khi đi qua real-time message ingestion sẽ được xử lý sau đó lưu trữ xuống vùng dữ liệu phân tích để phục vụ việc trực quan hóa dữ liệu, báo cáo dữ liệu hoặc phân tích dữ liệu sau này

Khi nào nên dùng Bach Processing vs Stream Processing?

Xử lý dữ liệu theo lô (Batch Processing) được sử dụng khi cần xử lý khối lượng dữ liệu rất lớn, trong đó việc lọc, tính toán, xử lý dữ liệu mất thời gian đáng kể và thời gian phản hồi dữ liệu không yêu cầu ngay lập tức. (Hỏi: thế nào là “dữ liệu rất lớn”, thế nào là “mất thời gian đáng kể”?. Trả lời theo kinh nghiệm: “dữ liệu rất lớn” = vài trăm GB hoặc vài TB; “mất thời gian đáng kể” >= 20 phút). Ví dụ về Batch Processing: dữ liệu về truy cập internet của người dùng được hệ thống đẩy ra các file logs bởi các ứng dụng. Các file này hàng ngày được thu thập về 1 hệ thống lưu trữ dữ liệu và được xử lý qua đêm, để có kết quả tổng hợp phục vụ cho việc phân tích, báo cáo hành vi sử dụng web của người dùng vào sáng hôm sau.

Xử lý dữ liệu theo luồng (Stream Processing) được sử dụng khi cần có tương tác hoặc phản hồi ngay lập tức với sự kiện dữ liệu được sinh ra.

Leave a Reply

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