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