CodeReady
Quay lại danh sách case study

Xây dựng hệ thống Real-time Notification quy mô lớn với WebSocket

Thiết kế kiến trúc hệ thống thông báo thời gian thực phục vụ hàng triệu kết nối đồng thời sử dụng Socket.io và Redis Adapter.

Bối cảnh

Ứng dụng mạng xã hội cần gửi thông báo tức thời cho người dùng khi có tương tác mới, yêu cầu duy trì kết nối WebSocket bền vững trên nhiều instance server.

Vấn đề cần xử lý

Khi scale hệ thống Node.js lên nhiều instance chạy sau Load Balancer, các client kết nối ở các server khác nhau không nhận được sự kiện do thiếu cơ chế đồng bộ kênh truyền.

Hướng xử lý đề xuất

Sử dụng Socket.io kết hợp với Redis Pub/Sub Adapter để phát tán thông điệp giữa các Node.js instance khác nhau trong cụm cluster.

Câu trả lời mẫu khi phỏng vấn

Để giải quyết bài toán real-time notification trên nhiều server, việc kết nối trực tiếp WebSocket là chưa đủ vì các server bị cô lập. Tôi đã thiết kế giải pháp sử dụng Redis Pub/Sub làm lớp trung gian (Adapter). Khi một sự kiện cần gửi tới user, server nhận request sẽ publish lên Redis channel, các server khác đang giữ kết nối WebSocket với user đó sẽ nhận được thông điệp và đẩy về client. Kiến trúc này giúp scale ngang dễ dàng.

Trade-off

Phải quản lý thêm một tầng Redis Pub/Sub cluster, đòi hỏi cấu hình mạng ổn định và chi phí hạ tầng cao hơn so với việc chạy một instance đơn lẻ.

Kết quả kỳ vọng

Hệ thống vận hành ổn định với hơn 500.000 kết nối WebSocket đồng thời, độ trễ thông báo dưới 100ms trên toàn cầu.

Bài học khi trả lời phỏng vấn

Khi thiết kế hệ thống real-time phân tán, việc lựa chọn message broker đóng vai trò quyết định đến khả năng mở rộng ngang của hạ tầng.