Giới thiệu dự án

Thương mại điện tử (E-Commerce) ngành hàng thiết bị công nghệ và điện tử tiêu dùng tại Việt Nam đang chứng kiến tốc độ tăng trưởng kép hàng năm (CAGR) vượt mức 18.5%, đạt quy mô hơn 8.5 tỷ USD theo báo cáo của VECOM và Statista. Nhu cầu sở hữu máy tính xách tay (laptop), điện thoại thông minh (smartphone), máy tính bảng (tablet) cùng các phụ kiện công nghệ tăng vọt trong kỷ nguyên làm việc kết hợp (hybrid work) và chuyển đổi số giáo dục. Tuy nhiên, việc phụ thuộc hoàn toàn vào các sàn thương mại điện tử trung gian khiến các doanh nghiệp bán lẻ công nghệ vừa và nhỏ đối mặt với mức chiết khấu cao (8% - 12%), thiếu quyền sở hữu dữ liệu khách hàng (Customer Data Platform), và khó khăn trong việc cá nhân hóa trải nghiệm mua sắm kỹ thuật cao.

Vấn đề cốt lõi đặt ra là sự thiếu hụt các nền tảng thương mại điện tử chuyên biệt sở hữu khả năng xử lý dữ liệu động, hỗ trợ so sánh thông số kỹ thuật đa chiều, tư vấn bán hàng tức thời (Real-time Consultation), và tự động hóa đề xuất sản phẩm dựa trên hành vi người dùng mà vẫn tối ưu hóa chi phí vận hành hạ tầng.

Đồ án tốt nghiệp chuyên ngành Hệ thống thông tin với đề tài "Xây dựng Website bán đồ dùng công nghệ" do sinh viên Nguyễn Văn Minh và Tôn Thiên Thạch thực hiện dưới sự hướng dẫn của ThS. Lê Thị Minh Châu tại Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE) giải quyết trực tiếp các bài toán trên thông qua việc thiết kế một hệ thống thương mại điện tử toàn diện, hiện đại.

Mục tiêu cụ thể của dự án được xác định rõ ràng:

  1. Xây dựng kiến trúc Single Page Application (SPA) tối ưu tốc độ render và trải nghiệm người dùng với ReactJS.
  2. Thiết kế hệ thống Backend RESTful API linh hoạt, khả năng mở rộng cao trên nền tảng NodeJS và ExpressJS.
  3. Cấu trúc cơ sở dữ liệu phi quan hệ (NoSQL) phân tán với MongoDB và Mongoose ODM.
  4. Triển khai thuật toán Phân rã giá trị suy biến (Singular Value Decomposition - SVD) để xây dựng hệ thống gợi ý sản phẩm (Recommendation System) cá nhân hóa dựa trên lịch sử đánh giá và mua hàng.
  5. Tích hợp kênh tương tác thời gian thực hai chiều giữa khách hàng và quản trị viên bằng Socket.IO.
  6. Đồng bộ hóa cổng thanh toán trực tuyến an toàn VNPAY cùng cơ chế bảo mật kép xác thực qua JSON Web Token (JWT) và Google OAuth 2.0.

Phạm vi nghiên cứu tập trung vào phân hệ bán lẻ trực tuyến các thiết bị công nghệ (Laptop, Mobile, Tablet, Phụ kiện), luồng nghiệp vụ quản trị kho hàng, voucher giảm giá, và xử lý giao dịch. Giới hạn hệ thống nằm ở việc chạy thử nghiệm trên môi trường giả lập VNPAY Sandbox và tập dữ liệu đánh giá được chuẩn hóa cho quy mô doanh nghiệp vừa.


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ực tế các nền tảng thương mại điện tử công nghệ đầu ngành tại Việt Nam cho thấy những ưu điểm vượt trội nhưng cũng tồn tại các rào cản kỹ thuật nhất định đối với trải nghiệm người dùng chuyên sâu:

Tiêu chí phân tích Thế Giới Di Động FPT Shop Hệ thống đề xuất trong đồ án
Kiến trúc Frontend MPA kết hợp Dynamic Hydration Hybrid Web Rendering SPA (Single Page Application) với ReactJS 18
Xác thực người dùng OTP SMS / Tài khoản nội bộ OTP SMS / Email Token JWT + Google OAuth 2.0 (Bảo mật 2 lớp)
Bộ lọc & So sánh sản phẩm Đa dạng nhưng tải lại trang khi so sánh Hỗ trợ so sánh cơ bản Ma trận so sánh trực quan, cập nhật động qua State
Giao tiếp khách hàng Chatbot tự động (Canned response) Gọi tổng đài / Widget bên thứ 3 Full-duplex Real-time Chat với Socket.IO
Hệ thống đề xuất (Recommendation) Dựa trên danh mục và sản phẩm xem cùng Dựa trên sản phẩm bán chạy Lọc cộng tác ma trận SVD (Collaborative Filtering)
Hệ thống Voucher Mã áp dụng chung toàn sàn Mã tích hợp số điện thoại Ví voucher người dùng, kiểm soát trạng thái lưu trữ

Phương pháp phân loại yêu cầu theo mô hình MoSCoW được áp dụng để xác định mức độ ưu tiên nghiệp vụ:

  • Must-have (Bắt buộc): Xác thực JWT/OAuth, duyệt danh mục, tìm kiếm đa tiêu chí, giỏ hàng, đặt hàng thanh toán COD & VNPAY, CRUD sản phẩm/đơn hàng cho Admin.
  • Should-have (Nên có): Gợi ý sản phẩm bằng thuật toán SVD, chat trực tuyến thời gian thực với Socket.IO, ví voucher khuyến mãi, chức năng so sánh sản phẩm.
  • Could-have (Có thể có): Quên mật khẩu qua SMTP Email tự động, thống kê biểu đồ doanh thu theo chu kỳ thời gian thực.
  • Won't-have (Tạm thời chưa triển khai): Đa ngôn ngữ (i18n), hệ thống giao vận tự động liên kết bên thứ 3 (GHN, GHTK).

Thiết kế hệ thống

Kiến trúc hệ thống được xây dựng theo mô hình phân tầng Client-Server tách biệt hoàn toàn (Decoupled Architecture), đảm bảo khả năng mở rộng ngang (Horizontal Scalability) và bảo trì độc lập:

graph TD
    Client[Client Tier: ReactJS SPA] -->|HTTPS REST API Requests| Gateway[Reverse Proxy & Express Middleware]
    Client <-->|WSS WebSockets| SocketServer[Real-time Server: Socket.IO]
    
    subgraph Backend Server [NodeJS & ExpressJS Framework]
        Gateway --> AuthMod[Auth & RBAC Middleware: JWT]
        Gateway --> ProdController[Product & Order Controllers]
        Gateway --> RecEngine[SVD Recommendation Engine]
        Gateway --> PayMod[VNPay Payment Module]
    end
    
    ProdController -->|Mongoose ODM| DB[(MongoDB Database Clustered)]
    RecEngine -->|Rating Matrix Factorization| DB
    SocketServer -->|State & Messages| DB
    PayMod -->|Checksum SHA256| VNPayAPI[VNPay Gateway Gateway Sandbox]

Technology Stack và phiên bản cụ thể:

  • Runtime & Backend: NodeJS v18.17.0 LTS, ExpressJS v4.18.2.
  • Database: MongoDB v6.0.8, Mongoose ODM v7.4.0.
  • Frontend Framework: ReactJS v18.2.0, React Router DOM v6.14.0, Redux Toolkit, TailwindCSS.
  • Real-time Protocol: Socket.IO v4.7.2.
  • Bảo mật & Tiện ích: JSON Web Token (jsonwebtoken v9.0.1), BcryptJS v2.4.3, Google Auth Library, Nodemailer.
  • Xử lý số liệu & ML: Python 3.10 với thư viện Scikit-Surprise / Numpy phục vụ module huấn luyện SVD.

Cơ sở dữ liệu MongoDB được thiết kế tối ưu với cấu trúc Document (BSON) và lập chỉ mục (Indexing) trên các trường tìm kiếm trọng yếu:

// Cấu trúc Schema Đơn hàng (Order Schema) với Mongoose
const mongoose = require('mongoose');

const OrderSchema = new mongoose.Schema({
  user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true, index: true },
  orderItems: [
    {
      product: { type: mongoose.Schema.Types.ObjectId, ref: 'Product', required: true },
      name: { type: String, required: true },
      quantity: { type: Number, required: true, min: 1 },
      price: { type: Number, required: true },
      image: { type: String, required: true }
    }
  ],
  shippingAddress: {
    address: { type: String, required: true },
    city: { type: String, required: true },
    phone: { type: String, required: true }
  },
  paymentMethod: { type: String, enum: ['COD', 'VNPAY'], default: 'COD' },
  paymentResult: {
    id: String,
    status: String,
    update_time: String,
    vnp_TransactionNo: String
  },
  voucherApplied: { type: mongoose.Schema.Types.ObjectId, ref: 'Voucher', default: null },
  discountAmount: { type: Number, default: 0 },
  totalPrice: { type: Number, required: true },
  isPaid: { type: Boolean, default: false },
  paidAt: { type: Date },
  status: { 
    type: String, 
    enum: ['Pending', 'Processing', 'Shipping', 'Delivered', 'Cancelled'], 
    default: 'Pending',
    index: true 
  }
}, { timestamps: true });

module.exports = mongoose.model('Order', OrderSchema);

Hệ thống API RESTful tuân thủ nghiêm ngặt chuẩn HTTP status codes, dữ liệu trao đổi dưới định dạng JSON với các endpoint chính:

  • POST /api/auth/login, POST /api/auth/register, POST /api/auth/google
  • GET /api/products, POST /api/products (Admin), GET /api/products/:id
  • POST /api/orders, GET /api/orders/myorders, PUT /api/orders/:id/status
  • GET /api/recommendations/:userId (Truy xuất danh sách đề xuất SVD)
  • POST /api/payment/create_payment_url, GET /api/payment/vnpay_return

Methodology

Quy trình phát triển phần mềm tuân theo phương pháp Agile/Scrum với chu kỳ Sprint 2 tuần, kéo dài từ tháng 02/2023 đến tháng 12/2023:

  • Milestone 1 (Tháng 2 - Tháng 4/2023): Thu thập yêu cầu nghiệp vụ, khảo sát hiện trạng, đặc tả Use Case, thiết kế CSDL BSON và kiến trúc REST API.
  • Milestone 2 (Tháng 5 - Tháng 7/2023): Xây dựng Core Backend API (NodeJS/Express), phát triển các dịch vụ xác thực JWT, phân quyền RBAC (Role-Based Access Control) và CRUD sản phẩm.
  • Milestone 3 (Tháng 8 - Tháng 10/2023): Phát triển giao diện người dùng ReactJS, tích hợp Socket.IO cho Module Chat, cổng thanh toán VNPAY và cấu hình Ví Voucher.
  • Milestone 4 (Tháng 11/2023): Thu thập tập dữ liệu đánh giá sản phẩm, huấn luyện mô hình máy học SVD (Collaborative Filtering), đánh giá các chỉ số RMSE/MAE và xây dựng API Recommendation.
  • Milestone 5 (Tháng 12/2023): Kiểm thử toàn diện (Unit Test, Integration Test, Load Test), tối ưu hóa hiệu năng và viết báo cáo khóa luận tốt nghiệp.

Implementation và kết quả

Development process

Quá trình phát triển tập trung vào việc áp dụng các Design Pattern hiện đại (Middleware Pattern, Repository Pattern, Singleton Pattern cho Database Connection) nhằm tối ưu hiệu năng và độ ổn định.

1. Cơ chế xác thực và bảo vệ Route với JWT Middleware

// Middleware xác thực Token và kiểm soát phân quyền (RBAC)
const jwt = require('jsonwebtoken');

const verifyTokenAndRole = (roles = []) => {
  return (req, res, next) => {
    const authHeader = req.headers.authorization;
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      return res.status(401).json({ success: false, message: 'Unauthorized: Không tìm thấy Token xác thực' });
    }

    const token = authHeader.split(' ')[1];
    jwt.verify(token, process.env.JWT_SECRET_KEY, (err, decoded) => {
      if (err) {
        return res.status(403).json({ success: false, message: 'Forbidden: Token không hợp lệ hoặc đã hết hạn' });
      }

      req.user = decoded;
      if (roles.length && !roles.includes(decoded.role)) {
        return res.status(403).json({ success: false, message: 'Forbidden: Bạn không có quyền truy cập tài nguyên này' });
      }
      next();
    });
  };
};

module.exports = { verifyTokenAndRole };

2. Xử lý giao tiếp thời gian thực với Socket.IO

// Khởi tạo Socket.IO quản lý phòng chat giữa khách hàng và Admin
const initSocketServer = (io) => {
  let activeUsers = [];

  io.on('connection', (socket) => {
    socket.on('addUser', (userId) => {
      if (!activeUsers.some((user) => user.userId === userId)) {
        activeUsers.push({ userId, socketId: socket.id });
      }
      io.emit('getUsers', activeUsers);
    });

    socket.on('sendMessage', ({ senderId, receiverId, text, conversationId }) => {
      const targetUser = activeUsers.find((user) => user.userId === receiverId);
      const messagePayload = { senderId, text, conversationId, createdAt: new Date() };

      if (targetUser) {
        io.to(targetUser.socketId).emit('getMessage', messagePayload);
      }
    });

    socket.on('disconnect', () => {
      activeUsers = activeUsers.filter((user) => user.socketId !== socket.id);
      io.emit('getUsers', activeUsers);
    });
  });
};

3. Thuật toán gợi ý sản phẩm SVD (Singular Value Decomposition)

Thuật toán SVD phân rã ma trận tương tác người dùng - sản phẩm $R$ (kích thước $m \times n$) thành 3 ma trận thành phần: $$R = U \cdot \Sigma \cdot V^T$$ Trong đó:

  • $U$ ($m \times k$): Ma trận thể hiện mối quan hệ giữa người dùng và $k$ đặc trưng tiềm ẩn (latent factors).
  • $\Sigma$ ($k \times k$): Ma trận đường chéo chứa các giá trị suy biến giảm dần, biểu thị tầm quan trọng của từng đặc trưng.
  • $V^T$ ($k \times n$): Ma trận biểu diễn mối quan hệ giữa các sản phẩm và $k$ đặc trưng tiềm ẩn.

Dự đoán mức độ yêu thích $\hat{r}{ui}$ của người dùng $u$ đối với sản phẩm $i$ chưa được đánh giá: $$\hat{r}{ui} = \mu + b_u + b_i + q_i^T p_u$$ Hàm mất mát tối ưu hóa qua phương pháp Stochastic Gradient Descent (SGD) với thành phần chính quy hóa L2 ($\lambda$): $$\min_{P, Q, b} \sum_{(u,i) \in R_{train}} (r_{ui} - \hat{r}_{ui})^2 + \lambda (|p_u|^2 + |q_i|^2 + b_u^2 + b_i^2)$$

# Huấn luyện mô hình đề xuất SVD bằng Python Surprise Engine
from surprise import SVD, Dataset, Reader
from surprise.model_selection import train_test_split
from surprise import accuracy
import pandas as pd

# 1. Đọc dữ liệu đánh giá sản phẩm từ MongoDB
df = pd.read_csv('user_ratings_tech_products.csv')
reader = Reader(rating_scale=(1, 5))
data = Dataset.load_from_df(df[['userId', 'productId', 'rating']], reader)

# 2. Phân chia tập huấn luyện và kiểm thử theo tỷ lệ 80:20
trainset, testset = train_test_split(data, test_size=0.2, random_state=42)

# 3. Khởi tạo thuật toán SVD với n_factors=50, lr_all=0.005, reg_all=0.02
algo = SVD(n_factors=50, n_epochs=30, lr_all=0.005, reg_all=0.02)
algo.fit(trainset)

# 4. Đánh giá độ chính xác trên tập kiểm thử
predictions = algo.test(testset)
rmse_score = accuracy.rmse(predictions)
mae_score = accuracy.mae(predictions)
print(f"Kết quả đánh giá mô hình: RMSE={rmse_score:.4f}, MAE={mae_score:.4f}")

Testing và validation

Quá trình kiểm thử được thực hiện qua các giai đoạn Unit Testing, Integration Testing, và Load Testing:

  • Độ bao phủ kiểm thử (Test Coverage): Đạt 92.4% trên toàn bộ các Controller và Middleware chính.
  • Hiệu năng kiểm thử tải (Load Testing với Apache Benchmark): Kiểm thử với 1,000 yêu cầu đồng thời (Concurrency Level: 100). Thời gian phản hồi trung bình (Average Response Time) đạt 142ms, tỷ lệ lỗi (Failure Rate) 0.00%.

Kết quả thực nghiệm mô hình đề xuất SVD qua các tỷ lệ phân chia tập dữ liệu (Dataset gồm 15,000 bản ghi đánh giá sản phẩm công nghệ):

Tỷ lệ Train : Test Số nhân tố ẩn ($k$) Tốc độ học ($\alpha$) Hệ số $\lambda$ RMSE MAE
80 : 20 50 0.005 0.02 0.8742 0.6815
80 : 20 100 0.005 0.05 0.8914 0.6990
70 : 30 50 0.005 0.02 0.9120 0.7104
70 : 30 100 0.005 0.05 0.9288 0.7241

Nhận xét: Tỷ lệ phân chia 80:20 với $k=50$ nhân tố tiềm ẩn mang lại sai số RMSE thấp nhất ($0.8742$), cho khả năng dự đoán điểm đánh giá của người dùng với độ lệch dưới 0.9 sao trên thang đo 5 sao.

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

  • Chức năng hoàn thiện: 100% các tính năng đề ra trong đề cương khóa luận được hiện thực hóa (Xác thực 2 lớp, Giỏ hàng, VNPAY, Socket Chat, SVD Recommendation, Ví Voucher, Bảng thống kê doanh thu đa chiều).
  • Trải nghiệm người dùng: Khảo sát 50 người dùng thử nghiệm cho thấy 94.5% đánh giá tích cực về tốc độ tải trang, tính tiện lợi khi so sánh cấu hình thiết bị, và độ mượt mà của tính năng chat tư vấn trực tiếp.

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

  1. Cá nhân hóa sản phẩm dựa trên ma trận SVD: Khác biệt so với các website bán lẻ truyền thống chỉ hiển thị sản phẩm bán chạy nhất, hệ thống trích xuất các đặc trưng tiềm ẩn (như thương hiệu ưa thích, phân khúc giá, cấu hình kỹ thuật ngầm hiểu) để đưa ra danh sách sản phẩm gợi ý có độ tương thích cao nhất cho từng cá nhân, giúp cải thiện tỷ lệ nhấp chuột (CTR) dự kiến thêm 32%.
  2. Kênh tương tác tức thời Full-Duplex (Socket.IO): Giải quyết độ trễ trong khâu tư vấn thiết bị công nghệ chuyên sâu. Khách hàng nhận được phản hồi ngay lập tức với độ trễ truyền tải tin nhắn dưới 50ms mà không cần refresh trình duyệt.
  3. Ma trận so sánh thông số kỹ thuật động: Cho phép người dùng đối đầu trực tiếp 2 hoặc nhiều sản phẩm cùng danh mục (vi xử lý CPU, RAM, GPU, dung lượng pin, chuẩn màn hình) trên một giao diện thống nhất, giảm thời gian ra quyết định mua hàng 45%.
  4. Kiến trúc đồng bộ bảo mật đa tầng: Kết hợp JWT Token Stateless với cơ chế xác thực Google OAuth 2.0 và thuật toán mã hóa SHA-256 bảo vệ dữ liệu truyền nhận thanh toán với cổng VNPAY.

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

Khả năng ứng dụng thực tế

Hệ thống hoàn toàn sẵn sàng để chuyển giao và ứng dụng thực tế cho:

  • Các chuỗi cửa hàng bán lẻ máy tính, điện thoại vừa và nhỏ muốn xây dựng thương hiệu độc lập và làm chủ dữ liệu người dùng.
  • Các mô hình kinh doanh thiết bị số cần tính năng tư vấn cấu hình máy tính chuyên biệt (Custom PC Builder / Tech Gear).

Hướng dẫn triển khai (Deployment Instructions)

# 1. Clone mã nguồn và cài đặt dependencies
git clone https://github.com/project-repo/tech-ecommerce.git
cd tech-ecommerce

# Cài đặt Backend
cd backend && npm install
# Cài đặt Frontend
cd ../frontend && npm install

# 2. Cấu hình biến môi trường (.env) tại thư mục backend
PORT=5000
MONGO_URI=mongodb+srv://admin:<password>@cluster0.mongodb.net/techshop?retryWrites=true&w=majority
JWT_SECRET_KEY=YourSuperSecretKey2023_JWT_Secure
VNP_TMNCODE=YOUR_VNPAY_TMNCODE
VNP_HASHSECRET=YOUR_VNPAY_HASHSECRET
VNP_URL=https://sandbox.vnpayment.vn/paymentv2/vpcpay.html
GOOGLE_CLIENT_ID=your-google-oauth-client-id.apps.googleusercontent.com

# 3. Khởi chạy hệ thống bằng Process Manager (PM2) trên Production
npm run build --prefix ../frontend
pm2 start server.js --name "tech-ecommerce-backend"

Phân tích hiệu quả kinh tế (Cost-Benefit Analysis & ROI)

  • Tiết kiệm chi phí hoa hồng sàn: Loại bỏ khoản phí 8% - 12% trên mỗi đơn hàng khi bán qua sàn thương mại điện tử trung gian.
  • Chi phí vận hành hạ tầng thấp: Triển khai trên môi trường Cloud (VPS 2 vCPU, 4GB RAM + MongoDB Atlas Free/Tier M10) với chi phí ước tính chỉ từ 15 - 30 USD/tháng.
  • Thời gian hoàn vốn (ROI): Ước tính đạt điểm hòa vốn sau 6 đến 9 tháng vận hành khi đạt mức doanh thu ổn định từ 200 đơn hàng/tháng.

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

Hạn chế hiện tại

  • Vấn đề Cold-Start trong hệ thống gợi ý: Khi một người dùng mới hoàn toàn (chưa có tương tác) hoặc sản phẩm mới đăng chưa có lượt đánh giá nào, mô hình SVD chưa thể tối ưu hóa độ chính xác mà phải tạm thời fallback về danh mục sản phẩm nổi bật.
  • Dữ liệu đánh giá tập trung: Quá trình huấn luyện mô hình SVD hiện tại vẫn thực hiện theo phương thức định kỳ (Batch Training) thay vì xử lý dòng dữ liệu thời gian thực (Online Machine Learning).
  • Hạ tầng thanh toán: Mới tích hợp cổng VNPAY và phương thức COD, chưa hỗ trợ ví điện tử MoMo, ZaloPay hoặc thẻ tín dụng quốc tế (Stripe).

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

  • Hệ thống gợi ý lai (Hybrid Recommendation System): Kết hợp SVD với Content-Based Filtering và Deep Learning (Neural Collaborative Filtering - NCF) để giải quyết dứt điểm bài toán Cold-Start.
  • Kiến trúc Microservices & Caching: Tách biệt module gợi ý và module chat thành các service độc lập, ứng dụng Redis Cache để tăng tốc độ truy vấn danh mục sản phẩm với hàng triệu bản ghi.
  • Ứng dụng di động đa nền tảng: Phát triển ứng dụng Mobile Client bằng React Native tái sử dụng 70% logic của Redux và REST API hiện có.

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

mindmap
  root((Hệ thống TMĐT Công nghệ))
    Sinh viên & Nghiên cứu sinh
      Học liệu tham khảo kiến trúc MERN Stack chuẩn mực
      Tài liệu thực nghiệm chi tiết thuật toán SVD
    Lập trình viên Fullstack
      Mẫu triển khai thực tế Socket.IO và RESTful API
      Template tích hợp VNPAY và Google OAuth an toàn
    Doanh nghiệp Bán lẻ
      Sở hữu nền tảng độc lập, giảm 100% phí sàn
      Tăng tỷ lệ chốt đơn nhờ Chat & Recommendation
  • Sinh viên & Giảng viên: Tài liệu tham khảo toàn diện về việc kết hợp giữa công nghệ Web hiện đại (MERN Stack) và Khoa học dữ liệu / Học máy ứng dụng (Applied Machine Learning).
  • Lập trình viên (Developers): Nắm vững các pattern thiết kế hệ thống thực chiến, kỹ thuật xử lý bất đồng bộ trong NodeJS, quản lý State phức tạp trong React 18, và xử lý WebSockets.
  • Doanh nghiệp vừa và nhỏ: Giải pháp phần mềm thương mại điện tử trọn gói, bảo mật cao, khả năng tùy biến tuyệt đối với chi phí triển khai tối thiểu.

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

1. Yêu cầu phần cứng và môi trường để triển khai hệ thống là gì?

Hệ thống yêu cầu máy chủ cài đặt hệ điều hành Linux (Ubuntu 20.04 LTS trở lên), tối thiểu 2 vCPU, 4GB RAM, và 20GB dung lượng ổ cứng SSD. Môi trường phần mềm bao gồm Node.js v18+, NPM v9+, MongoDB v6.0+, và Nginx làm Web Server Reverse Proxy hỗ trợ SSL/TLS.

2. Hệ thống xử lý bài toán nghẽn cổ chai khi số lượng người dùng tăng đột biến như thế nào?

Nhờ vào mô hình kiến trúc phi đồng bộ Non-blocking I/O của NodeJS và cơ chế Connection Pooling của Mongoose, hệ thống có thể xử lý hàng ngàn kết nối đồng thời. Khi mở rộng, hệ thống có thể áp dụng Nginx Load Balancer để phân phối tải cho nhiều Node process (sử dụng PM2 Cluster Mode) và thiết lập MongoDB Replica Set.

3. Quy trình tích hợp và xác thực giao dịch qua cổng VNPAY diễn ra như thế nào?

Khi người dùng chọn thanh toán VNPAY, Backend sẽ tạo chuỗi mã hóa URL chứa các tham số đơn hàng kèm chữ ký bảo mật (Secure Hash) sử dụng thuật toán HMAC-SHA512. Người dùng được chuyển hướng đến cổng thanh toán VNPAY. Sau khi giao dịch hoàn tất, VNPAY gửi dữ liệu phản hồi về IPN URL của hệ thống; Backend thực hiện kiểm tra lại chữ ký (Checksum Validation) trước khi cập nhật trạng thái đơn hàng sang Paid.

4. Chi phí duy trì và bảo trì hệ thống hàng năm ước tính bao nhiêu?

Chi phí duy trì bao gồm: Tên miền (.vn hoặc .com: ~10 - 25 USD/năm), Máy chủ Cloud VPS (~180 - 360 USD/năm), Chứng chỉ SSL (Miễn phí qua Let's Encrypt). Tổng chi phí vận hành ước tính dao động từ 200 - 400 USD/năm, thấp hơn rất nhiều so với chi phí chiết khấu hoa hồng trên các sàn thương mại điện tử.

5. Thuật toán SVD được cập nhật dữ liệu huấn luyện mới như thế nào?

Mô hình SVD được thiết lập lịch trình tự động (Cron Job) tái huấn luyện định kỳ (ví dụ: vào lúc 02:00 sáng mỗi ngày) khi có thêm các lượt tương tác và đánh giá mới được lưu trong MongoDB. Sau khi huấn luyện, ma trận trọng số mới được cập nhật vào Database để phục vụ các yêu cầu API đề xuất thời gian thực mà không làm gián đoạn trải nghiệm người dùng.


Kết luận

Đề tài tốt nghiệp "Xây dựng Website bán đồ dùng công nghệ" của sinh viên Nguyễn Văn Minh và Tôn Thiên Thạch đã hoàn thành xuất sắc các mục tiêu đặt ra, chứng minh tính khả thi cao trong việc ứng dụng công nghệ phần mềm tiên tiến vào giải quyết bài toán thương mại điện tử thực tế. Dự án không chỉ dừng lại ở một trang web bán hàng cơ bản mà đã tích hợp thành công những module kỹ thuật phức tạp: kiến trúc MERN Stack tối ưu, xác thực phân quyền đa kênh, giao tiếp thời gian thực hai chiều Socket.IO, và đặc biệt là hệ thống khuyến nghị sản phẩm cá nhân hóa sử dụng thuật toán phân rã ma trận SVD.

Đây là công trình nghiên cứu ứng dụng có giá trị thực tiễn cao, đóng góp một giải pháp mã nguồn mở hoàn chỉnh, tin cậy và có thể mở rộng cho cộng đồng lập trình viên cũng như các doanh nghiệp bán lẻ thiết bị công nghệ trong giai đoạn chuyển đổi số hiện nay.