Marine Fire Detection & Automatic Firefighting · TVT Group, 2021–2024

Hệ thống giám sát trên bờ cho nền tảng cảnh báo cháy đội tàu

Vận hành viên trên bờ giám sát cùng lúc hàng trăm tàu cá. Khi cảm biến phát hiện dấu hiệu nguy cơ cháy, tín hiệu cảnh báo sẽ đi qua một luồng ưu tiên riêng, trong khi luồng video live giúp con người trực tiếp xác minh tình huống trước khi quyết định xử lý.

HLS · RabbitMQ · Node.js · PostgreSQL

Kết quả: Độ trễ video HLS live đạt ~3s trong cùng khu vực và ~5s liên khu vực để vận hành viên xác minh; luồng sự kiện an toàn (safety events) được tách biệt hoàn toàn khỏi lưu lượng telemetry định kỳ.

Bài toán thực tế

Vận hành viên trên bờ cần xác minh nhanh nguy cơ cháy nổ trên hàng trăm tàu cá đang hoạt động ngoài khơi, trong bối cảnh mỗi tàu vừa truyền video trực tiếp vừa gửi dữ liệu cảm biến (telemetry) qua đường truyền mạng biển chập chờn.

Quy mô hàng trăm tàu hoạt động đồng thời; mỗi tàu duy trì một luồng video và một luồng dữ liệu cảm biến.
Các sự kiện an toàn (safety events) không được phép xếp hàng chờ sau các đợt dồn ứ dữ liệu cảm biến thông thường hoặc các tác vụ xuất báo cáo.
Video trực tiếp phục vụ bước xác minh của con người; không được đi chung luồng xử lý với tín hiệu báo cháy.
Nhiều tổ chức cùng sử dụng chung nền tảng; mỗi đơn vị chỉ được phép theo dõi đội tàu thuộc quyền quản lý của mình.

Kiến trúc hệ thống

flowchart LR
  subgraph edge ["Vessel edge"]
    edge_0(["Onboard sensors and encoders"])
    edge_1["Video encode for HLS"]
  end
  subgraph shore ["Shore ingest"]
    shore_0["Thin telemetry ingest"]
    shore_1["HLS origin for operators"]
    shore_2[["Safety event queue"]]
    shore_3[["Routine telemetry queue"]]
  end
  subgraph consume ["Operator view"]
    consume_0[("Alarm and event store")]
    consume_1["Pre-aggregated dashboard reads"]
    consume_2["HLS player for verification"]
  end
  edge_0 --> shore_0
  edge_0 --> edge_1
  shore_0 -->|"priority events"| shore_2
  shore_0 --> shore_3
  shore_2 --> consume_0
  shore_3 --> consume_1
  edge_1 --> shore_1
  shore_1 --> consume_2

Các quyết định kiến trúc then chốt

Tách hàng đợi (queue) riêng cho sự kiện an toàn

Các bản tin thuộc nhóm an toàn (safety-class) đi qua luồng RabbitMQ riêng với cụm worker xử lý độc lập.

Sau mỗi khoảng mất kết nối ngoài biển, dữ liệu cảm biến thông thường sẽ dồn về dồn dập; tín hiệu báo cháy vẫn phải được đẩy lên màn hình chỉ trong vài giây.

Phương án đã loại bỏ: Dùng chung một hàng đợi có gắn cờ ưu tiên (priority queue) — loại bỏ vì một bản tin xử lý chậm vẫn có thể làm nghẽn các bản tin khẩn cấp nằm phía sau.

Đánh đổi: Phải duy trì, giám sát và mở rộng (scale) hai luồng xử lý độc lập.

Dùng HLS cho nhu cầu xác minh hình ảnh, tách khỏi SLA của tín hiệu báo động

Vận hành viên quan sát hình ảnh qua luồng HLS, trong khi tín hiệu báo cháy đi theo luồng sự kiện telemetry tốc độ cao.

Độ trễ của giao thức HLS bị giới hạn tự nhiên bởi độ dài phân đoạn (segment duration) và bộ đệm danh sách phát (playlist buffer), không phù hợp để làm chuẩn thời gian thực cho tín hiệu báo động.

Phương án đã loại bỏ: Dùng độ trễ của luồng video làm chỉ số SLA cho cảnh báo vận hành.

Đánh đổi: Vận hành viên chấp nhận độ trễ vài giây khi mở xem video trực tiếp, trong khi tín hiệu cảnh báo đã tới trước qua luồng nhanh.

Dashboard đọc từ bảng tổng hợp (aggregate), không truy vấn thẳng vào bảng ingest

Các truy vấn thống kê và hiển thị dashboard đọc từ dữ liệu đã tổng hợp sẵn (rollup), tách biệt khỏi tiến trình đang ghi dữ liệu trực tiếp.

Các truy vấn quét dữ liệu trên màn hình theo dõi vào giờ cao điểm không được phép giành tài nguyên làm chậm luồng ghi dữ liệu từ tàu gửi về.

Phương án đã loại bỏ: Chạy truy vấn thống kê trực tiếp trên bảng dữ liệu thô (raw ingest table) ngay trong luồng xử lý API.

Đánh đổi: Cần duy trì tiến trình cập nhật bảng read model khi dữ liệu mới tới; biểu đồ thống kê có độ trễ vài giây nhưng hệ thống luôn ổn định.

Phần tôi chịu trách nhiệm, trực tiếp viết và phân công

Chịu trách nhiệm (Own)

  • Kiến trúc backend Node.js phía bờ (shore-side) phục vụ thu thập dữ liệu (ingest) và cung cấp API cho trung tâm điều hành
  • Thiết kế cơ chế tách bạch luồng sự kiện khẩn cấp (safety events) khỏi luồng dữ liệu cảm biến định kỳ

Trực tiếp viết (Write)

  • Pipeline tiếp nhận đồng thời (concurrent ingest) và xử lý sự kiện cho toàn bộ dữ liệu cảm biến của đội tàu
  • Tích hợp luồng phát video trực tiếp chuẩn HLS phục vụ vận hành viên xác minh hình ảnh

Phân công (Delegate)

  • Phần mềm nhúng (firmware) và cơ cấu kích hoạt chữa cháy tự động trên tàu nằm ngoài phạm vi backend trên bờ

Quy mô vận hành

  • Phục vụ hàng trăm tàu cá, mỗi tàu truyền đồng thời một luồng video và một luồng dữ liệu cảm biến
  • Độ trễ video HLS live đạt ~3s trong vùng và ~5s liên vùng (đây là độ trễ luồng xem hình ảnh của vận hành viên, độc lập với độ trễ của tín hiệu cảnh báo)
  • Nhóm sự kiện an toàn bao gồm: nhiệt độ bất thường, khói, tia lửa điện và ngọn lửa hở

Ranh giới phạm vi

  • Tên thương mại của sản phẩm có cụm chữa cháy tự động (automatic firefighting), nhưng phạm vi phụ trách của tôi trong dự án này là hệ thống backend giám sát và xử lý sự kiện trên bờ.
  • Mạch kích hoạt chữa cháy tự động vận hành độc lập ngay trên tàu, nằm ngoài hệ thống backend trên bờ.

Các chỉ số giám sát khi vận hành

Thời gian từ lúc tiếp nhận (ingest) sự kiện an toàn đến khi lưu xong vào cơ sở dữ liệu cảnh báoĐộ sâu hàng đợi (queue depth) của luồng khẩn cấp so với luồng định kỳTỷ lệ lỗi phân đoạn HLS và tỷ lệ đứng hình (player stall) theo từng khu vực địa lý

Nguyên tắc bất di bất dịch trong thiết kế

  • Sự cố tắc nghẽn ở luồng xử lý dữ liệu định kỳ không bao giờ được làm chậm sự kiện an toàn.
  • Mỗi tổ chức chỉ xem được dữ liệu đội tàu của mình; tuyệt đối không lộ dữ liệu sang đơn vị khác.
  • Độ trễ video liên vùng được định nghĩa rõ là đặc tính của mạng và bộ đệm HLS, không đánh đồng với thời gian phản hồi của tín hiệu cảnh báo.

Phạm vi ứng dụng rộng hơn

  • Đội tàu hoặc phương tiện hoạt động xa bờ sử dụng kết nối di động hoặc vệ tinh chập chờn.
  • Trung tâm điều hành cần xác minh hình ảnh trực tiếp trước khi phát lệnh ứng cứu.
  • Nền tảng IoT cần tách bạch tuyệt đối luồng cảnh báo an toàn khỏi lưu lượng thu thập dữ liệu thông thường.