Giới thiệu dự án

Thương mại điện tử (TMĐT) tại Việt Nam và trên toàn cầu đang trải qua giai đoạn tăng trưởng vượt bậc về quy mô và công nghệ. Theo báo cáo của Hiệp hội Thương mại điện tử Việt Nam (VECOM), tổng doanh thu TMĐT bán lẻ năm 2022 đạt 17,8 tỷ USD (tăng 27,6% so với 2021) và cán mốc 20,7 tỷ USD vào năm 2023 với tốc độ tăng trưởng 17,3%. Trên quy mô toàn cầu, số liệu từ Statista ghi nhận doanh thu TMĐT đạt 5,72 nghìn tỷ USD năm 2022 và vượt 6,3 nghìn tỷ USD vào năm 2023. Sự bùng nổ này đòi hỏi các nền tảng TMĐT không chỉ dừng lại ở việc hiển thị sản phẩm đơn thuần mà phải giải quyết bài toán chịu tải cao, đồng bộ dữ liệu thời gian thực và cá nhân hóa trải nghiệm khách hàng.

Các hệ thống TMĐT truyền thống (Monolithic) đối mặt với các điểm nghẽn nghiêm trọng:

  • Độ trễ truy vấn danh mục lớn: Tìm kiếm truyền thống qua SQL/NoSQL thông thường (LIKE hoặc $regex) gây quá tải CPU khi dữ liệu vượt ngưỡng $10^5$ bản ghi, khiến thời gian phản hồi vượt quá 350ms.
  • Độ phức tạp trong tích hợp đa dịch vụ: Xử lý bất đồng bộ giữa cổng thanh toán trực tuyến, dịch vụ logistics và hệ thống thông báo đẩy thường xảy ra tình trạng lệch dữ liệu (data inconsistency) hoặc mất dấu vết giao dịch.
  • Thiếu khả năng hỗ trợ thông minh theo ngữ cảnh: Khách hàng gặp khó khăn trong việc tìm kiếm sản phẩm phù hợp khi các công cụ lọc cứng nhắc không hiểu được ngôn ngữ tự nhiên.

Nhằm giải quyết triệt để các bài toán kỹ thuật trên, đề tài "Xây dựng hệ thống sàn thương mại điện tử" (thực hiện bởi sinh viên Vũ Duy Nguyên, mã sinh viên B19DCCN481, ngành Hệ thống Thông tin - Khoa Công nghệ Thông tin 1, Học viện Công nghệ Bưu chính Viễn thông dưới sự hướng dẫn của TS. Phan Thị Hà) tập trung thiết kế và triển khai một nền tảng sàn TMĐT đa bên (Multi-vendor B2C) hiện đại.

                  KIẾN TRÚC TỔNG THỂ HỆ THỐNG (B2C MARKETPLACE)
                  
 [ Khách hàng / Buyer ]   [ Người bán / Vendor ]   [ Quản trị viên / Admin ]
           │                        │                         │
           └────────────────────────┼─────────────────────────┘
                                    │ (HTTPS / RESTful APIs)
                                    ▼
                     ┌─────────────────────────────┐
                     │   Next.js 14 Frontend UI    │
                     │  (Server-Side Rendering)    │
                     └──────────────┬──────────────┘
                                    │
                                    ▼
                     ┌─────────────────────────────┐
                     │   NestJS 10 API Gateway     │
                     │ (Controllers/Guards/Pipes)  │
                     └──────────────┬──────────────┘
                                    │
         ┌──────────────────────────┼──────────────────────────┐
         ▼                          ▼                          ▼
┌─────────────────┐       ┌──────────────────┐       ┌──────────────────┐
│ MongoDB Atlas   │       │  Algolia Search  │       │ OpenAI Assistant │
│ (Dữ liệu chính) │       │ (Tìm kiếm nhanh) │       │  (Tư vấn AI Bot) │
└─────────────────┘       └──────────────────┘       └──────────────────┘
         │                          │                          │
         ▼                          ▼                          ▼
┌─────────────────┐       ┌──────────────────┐       ┌──────────────────┐
│ AWS S3 Bucket   │       │ VNPay Gateway    │       │ GHN Logistics    │
│ (Media Storage) │       │ (Cổng thanh toán)│       │ (Vận chuyển hàng)│
└─────────────────┘       └──────────────────┘       └──────────────────┘

Mục tiêu kỹ thuật của dự án:

  1. Kiến trúc Headless linh hoạt: Tách biệt hoàn toàn Frontend (Next.js 14 với Server-Side Rendering) và Backend (NestJS 10 Modular Monolith) giao tiếp qua chuẩn RESTful API.
  2. Tối ưu hóa khả năng tìm kiếm: Tích hợp bộ máy Algolia Search (công nghệ Inverted Index) nhằm giảm thời gian phản hồi tìm kiếm xuống dưới 30ms.
  3. Cá nhân hóa với AI: Xây dựng Trợ lý ảo (ChatBot Assistant) dựa trên OpenAI API hỗ trợ gợi ý sản phẩm dựa theo ngữ cảnh hội thoại.
  4. Tích hợp dịch vụ thanh toán và vận chuyển toàn diện: Kết nối cổng thanh toán VNPay chuẩn hóa mã hóa HMAC-SHA512 và API Giao Hàng Nhanh (GHN) để tính phí vận chuyển theo thời gian thực.
  5. Đảm bảo bảo mật và mở rộng: Xác thực đa luồng với Google OAuth 2.0, phân quyền RBAC (Role-Based Access Control) và cơ chế lưu trữ hình ảnh trên AWS S3.

Phạm vi hệ thống: Xây dựng hệ sinh thái 3 phân hệ tương tác độc lập: Khách hàng (Buyer), Nhà bán hàng (Vendor/Shop), và Quản trị viên hệ thống (Super Admin).


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

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

Khảo sát các giải pháp sàn TMĐT phổ biến hiện nay cho thấy sự khác biệt rõ nét về kiến trúc và khả năng mở rộng:

Tiêu chí Nền tảng Monolithic (WooCommerce / Magento) Nền tảng SaaS Đóng (Shopify) Nền tảng Headless Tùy biến (Đồ án đề xuất)
Kiến trúc Khối đơn (Monolith), Frontend dính liền Backend Đóng kín (Proprietary Cloud), tùy biến qua App Store Headless: Next.js (SSR) + NestJS REST API
Khả năng mở rộng (Scalability) Kém khi tải cao; nghẽn I/O Database quan hệ Cao, nhưng phụ thuộc hoàn toàn vào hạ tầng nhà cung cấp Rất cao; scale độc lập Frontend, Backend và NoSQL Cluster
Tốc độ tìm kiếm Chậm khi Catalog lớn ($> 300\text{ms}$ qua MySQL query) Nhanh, giới hạn can thiệp sâu vào thuật toán ranking Cực nhanh ($< 30\text{ms}$) qua Algolia Search Engine
Khả năng tùy biến nghiệp vụ Trung bình; dễ xung đột plugin Bị giới hạn bởi API và chính sách của nền tảng Không giới hạn; làm chủ 100% logic mã nguồn
Chi phí duy trì Tốn chi phí tối ưu máy chủ lớn Phí thuê bao hàng tháng cao + % hoa hồng giao dịch Tối ưu; chi phí hạ tầng Serverless/Cloud linh hoạt

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

  • Must-have (Bắt buộc có): Đăng nhập/Đăng ký xác thực qua Email & Google OAuth 2.0; Quản lý hồ sơ đa vai trò; CRUD danh mục và sản phẩm; Giỏ hàng thời gian thực; Thanh toán qua cổng VNPay; Tính toán cước phí và tạo vận đơn GHN; Phê duyệt gian hàng từ Admin.
  • Should-have (Nên có): Tìm kiếm full-text đa thuộc tính bằng Algolia; AI Assistant giải đáp thông tin sản phẩm dựa trên OpenAI LLM; Xuất hóa đơn điện tử; Theo dõi hành trình đơn hàng qua Webhook GHN.
  • Could-have (Có thể có): Thống kê doanh thu biểu đồ động theo tháng/quý cho người bán; Lưu trữ đa vùng AWS S3.
  • Won't-have (Chưa thực hiện ở giai đoạn này): Đấu giá trực tiếp thời gian thực (Live-bidding); Tích hợp ví điện tử quốc tế (Stripe/PayPal).

Thiết kế hệ thống

Danh mục công nghệ và phiên bản chuẩn hóa (Technology Stack):

  • Backend Runtime & Framework: Node.js v18.17 LTS, NestJS Framework v10.0.0, TypeScript v5.1.3.
  • Frontend Framework & Styling: Next.js v14.0.0 (App Router, Server-Side Rendering), React v18.2.0, TailwindCSS v3.3.0.
  • Cơ sở dữ liệu & Caching: MongoDB Atlas v6.0 (Mongoose ODM v7.4.0), Redis Cloud v7.0.
  • Hạ tầng & Dịch vụ ngoài (External Services): AWS S3 (Lưu trữ ảnh), Google Identity API (OAuth 2.0), Algolia Search API Client v4.19, OpenAI API (Model gpt-3.5-turbo / Assistant Engine), VNPay Gateway API v2.1.0, Giao Hàng Nhanh Open API v2.

Thiết kế Cơ sở dữ liệu (MongoDB Schema Design):

Hệ thống sử dụng MongoDB để quản lý dữ liệu linh hoạt, phi cấu trúc với hiệu năng cao. Sơ đồ thực thể biểu diễn quan hệ giữa các Collection chính bao gồm: Account, Shop, Product, Order, và Category.

// Định nghĩa cấu trúc Product Document trong NestJS (Mongoose)
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, Types } from 'mongoose';

@Schema({ timestamps: true })
export class Product extends Document {
  @Prop({ required: true, trim: true, index: true })
  name: string;

  @Prop({ required: true })
  description: string;

  @Prop({ type: Types.ObjectId, ref: 'Shop', required: true, index: true })
  shopId: Types.ObjectId;

  @Prop({ type: Types.ObjectId, ref: 'Category', required: true })
  categoryId: Types.ObjectId;

  @Prop({ required: true, min: 0 })
  price: number;

  @Prop({ required: true, default: 0 })
  stock: number;

  @Prop({ type: [String], default: [] })
  images: string[];

  @Prop({ default: 0, min: 0, max: 5 })
  rating: number;

  @Prop({ type: String, enum: ['PENDING', 'APPROVED', 'REJECTED'], default: 'PENDING' })
  status: string;
}

export const ProductSchema = SchemaFactory.createForClass(Product);
// Định nghĩa cấu trúc Order Document (Đơn hàng)
@Schema({ timestamps: true })
export class Order extends Document {
  @Prop({ type: Types.ObjectId, ref: 'Account', required: true, index: true })
  userId: Types.ObjectId;

  @Prop({ type: Types.ObjectId, ref: 'Shop', required: true, index: true })
  shopId: Types.ObjectId;

  @Prop({
    type: [{
      productId: { type: Types.ObjectId, ref: 'Product' },
      quantity: { type: Number, required: true },
      price: { type: Number, required: true }
    }],
    required: true
  })
  items: Array<{ productId: Types.ObjectId; quantity: number; price: number }>;

  @Prop({ required: true })
  totalAmount: number;

  @Prop({ required: true })
  shippingFee: number;

  @Prop({ type: String, enum: ['COD', 'VNPAY'], required: true })
  paymentMethod: string;

  @Prop({ type: String, enum: ['UNPAID', 'PAID', 'REFUNDED'], default: 'UNPAID' })
  paymentStatus: string;

  @Prop({ type: String, default: '' })
  vnpayTransactionNo: string;

  @Prop({ type: String, default: '' })
  ghnOrderCode: string;

  @Prop({ 
    type: String, 
    enum: ['PENDING', 'PROCESSING', 'SHIPPING', 'DELIVERED', 'CANCELLED'], 
    default: 'PENDING' 
  })
  orderStatus: string;
}

export const OrderSchema = SchemaFactory.createForClass(Order);

Thiết kế RESTful API chi tiết:

Phân hệ Phương thức Endpoint Mô tả chức năng Quyền truy cập
Auth POST /api/v1/auth/google Xác thực đăng nhập qua Google OAuth Token Public
Product GET /api/v1/products Lấy danh sách sản phẩm phân trang & bộ lọc Public
Product POST /api/v1/products Đăng ký sản phẩm mới (Tự động sync Algolia) Vendor
Order POST /api/v1/orders Tạo đơn hàng mới & tính toán vận chuyển Authenticated User
Payment POST /api/v1/payment/create-vnpay-url Khởi tạo URL giao dịch VNPay Authenticated User
Payment GET /api/v1/payment/vnpay-ipn Webhook xử lý kết quả giao dịch từ VNPay Public / Secure IPN
AI Assistant POST /api/v1/ai/chat Tương tác hỏi đáp với OpenAI Assistant Engine Authenticated User

Yêu cầu an toàn và bảo mật (Security Specifications):

  • Xác thực và phân quyền: Sử dụng JWT (JSON Web Token) kết hợp Refresh Token lưu trong HTTP-Only Cookie. Cơ chế NestJS Guard xác thực quyền hạn trên từng route theo cấp bậc AdminGuard, ShopGuard, AuthGuard.
  • Toàn vẹn dữ liệu giao dịch: Khởi tạo chữ ký số HMAC-SHA512 với vnp_HashSecret để kiểm tra tính toàn vẹn của dữ liệu trả về từ cổng thanh toán VNPay, ngăn ngừa tấn công can thiệp dữ liệu (Man-in-the-Middle).

Methodology

Dự án được triển khai theo mô hình Agile/Scrum trong chu kỳ 16 tuần, chia làm 4 Sprint chính (mỗi Sprint 4 tuần):

  • Sprint 1 (Tuần 1 - 4): Phân tích nghiệp vụ, thiết kế kiến trúc hệ thống, dựng khung dự án Backend NestJS và Frontend Next.js, cấu hình MongoDB Atlas và AWS S3.
  • Sprint 2 (Tuần 5 - 8): Triển khai Module Authentication, Module Product, đồng bộ hóa chỉ mục dữ liệu với Algolia Search Engine, xây dựng giao diện tương tác phía người mua.
  • Sprint 3 (Tuần 9 - 12): Tích hợp dịch vụ cổng thanh toán VNPay, tích hợp API đơn vị vận chuyển Giao Hàng Nhanh (GHN), tích hợp Trợ lý ảo AI Assistant qua OpenAI API.
  • Sprint 4 (Tuần 13 - 16): Xây dựng trang quản trị Admin và phân hệ Người bán (Shop Dashboard), tiến hành kiểm thử hiệu năng (Stress testing), bảo mật, sửa lỗi và đóng gói triển khai.

Implementation và kết quả

Development process

Cấu trúc mã nguồn Backend được phân bổ theo kiến trúc Module hóa (Modular Architecture) chặt chẽ của NestJS:

src/
├── app.module.ts
├── common/
│   ├── guards/          # AuthGuard, RolesGuard
│   ├── interceptors/   # TransformInterceptor, LoggingInterceptor
│   └── filters/        # AllExceptionsFilter
└── modules/
    ├── auth/           # OAuth2.0 & Local Auth Logic
    ├── products/       # Product CRUD & Algolia Sync Engine
    ├── orders/         # Order State Machine
    ├── payment/        # VNPay IPN & Checksum Verification
    ├── shipping/       # GHN API Wrapper Service
    └── ai-assistant/   # OpenAI Thread & Assistant Handlers

Xử lý thuật toán đồng bộ Algolia & Xác thực chữ ký thanh toán VNPay:

// Xử lý tạo URL thanh toán và xác thực chữ ký VNPay trong payment.service.ts
import { Injectable, BadRequestException } from '@nestjs/common';
import * as crypto from 'crypto';
import * as querystring from 'qs';

@Injectable()
export class PaymentService {
  createVNPayUrl(orderId: string, amount: number, ipAddr: string): string {
    const vnpUrl = process.env.VNP_URL;
    const secretKey = process.env.VNP_HASH_SECRET;
    const returnUrl = process.env.VNP_RETURN_URL;

    let vnp_Params: Record<string, any> = {
      vnp_Version: '2.1.0',
      vnp_Command: 'pay',
      vnp_TmnCode: process.env.VNP_TMN_CODE,
      vnp_Locale: 'vn',
      vnp_CurrCode: 'VND',
      vnp_TxnRef: orderId,
      vnp_OrderInfo: `Thanh toan don hang ${orderId}`,
      vnp_OrderType: 'other',
      vnp_Amount: amount * 100, // VNPay yêu cầu nhân 100
      vnp_ReturnUrl: returnUrl,
      vnp_IpAddr: ipAddr,
      vnp_CreateDate: new Date().toISOString().replace(/[-:T.Z]/g, '').slice(0, 14),
    };

    // Sắp xếp các tham số theo alphabet
    vnp_Params = Object.keys(vnp_Params).sort().reduce((result, key) => {
      result[key] = vnp_Params[key];
      return result;
    }, {});

    const signData = querystring.stringify(vnp_Params, { encode: false });
    const hmac = crypto.createHmac('sha512', secretKey);
    const signed = hmac.update(Buffer.from(signData, 'utf-8')).digest('hex');
    
    vnp_Params['vnp_SecureHash'] = signed;
    return `${vnpUrl}?${querystring.stringify(vnp_Params, { encode: false })}`;
  }
}
// Service kết nối OpenAI Assistant API trong ai-assistant.service.ts
import { Injectable } from '@nestjs/common';
import OpenAI from 'openai';

@Injectable()
export class AiAssistantService {
  private openai: OpenAI;
  private assistantId = process.env.OPENAI_ASSISTANT_ID;

  constructor() {
    this.openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
  }

  async askAssistant(userMessage: string, threadId?: string): Promise<{ reply: string; threadId: string }> {
    const activeThreadId = threadId || (await this.openai.beta.threads.create()).id;

    await this.openai.beta.threads.messages.create(activeThreadId, {
      role: 'user',
      content: userMessage,
    });

    const run = await this.openai.beta.threads.runs.createAndPoll(activeThreadId, {
      assistant_id: this.assistantId,
    });

    if (run.status === 'completed') {
      const messages = await this.openai.beta.threads.messages.list(activeThreadId);
      const lastMessage = messages.data[0].content[0];
      return {
        reply: (lastMessage as any).text.value,
        threadId: activeThreadId,
      };
    }
    throw new BadRequestException('Trợ lý AI không phản hồi kịp thời.');
  }
}

Testing và validation

Quá trình kiểm thử được thực hiện qua các giai đoạn Unit Testing (Jest), Integration Testing (Supertest), và Benchmark hiệu năng bằng Apache JMeter:

           SO SÁNH ĐỘ TRỄ TÌM KIẾM TRÊN TẬP DỮ LIỆU 100.000 SẢN PHẨM
  
  MongoDB Regex ($regex)  | ██████████████████████████████████ 385ms
  Algolia Inverted Index  | █▍ 18ms
                          └─────────────────────────────────────────►
                            0ms       100ms     200ms     300ms   400ms
Chỉ số kiểm thử Môi trường MongoDB Truyền thống Môi trường Tối ưu hóa (Hệ thống thực nghiệm)
Search Response Time ($10^5$ items) $385\text{ ms}$ (Trung bình) $18\text{ ms}$ (Giảm $95,3%$)
First Contentful Paint (Next.js SSR) $2,4\text{ s}$ (Client-Side Rendering) $0,9\text{ s}$ (Cải thiện $62,5%$)
Xử lý đơn hàng đồng thời (Concurrency) 85 TPS (Lỗi deadlock timeout) 420 TPS (Thông qua Redis Lock & Async Queue)
Độ phủ kiểm thử tự động (Unit Test Coverage) - $82,4%$ mã nguồn lõi
Tỷ lệ xác thực IPN thanh toán chính xác - $100%$ giao dịch hợp lệ ($0%$ sai lệch số dư)

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

Hệ thống đã hoàn thiện $100%$ các tính năng thiết kế ban đầu:

  1. Phía Khách hàng: Trải nghiệm mua sắm nhanh, thanh toán trực tuyến bảo mật, nhận phản hồi thông minh từ AI ChatBot với độ trễ phản hồi dưới 1,5 giây.
  2. Phía Người bán: Quản lý hàng tồn kho, cập nhật trạng thái đơn hàng và theo dõi vận chuyển thực tế qua tích hợp GHN Tracking.
  3. Phía Quản trị viên: Quản lý phân quyền tập trung, phê duyệt gian hàng và thống kê dữ liệu trực quan theo thời gian thực.

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

  1. Ứng dụng Trợ lý Ảo AI đàm thoại ngữ cảnh: Thay vì sử dụng chatbot dựa trên luật (Rule-based Bot) truyền thống với cây kịch bản cố định, hệ thống ứng dụng mô hình ngôn ngữ lớn (OpenAI Assistant Engine), cho phép hiểu được nhu cầu mua sắm phức tạp của khách hàng (ví dụ: "Tìm giúp tôi áo thun nam màu đen thoáng mát giá dưới 300 ngàn").
  2. Kiến trúc Tìm kiếm Bất đồng bộ Hiệu năng cao: Giải quyết triệt để sự suy giảm hiệu năng cơ sở dữ liệu bằng cơ sở hạ tầng Algolia Search kết hợp Mongoose Change Streams, đảm bảo dữ liệu tìm kiếm luôn đạt tính nhất quán sau cùng (Eventual Consistency) với độ trễ đồng bộ $< 500\text{ms}$.
  3. Hệ sinh thái Tích hợp API Thương mại Khép kín: Kết nối tự động 3 dịch vụ nền tảng (Thanh toán VNPay $\rightarrow$ Vận chuyển Giao Hàng Nhanh $\rightarrow$ Thông báo Firebase Cloud Messaging) trong một chuỗi trạng thái khép kín, loại bỏ hoàn toàn việc can thiệp thủ công từ quản trị viên.

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

Chiến lược triển khai (Deployment & Infrastructure):

  • Frontend Web Application: Triển khai trên nền tảng Edge Network của Vercel, tự động tối ưu hóa tài nguyên tĩnh (Static Assets) và tối ưu hóa hình ảnh WebP.
  • Backend REST API: Đóng gói Container hóa với Docker, triển khai trên AWS EC2 hoặc DigitalOcean Droplet, sử dụng PM2 quản lý tiến trình đa luồng (Cluster Mode).
  • Database & Assets: Cơ sở dữ liệu phân tán trên MongoDB Atlas M10 Replica Sets; tệp tin đa phương tiện được ký số và phân phối qua AWS S3 kết hợp CloudFront CDN.
+-----------------------------------------------------------------------------------+
|                           QUY TRÌNH DEPLOYMENT CI/CD                              |
|                                                                                   |
|  [ Git Push / Main ] ──► [ GitHub Actions CI ] ──► [ Run Unit Tests & Linting ]    |
|                                                              │                    |
|                                ┌─────────────────────────────┴─────────────────┐  |
|                                ▼                                               ▼  |
|                     [ Build Next.js Bundle ]                       [ Build Docker ]
|                                │                                               │  |
|                                ▼                                               ▼  |
|                     [ Deploy Vercel (Edge) ]                       [ Deploy AWS EC2]
+-----------------------------------------------------------------------------------+

Đánh giá hiệu quả kinh tế và vận hành (Cost-Benefit Analysis):

  • Chi phí hạ tầng ban đầu: Tối ưu hóa ở mức tối thiểu ($0 - 30\text{ USD/tháng}$) nhờ tận dụng các gói dịch vụ Cloud Serverless và Freemium (MongoDB Atlas, Vercel Hobby/Pro, AWS Free Tier).
  • Khả năng tăng trưởng (Scalability): Hệ thống có khả năng chịu tải lên tới $10.000$ người dùng hoạt động đồng thời (CCU) mà không cần cấu trúc lại mã nguồn lõi.

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

Hạn chế kỹ thuật hiện tại:

  • Tính phụ thuộc vào dịch vụ bên thứ ba: Hệ thống chịu ảnh hưởng trực tiếp nếu các API của VNPay, GHN hoặc OpenAI gặp sự cố mạng hoặc bảo trì.
  • Chi phí Token LLM: Chi phí vận hành AI Assistant tăng tỷ lệ thuận với số lượng tin nhắn trao đổi của người dùng nếu không áp dụng cơ chế Semantic Caching hiệu quả.

Hướng phát triển tiếp theo:

  1. Tách cụm Microservices với Message Broker: Chuyển đổi kiến trúc Modular Monolith sang Microservices hoàn chỉnh sử dụng Apache Kafka hoặc RabbitMQ để xử lý hàng đợi giao dịch mua hàng flash-sale.
  2. Tích hợp Vector Search nội bộ: Thay thế hoặc kết hợp Algolia với giải pháp Vector Database cục bộ (như Milvus hoặc Qdrant) nhằm giảm chi phí gọi API OpenAI và tăng cường bảo mật dữ liệu doanh nghiệp.
  3. Mở rộng Ứng dụng Di động (Mobile App): Xây dựng ứng dụng Flutter/React Native sử dụng chung hệ thống RESTful API hiện có.

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

  • Sinh viên & Người học ngành CNTT: Làm tài liệu tham khảo thực tiễn về việc ứng dụng kiến trúc TypeScript Full-stack hiện đại (Next.js + NestJS), chuẩn hóa quy trình phân tích thiết kế hệ thống thông tin.
  • Lập trình viên (Developers): Cung cấp các mẫu thiết kế mã nguồn chuẩn (Design Patterns), kỹ thuật xử lý webhook an toàn và phương thức kết nối các cổng dịch vụ thanh toán/vận chuyển tại Việt Nam.
  • Doanh nghiệp vừa và nhỏ (SMEs): Bản thiết kế kỹ thuật hoàn chỉnh để phát triển sàn TMĐT với chi phí tối ưu, sẵn sàng mở rộng và kiểm soát dữ liệu kinh doanh.
  • Nhà nghiên cứu ứng dụng: Khảo sát hiệu quả của việc kết hợp trí tuệ nhân tạo (LLMs) vào việc tối ưu tỷ lệ chuyển đổi trong thương mại điện tử.

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

1. Cần những yêu cầu hệ thống tối thiểu nào để triển khai mã nguồn?

Môi trường máy chủ cần cài đặt Node.js phiên bản $\ge 18.17.0$, Yarn/NPM, Docker Engine (nếu chạy container), cùng tài khoản cấu hình các biến môi trường: MongoDB Connection URI, AWS IAM Keys (S3), VNPay Merchant Credentials, GHN API Token, và OpenAI API Key.

2. Hệ thống xử lý thế nào khi có nghẽn mạng lúc khách hàng thanh toán qua VNPay?

Hệ thống sử dụng cơ chế IPN (Instant Payment Notification) Webhook. Khi giao dịch hoàn tất tại VNPay, máy chủ VNPay sẽ tự động gọi ngầm đến endpoint /api/v1/payment/vnpay-ipn của hệ thống để cập nhật trạng thái đơn hàng mà không phụ thuộc vào việc trình duyệt của người dùng có bị mất kết nối hay đóng đột ngột hay không.

3. Làm thế nào để đảm bảo tính nhất quán dữ liệu giữa MongoDB và Algolia?

Mỗi thao tác ghi (Create/Update/Delete) trên Product Module đều được bao bọc trong một Service Hook. Khi MongoDB xác nhận ghi dữ liệu thành công, một tác vụ đồng bộ bất đồng bộ sẽ đẩy payload đã định dạng sang Algolia Index. Nếu tác vụ lỗi, hệ thống sẽ ghi log và xếp vào hàng đợi xử lý lại (Retry Queue).

4. Chi phí duy trì định kỳ của hệ thống ước tính là bao nhiêu?

Với quy mô vừa ($< 50.000$ lượt truy cập/tháng), chi phí ước tính khoảng $25 - 60\text{ USD/tháng}$ cho máy chủ VPS và cơ sở dữ liệu. Các chi phí khác như Algolia và OpenAI được tính linh hoạt theo lưu lượng tìm kiếm và số lượng token đàm thoại thực tế.

5. Cần bao lâu để chuyển đổi hệ thống sang kiến trúc Microservices hoàn chỉnh?

Do mã nguồn Backend NestJS đã được thiết kế theo các Module độc lập hoàn toàn về mặt logic (Inversion of Control và Dependency Injection), việc bóc tách các module Payment, Order, và AI-Assistant thành các Microservices độc lập giao tiếp qua gRPC/Kafka ước tính mất khoảng 3 đến 4 tuần làm việc của 1 lập trình viên Senior Backend.


Kết luận

Đồ án tốt nghiệp "Xây dựng hệ thống sàn thương mại điện tử" của sinh viên Vũ Duy Nguyên đã giải quyết bài toán phát triển nền tảng sàn TMĐT đa bên (B2C Marketplace) theo tiêu chuẩn công nghệ hiện đại. Việc phối hợp giữa NestJS, Next.js (SSR), MongoDB, Algolia Search, cùng các dịch vụ lõi như OpenAI, VNPay, và Giao Hàng Nhanh tạo nên một hệ thống có hiệu năng cao, độ trễ thấp ($< 30\text{ms}$ khi tìm kiếm), giao diện thân thiện và khả năng vận hành ổn định. Đề tài chứng minh tính khả thi cao trong việc ứng dụng các giải pháp kỹ thuật số mới vào thương mại điện tử thực tế tại Việt Nam.