Giới thiệu dự án

Theo thống kê từ Grand View Research, ngành công nghiệp thú cưng toàn cầu đạt quy mô hơn 261 tỷ USD vào năm 2022 và duy trì tỷ lệ tăng trưởng kép hàng năm (CAGR) 6.1%. Tại Việt Nam, xu hướng nuôi dưỡng động vật cưng trong các gia đình trẻ và đô thị đang gia tăng nhanh chóng, kéo theo nhu cầu chia sẻ hình ảnh, kinh nghiệm cứu trợ và chăm sóc y tế động vật. Tuy nhiên, trên các mạng xã hội phổ quát như Facebook hay Instagram, nội dung chuyên biệt về thú cưng thường bị pha loãng bởi thuật toán quảng cáo, tin tức đại trà và nội dung thương mại, gây phân tán tương tác và giảm tính gắn kết cộng đồng.

Vấn đề cốt lõi (Problem Statement) nằm ở chỗ: người nuôi thú cưng thiếu một nền tảng chuyên biệt (niche social network) tích hợp đầy đủ công cụ tương tác thời gian thực, quản lý hội nhóm, trang cộng đồng chuyên môn hóa cao mà vẫn đảm bảo tính riêng tư, tốc độ truy xuất nhanh và môi trường nội dung "sạch".

Đồ án khóa luận tốt nghiệp ngành Kỹ thuật Phần mềm tại Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM của nhóm tác giả Trần Diệu Bảo Trân và Đoàn Thế Duy, dưới sự hướng dẫn của ThS. Nguyễn Thị Thanh Trúc và TS. Nguyễn Hà Giang, đã giải quyết bài toán này thông qua việc nghiên cứu và phát triển Mạng xã hội Petpedia (Social Networking for Animal Lovers).

Mục tiêu cụ thể của dự án gồm:

  1. Xây dựng nền tảng mạng xã hội hoàn chỉnh trên nền tảng JavaScript đồng nhất, xử lý tương tác thời gian thực với độ trễ thấp (< 100ms).
  2. Thiết kế hệ thống cơ sở dữ liệu linh hoạt, hỗ trợ mở rộng tài liệu phi cấu trúc, đáp ứng khả năng mở rộng ngang (horizontal scaling).
  3. Đảm bảo an toàn thông tin người dùng thông qua mã hóa dữ liệu nhạy cảm và xác thực bảo mật dựa trên chuẩn công nghiệp.
  4. Triển khai giao diện đáp ứng (Responsive Web Design) tương thích đa thiết bị, tối ưu trải nghiệm người dùng (UX/UI).

Giải pháp kỹ thuật được lựa chọn là kiến trúc phân lớp hướng sự kiện (Event-driven Architecture) kết hợp hệ sinh thái Node.js và cơ sở dữ liệu phi quan hệ MongoDB. Phạm vi dự án tập trung vào nền tảng Web Application chạy trên các trình duyệt hiện đại (Chrome, Firefox, Safari, Edge), hỗ trợ ngôn ngữ tiếng Anh và tiếng Việt trong giai đoạn thử nghiệm đầu tiên.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thị trường cho thấy các giải pháp mạng xã hội hiện nay có sự phân hóa rõ rệt:

Tiêu chí Facebook (General Social Network) DruzhOK (Nga - Pet Network) Petpedia (Giải pháp đề xuất)
Độ tập trung nội dung Thấp (pha loãng bởi đa dạng chủ đề và quảng cáo) Cao (chuyên về thú cưng tại Đông Âu) Rất cao (chuyên biệt cho cộng đồng yêu động vật Việt Nam & quốc tế)
Giao tiếp Realtime Phức tạp, phụ thuộc hệ thống microservices đóng Polling truyền thống, độ trễ nhận tin cao Socket.IO WebSockets hai chiều, thời gian thực tức thì
Tính linh hoạt dữ liệu Phức tạp, dữ liệu đa nguồn đồ sộ RDBMS truyền thống, khó mở rộng trường động NoSQL MongoDB linh hoạt, định dạng BSON tối ưu ghi
Chi phí hạ tầng Rất lớn, chỉ phù hợp quy mô toàn cầu Trung bình Tối ưu hóa trên kiến trúc Single-thread Non-blocking I/O

Bảng phân loại yêu cầu người dùng theo mô hình MoSCoW:

  • Must-have (Bắt buộc): Đăng ký/đăng nhập (JWT Auth), Đăng bài (CRUD Post kèm hình ảnh/video), Tương tác (Like, Comment, Reply, Share), Quản lý kết bạn, Chat thời gian thực (1-1 Chat), Quản trị Page/Group.
  • Should-have (Nên có): Thuật toán gợi ý bạn bè và hội nhóm dựa trên từ khóa tìm kiếm và hành vi tương tác, thông báo Realtime (Notification Push).
  • Could-have (Có thể có): Quản lý hồ sơ sức khỏe và sổ tiêm chủng của thú cưng, tích hợp bản đồ tìm kiếm trạm cứu hộ động vật.
  • Won't-have (Chưa triển khai kỳ này): Hệ thống thanh toán E-commerce mua bán thú cưng trực tiếp trên web, Video call trực tuyến.

Thiết kế hệ thống

Kiến trúc Petpedia xây dựng theo mô hình Client-Server tối ưu hóa xử lý bất đồng bộ:

[ Client Browser (HTML5, CSS3, EJS, AJAX Engine) ]
[ MongoDB Atlas (Cloud NoSQL Database Cluster) ]

Tech Stack và phiên bản sử dụng:

  • Runtime Environment: Node.js (v14.17.0 LTS) – Tận dụng Single-thread Event Loop và Non-blocking I/O xử lý hàng ngàn kết nối I/O-bound đồng thời mà không chiếm dụng nhiều tài nguyên bộ nhớ.
  • Web Framework: Express.js (v4.17.1) – Quản lý RESTful Routing và Render Middleware.
  • Template Engine: EJS (Embedded JavaScript Templates v3.1.6) – Kết xuất server-side rendering (SSR) nhanh chóng, tích hợp mượt mà với Express.
  • Database Engine: MongoDB (v4.4 Enterprise Server / MongoDB Atlas Cluster) – Lưu trữ dữ liệu dạng Document BSON, Replica Set đảm bảo tính sẵn sàng cao.
  • Object Data Modeling (ODM): Mongoose (v5.12.x) – Quản lý Schema, Validation và Quan hệ dữ liệu dạng tham chiếu (Reference) / nhúng (Embedded).
  • Realtime Transport: Socket.IO (v4.0.1) – Giao thức WebSocket 2 chiều với fallback polling.
  • Security & Utilities: bcrypt (v5.0.1), jsonwebtoken (v8.5.1), body-parser, multer.

Thiết kế Database Schema (Mongoose):

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// Post Schema chứa bài viết, mảng tương tác và liên kết bình luận
const PostSchema = new Schema({
    author: { type: Schema.Types.ObjectId, ref: 'User', required: true, index: true },
    content: { type: String, required: true, trim: true },
    mediaUrls: [{ type: String }],
    groupId: { type: Schema.Types.ObjectId, ref: 'Group', default: null },
    pageId: { type: Schema.Types.ObjectId, ref: 'Page', default: null },
    likes: [{ type: Schema.Types.ObjectId, ref: 'User' }],
    comments: [{
        user: { type: Schema.Types.ObjectId, ref: 'User' },
        content: { type: String, required: true },
        createdAt: { type: Date, default: Date.now },
        replies: [{
            user: { type: Schema.Types.ObjectId, ref: 'User' },
            content: { type: String, required: true },
            createdAt: { type: Date, default: Date.now }
        }]
    }],
    shares: [{ type: Schema.Types.ObjectId, ref: 'User' }]
}, { timestamps: true });

module.exports = mongoose.model('Post', PostSchema);

Đặc tả API Endpoints chính:

  • POST /api/v1/auth/register: Đăng ký tài khoản mới (Validate payload, Hash mật khẩu).
  • POST /api/v1/auth/login: Xác thực tài khoản, ký và trả về JSON Web Token.
  • GET /api/v1/posts/newsfeed: Truy xuất danh sách bài viết trang chủ có phân trang (Pagination Skip/Limit).
  • POST /api/v1/posts/create: Tạo bài viết mới kèm upload đa phương tiện.
  • POST /api/v1/interactions/like: Cập nhật trạng thái Like/Unlike bài viết tức thì qua AJAX.
  • GET /api/v1/users/search?keyword=: Tìm kiếm người dùng, nhóm và trang dựa trên Regular Expression Index.

Methodology

Dự án áp dụng mô hình phát triển phần mềm linh hoạt (Agile Scrum) rút gọn, kéo dài trong 16 tuần (15/03/2021 – 30/06/2021) chia thành 3 giai đoạn (Sprints):

  • Sprint 1 (Tuần 1 - Tuần 6): Thu thập yêu cầu, nghiên cứu công nghệ lõi (Node.js, Express, MongoDB, EJS, JWT), thiết kế Use Case, Activity Diagram và Wireframe UI/UX.
  • Sprint 2 (Tuần 7 - Tuần 11): Xây dựng kiến trúc dữ liệu trên MongoDB Atlas, hiện thực hóa các chức năng cốt lõi (CRUD Post, Quản lý Profile, Hệ thống Kết bạn, Realtime Chat với Socket.IO).
  • Sprint 3 (Tuần 12 - Tuần 16): Xây dựng tính năng nâng cao (Like, Comment đa cấp, Hội nhóm, Fanpage, Recommendation Engine), tối ưu hóa Responsive, tích hợp bảo mật, kiểm thử hệ thống và đóng gói triển khai.

Quản trị rủi ro (Risk Mitigation):

  • Rủi ro mất dữ liệu bộ nhớ đệm MongoDB: Cấu hình Write Concern: majority và bật tính năng Journaling trên MongoDB Atlas.
  • Rủi ro nghẽn luồng xử lý (Blocking Event Loop): Tách các tác vụ I/O nặng (upload media, hash password) sang luồng xử lý bất đồng bộ (Asynchronous Promises/Worker threads).

Implementation và kết quả

Development process

Quá trình phát triển tập trung vào việc hiện thực hóa các thuật toán xử lý dữ liệu và luồng truyền tải thời gian thực.

1. Hệ thống xác thực bảo mật với JWT và Bcrypt:

const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');

// Middleware xác thực quyền truy cập thông qua Access Token
const verifyToken = (req, res, next) => {
    const authHeader = req.headers['authorization'] || req.cookies['accessToken'];
    if (!authHeader) return res.status(401).json({ message: 'Access Denied: No Token Provided' });

    const token = authHeader.startsWith('Bearer ') ? authHeader.slice(7) : authHeader;
    jwt.verify(token, process.env.JWT_SECRET_KEY, (err, decodedUser) => {
        if (err) return res.status(403).json({ message: 'Invalid or Expired Token' });
        req.user = decodedUser;
        next();
    });
};

// Mã hóa mật khẩu khi khởi tạo người dùng
async function registerUser(userData) {
    const saltRounds = 10;
    userData.password = await bcrypt.hash(userData.password, saltRounds);
    return await User.create(userData);
}

2. Xử lý truyền thông Realtime đa luồng bằng Socket.IO:

// Xử lý kết nối WebSocket hai chiều cho Chat và Push Notification
io.on('connection', (socket) => {
    socket.on('join_room', (roomId) => {
        socket.join(roomId);
    });

    socket.on('send_direct_message', async (data) => {
        const { senderId, receiverId, message, roomId } = data;
        // Lưu tin nhắn vào MongoDB bất đồng bộ
        const savedMessage = await MessageService.saveMessage({ senderId, receiverId, message });
        
        // Phát tín hiệu tức thời đến các Client trong phòng chat
        io.to(roomId).emit('receive_direct_message', savedMessage);
        
        // Gửi thông báo tức thì đến người nhận nếu không ở trong room
        io.to(receiverId).emit('notification_push', {
            type: 'NEW_MESSAGE',
            from: senderId,
            snippet: message.substring(0, 30)
        });
    });

    socket.on('disconnect', () => {
        socket.leaveAll();
    });
});

Testing và validation

Hệ thống được kiểm thử toàn diện qua các phương pháp: Unit Testing cho các API logic, Integration Testing cho luồng dữ liệu Client-Server-Database, và Performance Testing qua công cụ Apache JMeter và Postman.

Kết quả kiểm chuẩn hiệu năng (Performance Benchmarks):

Kịch bản kiểm thử Tải kiểm thử (Concurrency) Thời gian phản hồi trung bình (ms) Tỷ lệ lỗi (Error Rate) Thông lượng (Throughput)
API Xác thực Đăng nhập 500 VUs / phút 68 ms 0.00% 120 req/s
Tải Newsfeed (Phân trang 10 bài) 1000 VUs / phút 115 ms 0.02% 210 req/s
Đăng bài kèm ảnh qua Multer 300 VUs / phút 280 ms 0.05% 75 req/s
Chat Realtime qua WebSockets 2000 kết nối đồng thời 35 ms (Latency) 0.00% 3500 msg/s

Kết quả đạt được

Đồ án đã hoàn thành 100% các mục tiêu nghiên cứu và phát triển đặt ra trong đề cương:

  • Xây dựng thành công hệ sinh thái mạng xã hội Petpedia với 18 Use Case chức năng hoàn chỉnh từ quản lý tài khoản, tường nhà cá nhân, tương tác đa phương tiện đến quản trị cộng đồng fanpage/group.
  • Tích hợp kỹ thuật AJAX triệt để ở phía Client, giảm 85% lưu lượng truyền tải trang so với kỹ thuật truyền thống, loại bỏ hiện tượng giật/trắng trang (flickering) khi tương tác like, comment hoặc chuyển tab nội dung.
  • Hệ thống chat và thông báo thời gian thực đạt độ trễ cực thấp (< 50ms trong mạng nội bộ và < 150ms qua môi trường Internet).
  • Hội đồng đánh giá khóa luận tốt nghiệp tại Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM chấm điểm 8.0/10 cho cả hai sinh viên thực hiện, công nhận khả năng ứng dụng thực tiễn cao của sản phẩm.

Đổi mới và đóng góp

  1. Kiến trúc dữ liệu tối ưu hóa cho mạng xã hội chuyên biệt: Thay vì sử dụng mô hình quan hệ bảng truyền thống (RDBMS) đòi hỏi các lệnh JOIN phức tạp làm giảm hiệu năng khi mở rộng mạng lưới bạn bè và tương tác đa tầng, Petpedia sử dụng MongoDB Document Model lồng ghép mảng con (embedded sub-documents) cho Like và Comment, giúp tăng tốc độ đọc dữ liệu Newsfeed lên hơn 40% so với kiến trúc SQL thông thường.
  2. Giải pháp giao tiếp thời gian thực chi phí thấp: Tận dụng tối đa kiến trúc Event Loop của Node.js kết hợp Socket.IO, hệ thống duy trì hàng nghìn kết nối đồng thời (concurrent connections) chỉ với một tiến trình đơn (Single-thread), tối ưu hóa RAM gấp 3-4 lần so với các máy chủ hướng đa luồng như Apache/PHP.
  3. Môi trường số lành mạnh cho người yêu động vật: Đóng góp giải pháp cộng đồng chuyên biệt đầu tiên tại Việt Nam giải quyết triệt để vấn đề "rác thông tin", tạo không gian học thuật, kinh nghiệm sơ cứu và kết nối mạng lưới cứu trợ động vật bị bỏ rơi.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Cộng đồng cứu trợ động vật: Các tổ chức và tình nguyện viên lập Nhóm (Group) để phối hợp cứu hộ khẩn cấp, chia sẻ định vị thú lạc hoặc tìm chủ nhận nuôi (Pet Adoption) với tốc độ lan tỏa nhanh chóng.
  • Hệ sinh thái dịch vụ thú cưng: Các phòng khám thú y, spa và cửa hàng phụ kiện tạo Fanpage để chia sẻ kiến thức chuyên ngành, tương tác trực tiếp với khách hàng mục tiêu mà không phải trả chi phí quảng cáo đắt đỏ.

Yêu cầu triển khai hệ thống (System Requirements)

  • Hạ tầng máy chủ (Server-side):
    • OS: Linux (Ubuntu 20.04 LTS / Debian 10) hoặc Windows Server 2019.
    • CPU: 2 Core (khuyến nghị 4 Core trở lên).
    • RAM: Tối thiểu 4GB RAM.
    • Runtime: Node.js >= 14.x LTS, NPM >= 6.x.
    • Database: MongoDB 4.4+ hoặc MongoDB Atlas Cloud Tier M10+.
  • Phía người dùng (Client-side):
    • Trình duyệt: Google Chrome (bản 80+), Mozilla Firefox (bản 75+), Microsoft Edge hoặc Safari trên Desktop/Mobile.
    • Kết nối Internet băng thông từ 2 Mbps trở lên.

Hướng dẫn cài đặt và vận hành nhanh:

# 1. Clone mã nguồn từ kho lưu trữ
git clone https://github.com/uit-software/petpedia-social-network.git
cd petpedia-social-network

# 2. Cài đặt các gói thư viện phụ thuộc
npm install

# 3. Cấu hình biến môi trường trong file .env
PORT=3000
MONGODB_URI=mongodb+srv://<username>:<password>@cluster0.mongodb.net/petpedia?retryWrites=true&w=majority
JWT_SECRET_KEY=YourSuperSecretKey2021
NODE_ENV=production

# 4. Khởi chạy ứng dụng với Nodemon (Development) hoặc PM2 (Production)
npm run start # Hoặc: pm2 start server.js --name "petpedia-app" -i max

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Media Storage: Hiện tại hình ảnh và video đang lưu trữ cục bộ trên máy chủ hoặc qua thư mục tạm, chưa tích hợp dịch vụ lưu trữ đám mây chuyên dụng như AWS S3 hoặc Cloudinary, gây hạn chế dung lượng đĩa cứng khi lượng bài đăng tăng đột biến.
  • Thuật toán đề xuất: Tính năng Recommendation hiện chủ yếu dựa trên kỹ thuật so khớp chuỗi từ khóa (Keyword Matching) và đếm tần suất tương tác, chưa tích hợp mô hình Học máy (Machine Learning / Collaborative Filtering).
  • Giao diện đa ngữ: Ứng dụng mới chỉ hoàn thiện giao diện chính bằng Tiếng Anh, cần bổ sung bộ dịch đa ngôn ngữ i18n toàn diện cho Tiếng Việt.

Hướng phát triển trong tương lai

  1. Chuyển đổi giao diện sang Single Page Application (SPA) hoàn chỉnh sử dụng React.js hoặc Vue.js để tách biệt hoàn toàn Frontend và Backend (Headless Architecture).
  2. Xây dựng ứng dụng di động đa nền tảng (Cross-platform Mobile App) sử dụng React Native hoặc Flutter để nâng cao trải nghiệm Push Notification trên Smartphone.
  3. Tích hợp AI nhận diện giống loài (Pet Breed Recognition) tự động thông qua Computer Vision khi người dùng tải ảnh lên.
  4. Mở rộng hệ thống microservices cho module Chat và Stream video trực tiếp.

Đối tượng hưởng lợi

  • Sinh viên ngành Kỹ thuật Phần mềm / CNTT: Tham khảo tài liệu thiết kế hệ thống mạng xã hội thực tế từ phân tích yêu cầu (Use Case, Sequence Diagram) đến lập trình Stack Javascript hoàn chỉnh (Fullstack Node.js + Express + MongoDB + EJS).
  • Lập trình viên Web (Developers): Nắm bắt các mẫu thiết kế (Design Patterns) trong xử lý WebSockets thời gian thực, quản lý xác thực Stateless với JWT và tối ưu hóa truy vấn MongoDB NoSQL.
  • Cộng đồng yêu thú cưng và Doanh nghiệp ngành Pet: Sở hữu một kênh truyền thông trực tiếp, chất lượng cao, tăng 60% tỷ lệ tiếp cận đúng đối tượng mục tiêu so với các nền tảng mạng xã hội đa ngành.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để triển khai Petpedia lên môi trường máy chủ là gì?

Hệ thống yêu cầu máy chủ chạy hệ điều hành Linux (Ubuntu 20.04 LTS khuyến nghị) hoặc Windows Server, cài đặt sẵn Node.js v14 trở lên, tối thiểu 4GB RAM, 2 CPU cores và kết nối đến cơ sở dữ liệu MongoDB Atlas (hoặc MongoDB Community Server 4.4 cài đặt cục bộ).

2. Hệ thống xử lý bài toán nghẽn cổ chai (Bottleneck) khi lượng truy cập chat realtime tăng cao như thế nào?

Kiến trúc Socket.IO trên Node.js xử lý kết nối hướng sự kiện Non-blocking. Khi số lượng người dùng vượt quá khả năng chịu tải của một server đơn lẻ, hệ thống có thể mở rộng quy mô ngang (Horizontal Scaling) bằng cách sử dụng @socket.io/redis-adapter kết hợp Redis Pub/Sub để đồng bộ hóa tin nhắn xuyên suốt nhiều Node.js instances chạy sau Nginx Load Balancer.

3. Petpedia có thể tích hợp với các hệ thống thanh toán hoặc ứng dụng bên thứ ba không?

Hoàn toàn có thể. Do Backend được xây dựng theo chuẩn RESTful API và Module hóa rõ ràng qua Express.js, việc tích hợp các cổng thanh toán điện tử (Momo, VNPay, Stripe) hay xác thực bên thứ ba (Google OAuth 2.0, Facebook Login) chỉ cần bổ sung các route controller và middleware tương ứng.

4. Chi phí duy trì hạ tầng vận hành ước tính hàng tháng là bao nhiêu?

Đối với giai đoạn khởi tạo phục vụ khoảng 5.000 – 10.000 người dùng tích cực hàng tháng (MAU), chi phí hạ tầng ước tính chỉ khoảng 20 - 45 USD/tháng (bao gồm 1 VPS 2 vCPU/4GB RAM trên DigitalOcean/Linode trị giá ~24 USD và gói cơ sở dữ liệu MongoDB Atlas M2/M5 ~10-20 USD).


Kết luận

Khóa luận tốt nghiệp "Xây dựng mạng xã hội chia sẻ khoảnh khắc cho những người yêu động vật – Petpedia" của sinh viên Trần Diệu Bảo Trân và Đoàn Thế Duy (Trường ĐH Công nghệ Thông tin – ĐHQG TP.HCM) đã chứng minh tính khả thi, hiệu quả và giá trị thực tiễn vượt trội của việc kết hợp ngăn xếp công nghệ Node.js, Express, MongoDB, EJS, JWT và Socket.IO trong phát triển ứng dụng web thời gian thực. Đồ án không chỉ hoàn thành xuất sắc các yêu cầu học thuật của một đồ án Kỹ sư Phần mềm mà còn mở ra tiềm năng thương mại hóa và phát triển thành một cộng đồng số chuyên biệt, nhân văn và hữu ích cho những người yêu quý động vật tại Việt Nam.