Mở đầu
Trong kỷ nguyên số, dữ liệu không chỉ được sinh ra liên tục mà còn phải được xử lý và hiển thị gần như tức thì để hỗ trợ ra quyết định nhanh chóng. Tuy nhiên, xây dựng một hệ thống lưu trữ và phân tích thời gian thực từ đầu thường đòi hỏi nhiều thành phần phức tạp: message broker, stream processor, time-series database, và công cụ trực quan hóa. Điều này có thể khiến các dự án nhỏ hoặc startup gặp khó khăn về chi phí và độ phức tạp.
May mắn thay, với sự phát triển của các nền tảng Backend-as-a-Service hiện đại, chúng ta có thể rút gọn toàn bộ quy trình này xuống chỉ còn hai thành phần chính: Supabase và Grafana. Supabase cung cấp cơ sở dữ liệu PostgreSQL mạnh mẽ với khả năng lưu trữ và truy vấn thời gian thực, trong khi Grafana biến dữ liệu đó thành các dashboard trực quan, có thể tùy biến cao. Bài viết này sẽ hướng dẫn chi tiết cách kết hợp hai công cụ này để xây dựng một hệ thống thời gian thực hoàn chỉnh.
Vì sao chọn Supabase và Grafana?
Supabase không chỉ là một dịch vụ PostgreSQL được host sẵn, nó còn tích hợp sẵn WebSocket và Row Level Security (RLS), cho phép bạn đẩy dữ liệu vào cơ sở dữ liệu và lập tức nhận được notification thời gian thực khi có thay đổi. Điều này rất phù hợp với các trường hợp như dashboard IoT, theo dõi hoạt động người dùng, hoặc hệ thống giám sát.
Grafana, mặt khác, là một công cụ trực quan hóa dữ liệu cực kỳ phổ biến, hỗ trợ nhiều loại datasource khác nhau, trong đó có PostgreSQL. Với Grafana, bạn có thể tạo ra các biểu đồ, gauge, heatmap, và nhiều dạng trực quan khác, cập nhật liên tục khi dữ liệu thay đổi.
Kết hợp cả hai, bạn có một giải pháp hoàn chỉnh: Supabase làm “engine” lưu trữ và phát dữ liệu thời gian thực, Grafana làm “mặt tiền” hiển thị và cảnh báo.
Kiến trúc hệ thống
Về mặt kiến trúc, hệ thống sẽ vận hành như sau:
1. Nguồn dữ liệu (có thể là IoT device, web app, mobile app) gửi dữ liệu lên Supabase thông qua REST API hoặc WebSocket.
2. Supabase lưu trữ dữ liệu vào PostgreSQL, đồng thời kích hoạt realtime subscription nếu có client lắng nghe.
3. Grafana kết nối đến Supabase qua datasource PostgreSQL, thực hiện truy vấn và tự động refresh dashboard theo interval hoặc khi có dữ liệu mới.
Vì Grafana không hỗ trợ WebSocket trực tiếp, chúng ta sẽ dựa vào tính năng auto-refresh của panel hoặc sử dụng PostgreSQL LISTEN/NOTIFY để trigger reload.
Thiết lập Supabase
Đầu tiên, tạo một project mới trên Supabase Dashboard. Sau khi project được khởi tạo, bạn sẽ có một database URL và một API key.
Tiếp theo, tạo một table để lưu trữ dữ liệu thời gian thực. Ví dụ, với ứng dụng đo nhiệt độ:
CREATE TABLE IF NOT EXISTS readings (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
sensor_id TEXT NOT NULL,
temperature DOUBLE PRECISION NOT NULL,
humidity DOUBLE PRECISION,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);Bật Row Level Security và tạo policy cho phép ứng dụng của bạn insert dữ liệu:
ALTER TABLE readings ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can insert own readings." ON readings
FOR INSERT WITH CHECK (auth.uid() = 'your-user-id');