
Kết quả
Phạm vi sản phẩm
NewFeed là một sản phẩm mạng xã hội hoàn chỉnh chứ không chỉ là bản demo bảng tin. Người dùng có thể tạo tài khoản, đăng bài và media, bình luận realtime và nhận thông báo trực tiếp. Frontend Next.js App Router giữ luồng xác thực ở phía server khi cần, còn Apollo Client, GraphQL subscriptions và Socket.IO xử lý các phần tương tác realtime.
Ranh giới giữa các service
Backend gồm API gateway và năm service phụ trách auth, bài viết, bình luận, media và thông báo. Gateway là điểm vào công khai duy nhất: kiểm tra JWT cookie, áp dụng rate limit và circuit breaker, rồi chuyển request tới đúng service. Dữ liệu PostgreSQL được giữ trong ranh giới từng service, còn file media lưu trên Cloudinary.
- Auth dùng REST và lưu access token trong cookie httpOnly.
- Bài viết và bình luận dùng GraphQL có type, hỗ trợ cursor pagination.
- Bình luận truyền qua GraphQL subscriptions; thông báo đẩy bằng Socket.IO.
- Redis phục vụ cache, rate limit và Pub/Sub giữa nhiều replica.
Luồng xử lý hướng sự kiện
RabbitMQ tách thao tác người dùng khỏi phần xử lý tiếp theo. Service bài viết và bình luận phát domain event rồi trả kết quả mà không phải chờ gửi thông báo. Consumer chuyển các event đó tới người dùng đang online và xóa nối tiếp bình luận khi bài viết bị xóa, nên notification worker chậm cũng không chặn việc đăng bài.
Danh tính và ranh giới tin cậy
Trình duyệt không tự gửi một user id được coi là đáng tin. Danh tính lấy từ access token đã ký trong cookie httpOnly, còn request nội bộ dùng một service token riêng. Chỉ Traefik mở cổng 80 và 443; từng service nằm bên trong cluster để việc gọi vòng qua gateway không trở thành một đường xác thực khác.
Triển khai GitOps
Hệ thống chạy trên cluster K3s một node. GitHub Actions build song song image của từng service, gắn tag bằng commit SHA rồi cập nhật repository cấu hình riêng. ArgoCD phát hiện manifest thay đổi và đồng bộ cluster, vì vậy CI không cần giữ quyền truy cập trực tiếp vào cluster. Prometheus và Grafana theo dõi hạ tầng ở mức node và cluster.
Giới hạn và hướng phát triển
Kiến trúc microservices chủ động phức tạp hơn mức traffic hiện tại cần đến; mục tiêu của dự án là thực hành failure isolation, khả năng scale realtime và vận hành GitOps. Hệ thống vẫn chạy trên một VPS, chưa xuất application metrics và việc xoay secret còn cần một bước deploy thủ công. Đây là những khoảng trống vận hành cần giải quyết tiếp trước khi coi hệ thống là hạ tầng production nhiều node.