Trong kỷ nguyên kết nối vạn vật (IoT), thách thức lớn nhất không chỉ nằm ở việc thu thập dữ liệu từ các cảm biến vật lý (Hardware Sensors), mà là xây dựng một kiến trúc tầng backend và streaming đủ mạnh để xử lý hàng trăm nghìn thiết bị truyền dữ liệu thời gian thực mà không làm sập cơ sở dữ liệu. Bài viết này đúc kết những trải nghiệm kỹ thuật sâu sắc từ hai dự án tiêu biểu mà tôi (Đặng Ngọc Duy) trực tiếp thiết kế kiến trúc và triển khai: hệ thống giám sát hành trình VTMS và nền tảng IoT quy mô lớn Data Realities (sensors radar Data Realities & device-go).
1. Bài toán phần cứng: Xử lý nhị phân mmWave Radar 60GHz (FMCW)
Trong dự án Data Realities, hệ thống phải giao tiếp trực tiếp với cảm biến sóng milimet 60GHz mmWave Radar (FMCW) qua giao tiếp USB Serial (9600 baud, 8N1). Cảm biến có khả năng quét vùng không gian 8 mét chiều sâu và ±4 mét chiều ngang, đồng thời bám vết (track) lên đến 8 mục tiêu di động cùng lúc theo chu kỳ active polling 200ms.
Tại tầng client biên, chúng tôi sử dụng Device Go (fs04_device) và Web Serial API trên nền tảng web để tiếp nhận luồng byte nhị phân liên tục:
// Giao thức nhị phân mmWave Radar:
// Request: 446208001000000000000000BE4B
// Packet kết thúc bằng byte 0x4A
// Mỗi đối tượng chiếm 8 bytes: Object ID, Distance (0.1m), X coord, Y coord (signed)
Dữ liệu tọa độ này sau đó được chuyển đổi trực tiếp lên hệ tọa độ không gian 3 chiều qua Three.js 3D Visualizer trên giao diện người dùng, hiển thị đường di chuyển (movement history trails) và ranh giới vùng nhận diện (Zones A/B) theo thời gian thực.
2. Kiến trúc Real-Time Communication: Đẩy tải khỏi Node.js Backend
Khi số lượng kết nối đồng thời (CCU) tăng từ vài nghìn lên hơn 100,000 thiết bị (tương tự như bài toán GPS viễn thông trong hệ thống VTMS), việc duy trì các kết nối WebSocket hoặc SSE trực tiếp vào ứng dụng Node.js hay SvelteKit backend sẽ dẫn đến cạn kiệt RAM và nghẽn Event Loop.
Kiến trúc tối ưu được triển khai qua mô hình 3 lớp phân tách rõ rệt:
- Pushpin Edge Proxy: Đứng trước backend để giữ toàn bộ kết nối WebSocket và SSE mở từ phía client. Pushpin sử dụng các GRIP Headers (
Grip-Hold,Grip-Channel,Grip-Keep-Alive) giúp backend giải phóng hoàn toàn connection state. - Device Go Client: Các thiết bị biên kết nối qua HTTP/SSE gọn nhẹ (
/api/device/listen) hoặc MQTT, gửi telemetry payload được nén GZIP và ký xác thực bằng JWT (Stateless Token). - Batch Publishing MQTT (Tăng tốc 500x): Thay vì gửi từng thông điệp riêng lẻ tới 100k thiết bị gây nghẽn hàng đợi (mất 30 giây), chúng tôi gom cụm thành các batch 1,000 thiết bị/batch, giảm thời gian cập nhật toàn mạng lưới xuống chỉ còn 0.06 giây.
3. Data Pipeline: Kết hợp Redis Streams và ClickHouse
Một sai lầm phổ biến trong các hệ thống IoT là ghi trực tiếp log telemetry vào cơ sở dữ liệu quan hệ (PostgreSQL / MySQL), dẫn đến hiện tượng khóa bảng (table lock) và quá tải I/O. Trong kiến trúc Data Realities và VTMS, luồng dữ liệu được phân chia nghiêm ngặt:
- PostgreSQL (Prisma / ZenStack): Chỉ lưu trữ cấu hình thiết bị (Device, DeviceGroup), xác thực người dùng và phân quyền đa người thuê (Multi-Tenancy).
- Redis Streams & BullMQ: Đóng vai trò bộ đệm (Buffer Queue) chống sốc tải (Backpressure) và điều phối các worker xử lý bất đồng bộ.
- ClickHouse Columnar Database: Toàn bộ log cảm biến thô (
logs_raw) được nạp trực tiếp qua Vector Pods, sau đó các Materialized View tự động phân luồng sangmv_radar_session,mv_radar_pathvàmv_device_information. Nhờ đó, việc truy vấn lịch sử di chuyển và cảm biến trên hàng trăm triệu bản ghi chỉ mất chưa tới 50ms.
4. Bài học thực chiến cho Kỹ sư Kiến trúc Hệ thống
Thiết kế hệ thống IoT không đơn thuần là viết code chạy được trên lab, mà là nghệ thuật cân bằng giữa tính toàn vẹn phần cứng, độ trễ mạng và khả năng mở rộng hạ tầng. Những kinh nghiệm đúc kết từ VTMS và Data Realities đã chứng minh rằng việc phân tách nhiệm vụ rành mạch (Decoupling) và ứng dụng kiến trúc hướng sự kiện (Event-Driven) là chìa khóa vàng để làm chủ các hệ thống quy mô lớn.
Giao Diện Thực Tế: Radar Live Preview & Quản Trị Thiết Bị RDM
Dưới đây là hình ảnh thực tế từ nền tảng Data Realities do Đặng Ngọc Duy trực tiếp thiết kế và phát triển tầng điều khiển cảm biến (Sensors IoT) và quản trị thiết bị từ xa (Remote Device Management – RDM):
