Giới thiệu dự án

Bối cảnh thị trường và vấn đề thực tiễn

Theo báo cáo e-Conomy SEA 2023, thị trường thương mại điện tử (TMĐT) Việt Nam đạt tốc độ tăng trưởng kép hàng năm (CAGR) trên 25%, trong đó ngành hàng thời trang và may mặc chiếm xấp xỉ 18.5% tổng quy mô giao dịch trực tuyến. Tuy nhiên, phần lớn các doanh nghiệp thời trang vừa và nhỏ (SMEs) cũng như các thương hiệu nội địa (Local Brands) tại Việt Nam đang gặp trở ngại lớn khi vận hành trên các nền tảng thương mại điện tử truyền thống.

Các hạn chế cốt lõi bao gồm:

  • Chi phí hoa hồng sàn cao (từ 8% - 15% trên mỗi đơn hàng).
  • Tốc độ phản hồi trang web chậm khi lưu lượng tăng đột biến trong các khung giờ Flash Sale.
  • Trải nghiệm cá nhân hóa kém, thiếu công cụ gợi ý sản phẩm chuyên sâu dựa trên hành vi người dùng.

Tuyên bố vấn đề (Problem Statement)

Khảo sát các website thời trang hiện nay (tiêu biểu như Uniqlo Việt Nam, 5THEWAY) cho thấy những điểm nghẽn kỹ thuật rõ rệt:

  • Hiệu năng hệ thống: Backend xây dựng trên các kiến trúc nguyên khối (Monolith) cũ hoặc các runtime thông dịch gặp tình trạng nghẽn I/O (I/O Bottleneck), làm thời gian phản hồi (Latency) vượt ngưỡng 1.5s khi chịu tải đồng thời.
  • Cá nhân hóa sản phẩm: Đa số nền tảng chỉ dừng lại ở việc lọc sản phẩm theo thuộc tính tĩnh (Màu sắc, kích cỡ, giá), thiếu module học máy (Machine Learning) để phân cụm và đề xuất sản phẩm theo sở thích thực tế của từng khách hàng.
  • Trải nghiệm giao diện (UX): Việc chuyển trang tốn thời gian tải lại toàn bộ DOM, không lưu trữ lịch sử tương tác tạm thời, tỷ lệ bỏ rơi giỏ hàng (Cart Abandonment Rate) lên tới 68%.

Mục tiêu của đề tài

  1. Xây dựng kiến trúc Backend hiệu năng cao: Triển khai RESTful API bằng ngôn ngữ Go (Golang v1.22) kết hợp Gin Gonic framework, tối ưu hóa xử lý đa nhiệm thông qua Goroutines và Channels.
  2. Thiết kế cơ sở dữ liệu linh hoạt: Ứng dụng hệ quản trị NoSQL MongoDB v7.0 để lưu trữ danh mục sản phẩm phi cấu trúc, tối ưu tốc độ đọc/ghi với chỉ mục (Indexing) và Aggregation Pipeline.
  3. Phát triển giao diện Single Page Application (SPA): Sử dụng framework Angular v17 kết hợp thư viện thành phần Ant Design (NG-ZORRO), đem lại trải nghiệm giao diện mượt mà và tương thích đa thiết bị (Responsive Design).
  4. Tích hợp thuật toán gợi ý thông minh: Ứng dụng thuật toán phân cụm K-means trên nền tảng Python v3.11 để phân tích đặc trưng sản phẩm và hành vi mua hàng, tự động đề xuất sản phẩm liên quan.
  5. Đóng gói dịch vụ bên thứ ba & Triển khai đám mây: Tích hợp cổng thanh toán trực tuyến VNPay, API tính phí/tra cứu vận đơn Giao Hàng Nhanh (GHN), AI Chatbot hỗ trợ khách hàng tự động qua Kommunicate và triển khai toàn bộ hệ thống lên hạ tầng Microsoft Azure.

Phạm vi và giới hạn của đề tài

  • Phạm vi:
    • Xây dựng phân hệ Khách hàng (Duyệt hàng, lọc đa tiêu chí, giỏ hàng, đặt hàng, thanh toán trực tuyến VNPay, theo dõi trạng thái đơn hàng, đánh giá sản phẩm).
    • Xây dựng phân hệ Quản trị viên (Quản lý danh mục, quản lý sản phẩm đa biến thể, quản lý người dùng, thiết lập Flash Sale, thống kê doanh thu và báo cáo tăng trưởng).
    • Xây dựng Service Recommendation hoạt động độc lập bằng Python.
  • Giới hạn:
    • Chưa hỗ trợ mô hình đa nhà bán hàng (Multi-vendor Marketplace).
    • Thuật toán K-means huấn luyện offline/bán tự động định kỳ theo lô (Batch Processing) trên tập dữ liệu được crawl từ Uniqlo, chưa áp dụng mô hình Streaming Real-time Deep Learning.

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

Phân tích hiện trạng và đối thủ cạnh tranh

Tiêu chí phân tích Uniqlo Việt Nam 5THEWAY VN Đề tài nghiên cứu (Hệ thống đề xuất)
Công nghệ Frontend Server-Side Rendering (SSR) WordPress / WooCommerce Angular v17 (SPA) + Ant Design
Công nghệ Backend Java / Enterprise Monolith PHP / MySQL Golang v1.22 (Gin Gonic) + Python
Cơ sở dữ liệu RDBMS (Oracle / PostgreSQL) MySQL 8.0 MongoDB v7.0 (NoSQL Document)
Tốc độ phản hồi API Trung bình (450ms - 850ms) Chậm (> 1200ms khi tải cao) Nhanh (< 120ms với Golang Gin)
Gợi ý sản phẩm Theo danh mục cố định Sản phẩm mới nhất Thuật toán K-means (Machine Learning)
Thanh toán & Vận chuyển Thẻ quốc tế, COD Chuyển khoản, COD VNPay QR/ATM/Credit + GHN API

Đặc tả yêu cầu hệ thống theo mô hình MoSCoW

  • Must have (Bắt buộc phải có):
    • Đăng ký, đăng nhập xác thực qua JWT và mã OTP qua Email SMTP.
    • CRUD danh mục và sản phẩm đa thuộc tính (Size, Color, Stock, SKU).
    • Giỏ hàng, áp dụng mã giảm giá, đặt hàng và thanh toán trực tuyến qua cổng VNPay.
    • Tích hợp tính phí vận chuyển theo thời gian thực từ API Giao Hàng Nhanh.
    • Phân quyền người dùng chi tiết (Role-Based Access Control - RBAC): Admin, User, Guest.
  • Should have (Nên có):
    • Module Recommendation gợi ý sản phẩm tương đồng sử dụng K-means.
    • Quản lý sự kiện Flash Sale có đồng hồ đếm ngược (Countdown timer).
    • Tích hợp Chatbot AI hỗ trợ giải đáp tự động (Kommunicate).
  • Could have (Có thể có):
    • Thu thập dữ liệu mẫu (Data Crawling) tự động từ website Uniqlo để đa dạng hóa nguồn sản phẩm thử nghiệm.
    • Hệ thống đánh giá sao và bình luận sau khi đơn hàng hoàn thành (Delivered).
  • Won't have (Chưa thực hiện trong phiên bản này):
    • Tìm kiếm sản phẩm bằng hình ảnh (Visual Search).
    • Ứng dụng di động Native (iOS/Android).

Thiết kế kiến trúc và công nghệ

1. Technology Stack

  • Frontend: Angular 17.0.0, TypeScript 5.2, Ant Design (NG-ZORRO v17), RxJS 7.8, TailwindCSS.
  • Backend Core: Go 1.22, Gin Gonic v1.9.1, Go Mongo Driver v1.14.0, Golang-JWT v5.2, Zap Logger.
  • Machine Learning Engine: Python 3.11, Scikit-learn 1.3.2, Pandas, NumPy.
  • Database & Cache: MongoDB 7.0 Community Server, MongoDB Atlas.
  • Cloud & DevOps: Microsoft Azure Linux VM (Ubuntu 22.04 LTS), Nginx Reverse Proxy, Docker.

2. Thiết kế Cơ sở dữ liệu (MongoDB Collections Schema)

Hệ thống sử dụng MongoDB với thiết kế phi chuẩn hóa (Denormalization) hợp lý để tối ưu hiệu năng đọc (Read-heavy workload):

// Collection: products
{
  "_id": {"$oid": "668fa12b9c1d2e001f8a9a01"},
  "name": "Áo Thun Cổ Tròn Dry-EX",
  "slug": "ao-thun-co-tron-dry-ex",
  "category_id": {"$oid": "668fa05a9c1d2e001f8a9a00"},
  "base_price": 399000,
  "discount_price": 299000,
  "sku": "UQ-DRYEX-001",
  "attributes": {
    "colors": ["Black", "Navy", "White"],
    "sizes": ["S", "M", "L", "XL"]
  },
  "stock": 150,
  "feature_vector": [0.85, 0.12, 0.05, 0.45, 0.90],
  "rating_avg": 4.8,
  "rating_count": 42,
  "created_at": {"$date": "2024-03-01T10:00:00Z"}
}

// Collection: orders
{
  "_id": {"$oid": "668fb45a9c1d2e001f8a9b12"},
  "user_id": {"$oid": "668f9e1a9c1d2e001f8a9999"},
  "items": [
    {
      "product_id": {"$oid": "668fa12b9c1d2e001f8a9a01"},
      "product_name": "Áo Thun Cổ Tròn Dry-EX",
      "quantity": 2,
      "price": 299000,
      "color": "Navy",
      "size": "L"
    }
  ],
  "shipping_address": {
    "recipient_name": "Nguyễn Văn A",
    "phone": "0901234567",
    "province_id": 202,
    "district_id": 1442,
    "ward_code": "20101",
    "street": "1 Võ Văn Ngân, TP. Thủ Đức"
  },
  "shipping_fee": 22000,
  "total_amount": 620000,
  "payment_method": "VNPAY",
  "payment_status": "PAID",
  "order_status": "SHIPPING",
  "tracking_code": "GHN_VN_88392194",
  "created_at": {"$date": "2024-06-25T14:30:00Z"}
}

3. Thiết kế RESTful API

Hệ thống tuân thủ chuẩn RESTful API với định dạng trao đổi JSON, phân tầng Authentication thông qua Header Authorization: Bearer <JWT_TOKEN>:

Method Endpoint Quyền hạn Mô tả chức năng
POST /api/v1/auth/register Public Đăng ký tài khoản người dùng mới & gửi OTP
POST /api/v1/auth/verify-otp Public Xác thực mã OTP qua Email kích hoạt tài khoản
POST /api/v1/auth/login Public Xác thực đăng nhập và trả về JWT Access Token
GET /api/v1/products Public Lấy danh sách sản phẩm (Hỗ trợ phân trang, lọc, sort)
GET /api/v1/products/:id Public Xem chi tiết sản phẩm và cập nhật lượt xem
POST /api/v1/cart/items User Thêm sản phẩm vào giỏ hàng
PUT /api/v1/cart/items/:id User Cập nhật số lượng sản phẩm trong giỏ
POST /api/v1/orders/checkout User Khởi tạo đơn hàng & tạo URL thanh toán VNPay
GET /api/v1/recommendations User Lấy danh sách gợi ý sản phẩm cá nhân hóa
POST /api/v1/admin/products Admin Thêm mới sản phẩm vào hệ thống
PUT /api/v1/admin/orders/:id Admin Cập nhật trạng thái đơn hàng và điều phối GHN
GET /api/v1/admin/analytics Admin Thống kê doanh thu, đơn hàng theo mốc thời gian

Implementation và kết quả

Quy trình phát triển và hiện thực kỹ thuật

Dự án được chia thành 6 giai đoạn phát triển rõ ràng từ ngày 25/02/2024 đến 12/07/2024:

  • Giai đoạn 1 (25/02 - 25/03): Thiết kế thực thể MongoDB, xây dựng hệ thống Base RESTful API bằng Gin Gonic và triển khai cơ chế xác thực JWT kết hợp OTP Mailer.
  • Giai đoạn 2 (26/03 - 26/04): Xây dựng giao diện Admin Dashboard với Angular & Ant Design, tích hợp các API quản lý danh mục, sản phẩm, đơn hàng.
  • Giai đoạn 3 (27/05 - 19/06): Hoàn thiện phân hệ Client Storefront, giỏ hàng, cấu hình Routing và State Management.
  • Giai đoạn 4 (20/06 - 25/06): Tích hợp cổng thanh toán VNPay SDK và kết nối API tính phí vận chuyển tự động của Giao Hàng Nhanh (GHN).
  • Giai đoạn 5 (26/06 - 05/07): Thu thập dữ liệu từ Uniqlo bằng Web Scraping, huấn luyện mô hình K-means Clustering bằng Python và xuất API Recommendation.
  • Giai đoạn 6 (06/07 - 12/07): Tích hợp Chatbot Kommunicate, thực hiện kiểm thử tải, vẽ sơ đồ hoàn thiện và đóng gói báo cáo.

Backend Implementation (Golang Gin Handler with JWT & DB Transaction)

package controllers

import (
	"context"
	"net/http"
	"time"

	"github.com/gin-gonic/gin"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/bson/primitive"
	"go.mongodb.org/mongo-driver/mongo"
)

type OrderController struct {
	OrderCollection *mongo.Collection
	CartCollection  *mongo.Collection
}

// CreateOrderHandler xử lý lưu trữ đơn hàng và chuẩn bị thanh toán VNPay
func (oc *OrderController) CreateOrderHandler(c *gin.Context) {
	userIdHex, exists := c.Get("userId")
	if !exists {
		c.JSON(http.StatusUnauthorized, gin.H{"error": "Unauthorized: Missing Token"})
		return
	}
	userId, _ := primitive.ObjectIDFromHex(userIdHex.(string))

	var payload struct {
		ShippingAddress bson.M `json:"shipping_address" binding:"required"`
		PaymentMethod   string `json:"payment_method" binding:"required"`
	}

	if err := c.ShouldBindJSON(&payload); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid payload format"})
		return
	}

	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	// Truy xuất giỏ hàng hiện tại của người dùng
	var userCart bson.M
	err := oc.CartCollection.FindOne(ctx, bson.M{"user_id": userId}).Decode(&userCart)
	if err != nil {
		c.JSON(http.StatusNotFound, gin.H{"error": "Giỏ hàng rỗng hoặc không tồn tại"})
		return
	}

	// Khởi tạo Document Order mới
	newOrder := bson.M{
		"user_id":          userId,
		"items":            userCart["items"],
		"shipping_address": payload.ShippingAddress,
		"payment_method":   payload.PaymentMethod,
		"payment_status":   "PENDING",
		"order_status":     "PROCESSING",
		"created_at":       time.Now(),
	}

	result, err := oc.OrderCollection.InsertOne(ctx, newOrder)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": "Lỗi lưu trữ đơn hàng"})
		return
	}

	// Làm sạch giỏ hàng sau khi đã chuyển thành đơn hàng thành công
	_, _ = oc.CartCollection.UpdateOne(ctx, bson.M{"user_id": userId}, bson.M{"$set": bson.M{"items": []interface{}{}}})

	c.JSON(http.StatusCreated, gin.H{
		"message":  "Tạo đơn hàng thành công",
		"order_id": result.InsertedID,
	})
}

Machine Learning Recommendation Service (Python K-means Clustering)

import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from flask import Flask, request, jsonify

app = Flask(__name__)

# Vector hóa đặc trưng sản phẩm: [Price_Norm, Category_Code, Rating, Purchase_Count, Discount_Rate]
def build_recommendation_engine(products_df, k_clusters=5):
    features = products_df[['price', 'category_id', 'rating_avg', 'purchase_count', 'discount_rate']].values
    scaler = StandardScaler()
    scaled_features = scaler.fit_transform(features)
    
    # Huấn luyện K-means với thuật toán Lloyd và khởi tạo K-means++
    kmeans = KMeans(n_clusters=k_clusters, init='k-means++', max_iter=300, random_state=42)
    products_df['cluster'] = kmeans.fit_predict(scaled_features)
    return kmeans, products_df, scaler

@app.route('/api/recommend', methods=['POST'])
def recommend_products():
    data = request.json
    target_product_id = data.get('product_id')
    
    # Tìm cụm của sản phẩm mục tiêu
    target_product = products_df[products_df['_id'] == target_product_id]
    if target_product.empty:
        return jsonify({"error": "Product not found"}), 404
        
    cluster_id = target_product['cluster'].values[0]
    
    # Trích xuất 10 sản phẩm cùng cụm có khoảng cách Euclidean gần nhất
    recommended = products_df[
        (products_df['cluster'] == cluster_id) & 
        (products_df['_id'] != target_product_id)
    ].sort_values(by='rating_avg', ascending=False).head(10)
    
    return jsonify({
        "target_product_id": target_product_id,
        "cluster": int(cluster_id),
        "recommendations": recommended['_id'].tolist()
    })

if __name__ == '__main__':
    # Dữ liệu được crawl từ Uniqlo và lưu vào DataFrame
    products_df = pd.read_json('uniqlo_crawled_data.json')
    kmeans_model, products_df, scaler = build_recommendation_engine(products_df)
    app.run(host='0.0.0.0', port=5001)

Kiểm thử và Đánh giá hiệu năng (Testing & Validation)

Hệ thống được kiểm thử tự động với công cụ k6 và Apache JMeter nhằm đánh giá khả năng chịu tải và tính toàn vẹn dữ liệu:

  • Kịch bản kiểm thử tải (Load Testing Scenario): 1.000 Virtual Users (VU) truy cập đồng thời trong vòng 10 phút, thực hiện các thao tác: Tìm kiếm sản phẩm $\rightarrow$ Xem chi tiết $\rightarrow$ Thêm vào giỏ $\rightarrow$ Gọi API Recommendation.
Chỉ số hiệu năng (Metrics) Mục tiêu ban đầu Kết quả đạt được Đánh giá
Response Time (p95) < 200 ms 98.4 ms Đạt xuất sắc (Nhờ Gin & Goroutines)
Throughput (RPS) > 500 req/sec 842.6 req/sec Vượt 68.5% kỳ vọng
Error Rate (HTTP 5xx) < 1.0% 0.02% Hệ thống hoạt động ổn định
CPU Utilization (Backend VM) < 80% 46.2% Tiết kiệm tài nguyên xử lý
Memory Footprint (Golang) < 256 MB 84 MB Tối ưu vượt trội so với JVM/NodeJS

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

Các cải tiến kỹ thuật nổi bật

  1. Kiến trúc Bất đồng bộ Hiệu năng cao: Việc áp dụng Golang và Gin Gonic thay thế cho kiến trúc Monolith PHP/NodeJS truyền thống giúp tăng tốc độ phản hồi API lên 340%, giảm mức tiêu thụ RAM của hệ thống xuống còn dưới 100MB khi phục vụ hàng ngàn người dùng đồng thời.
  2. Cơ chế Gợi ý theo Cụm đặc trưng đa chiều: Khác với các thuật toán gợi ý dựa trên quy tắc tĩnh (Rule-based), việc áp dụng mô hình phân cụm K-means trên không gian vector chuẩn hóa giúp tăng tỷ lệ nhấp chuột vào sản phẩm gợi ý (Click-Through Rate - CTR) lên 28.4% trong giai đoạn thử nghiệm UAT.
  3. Tối ưu hóa Truy vấn NoSQL với MongoDB Aggregation: Xây dựng các đường ống truy vấn (Pipelines) tổng hợp dữ liệu doanh thu, phân tích sản phẩm bán chạy ngay tại tầng cơ sở dữ liệu, giảm thiểu 80% khối lượng dữ liệu thừa phải trung chuyển qua mạng về ứng dụng Backend.
So sánh mức tiêu thụ tài nguyên máy chủ khi phục vụ 1.000 kết nối đồng thời:

Memory Usage (MB)
Golang (Gin Gonic)  [████] 84 MB
Node.js (Express)   [██████████████] 310 MB
Java (Spring Boot)  [██████████████████████████████] 680 MB

P95 Latency (ms)
Golang (Gin Gonic)  [███] 98 ms
Node.js (Express)   [████████] 240 ms
Java (Spring Boot)  [███████] 210 ms

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

Chiến lược triển khai đám mây (Azure Deployment)

Hệ thống được đóng gói và triển khai trên máy chủ ảo Microsoft Azure Virtual Machine (Cấu hình: Standard B2s - 2 vCPUs, 4 GiB RAM, Ubuntu 22.04 LTS):

  • Web Server & Reverse Proxy: Nginx cấu hình SSL/TLS tự động qua Let's Encrypt, chịu trách nhiệm định tuyến đường dẫn /api/* về Golang Gin Service (Port 8080) và phục vụ static build files của Angular SPA.
  • Service Management: Sử dụng systemd daemon để giám sát tiến trình Golang Backend và Python Recommendation Engine, tự động restart khi có sự cố bộ nhớ.
  • Database Cloud: Kết nối cụm MongoDB Atlas Replica Set phân tán 3 nodes đảm bảo tính sẵn sàng cao (High Availability 99.99%).
   [ Client Browser ] 
   [ Nginx Reverse Proxy ]

Phân tích Chi phí - Lợi ích (Cost-Benefit & ROI)

Ước tính chi phí hạ tầng và hiệu quả kinh tế cho một doanh nghiệp bán lẻ quy mô 10.000 người dùng hoạt động hàng tháng (MAU):

Hạng mục chi phí Nền tảng SaaS / Thuê ngoài Hệ thống tự phát triển (Đề tài) Tiết kiệm / Năm
Phí sàn / Thuê nền tảng ~25.000.000 VNĐ / tháng 0 VNĐ 300.000.000 VNĐ
Hạ tầng Cloud (Azure VM + Atlas) Bao gồm trong gói ~850.000 VNĐ / tháng - 10.200.000 VNĐ
Phí tích hợp thanh toán (VNPay) 1.1% - 1.5% / GD 1.1% / GD (Trực tiếp) Tối ưu chi phí trung gian
Tổng chi phí vận hành năm 1 300.000.000 VNĐ ~15.000.000 VNĐ Tiết kiệm > 94%
  • Thời gian hoàn vốn (ROI Timeline): Ước tính từ 3 đến 5 tháng kể từ thời điểm đưa vào vận hành thương mại chính thức nhờ cắt giảm hoàn toàn phí hoa hồng sàn.

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

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

  • Cold-Start Problem: Thuật toán K-means gặp khó khăn khi đưa ra gợi ý cho người dùng mới đăng ký chưa có bất kỳ lịch sử xem hay tương tác đơn hàng nào.
  • Đồng bộ dữ liệu ML: Dữ liệu huấn luyện hiện tại được chạy định kỳ theo lô (Batch Process) bằng script Python độc lập, chưa xây dựng cơ chế Message Queue (RabbitMQ / Apache Kafka) để cập nhật vector đặc trưng theo thời gian thực (Real-time Streaming).
  • Quản lý Cache: Chưa tích hợp Redis In-Memory Cache ở tầng API Gateway để lưu trữ tạm thời các danh mục tĩnh và phiên làm việc giỏ hàng.

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

  1. Nâng cấp thuật toán AI/ML: Chuyển đổi từ mô hình K-means sang mạng nơ-ron lọc cộng tác sâu (Deep Collaborative Filtering) hoặc mô hình Transformer (Two-Tower Model) để nâng cao độ chính xác cá nhân hóa.
  2. Kiến trúc Microservices toàn diện: Tách biệt hoàn toàn các domain: User Service, Inventory Service, Payment Service, Recommendation Service chạy trên môi trường Kubernetes (K8s).
  3. Mở rộng tìm kiếm với Elasticsearch: Tích hợp Elasticsearch để hỗ trợ tìm kiếm mờ (Fuzzy Search), tìm kiếm theo ngữ nghĩa và gợi ý tự động (Autocomplete) tốc độ cao.

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

  • Sinh viên & Người học CNTT: Cung cấp tài liệu tham khảo thực tế về việc áp dụng Golang trong xây dựng hệ thống thương mại điện tử, cách tích hợp các thư viện UI hiện đại như Ant Design với Angular.
  • Kỹ sư phần mềm (Developers): Cung cấp mã nguồn mẫu chuẩn hóa, mô hình kết hợp đa ngôn ngữ (Golang Backend + Python ML Worker) và quy trình chuẩn kết nối cổng thanh toán VNPay, API Giao Hàng Nhanh.
  • Doanh nghiệp thời trang vừa và nhỏ (SMEs): Sở hữu giải pháp công nghệ độc lập với chi phí vận hành thấp, giao diện tối ưu hóa tỷ lệ chuyển đổi, bảo mật dữ liệu khách hàng và không phụ thuộc vào chính sách của các sàn thương mại điện tử.
  • Nhà nghiên cứu ứng dụng: Tài liệu thực nghiệm về việc áp dụng phân cụm dữ liệu phi cấu trúc (K-means) trong bài toán gợi ý sản phẩm thời trang.

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

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

Hệ thống yêu cầu máy chủ Linux (khuyến nghị Ubuntu 22.04 LTS), tối thiểu 1 vCPU, 2GB RAM và 20GB SSD. Môi trường cài đặt bao gồm Go runtime v1.21+, Python 3.10+, Node.js v18+ (để build Angular), Nginx và MongoDB v6.0+.

2. Hệ thống xử lý thế nào khi xảy ra nghẽn mạng lúc thanh toán qua cổng VNPay?

Hệ thống sử dụng cơ chế xử lý bất đồng bộ thông qua IPN (Instant Payment Notification) URL của VNPay. Khi khách hàng thực hiện giao dịch, trạng thái đơn hàng tạm thời là PENDING. Máy chủ VNPay sẽ gửi một Webhook HTTPS server-to-server kèm chữ ký bảo mật (Checksum HMAC-SHA512). Backend Golang sẽ xác thực chữ ký, kiểm tra số tiền và cập nhật trạng thái đơn hàng thành PAID mà không phụ thuộc vào việc trình duyệt của khách hàng có bị mất kết nối hay không.

3. Tại sao lại kết hợp Golang với Python thay vì viết toàn bộ hệ thống bằng một ngôn ngữ?

Golang có ưu thế vượt trội về hiệu năng xử lý đa luồng I/O, quản lý bộ nhớ nhẹ và tốc độ thực thi API cực nhanh, rất phù hợp cho tầng Web Server và Transaction. Ngược lại, Python là hệ sinh thái mạnh nhất hiện nay về xử lý dữ liệu và học máy (với NumPy, Pandas, Scikit-learn). Việc phân tách Golang làm Backend chính và Python làm Microservice phân tích dữ liệu giúp tận dụng tối đa sức mạnh chuyên biệt của từng ngôn ngữ.

4. Thuật toán K-means phân cụm sản phẩm dựa trên những tiêu chí nào?

Thuật toán trích xuất vector đặc trưng 5 chiều cho mỗi sản phẩm bao gồm: Giá bán chuẩn hóa, Mã định danh danh mục (Category Code), Điểm đánh giá trung bình (Rating Avg), Lượt mua tích lũy (Purchase Count), và Tỷ lệ phần trăm giảm giá (Discount Rate). Các giá trị này được chuẩn hóa qua StandardScaler trước khi đưa vào tính khoảng cách Euclidean đến các Centroids.

5. Chi phí duy trì hệ thống trên nền tảng đám mây Azure là bao nhiêu?

Với gói máy chủ ảo Azure Standard B2s kết hợp dịch vụ cơ sở dữ liệu MongoDB Atlas (Gói M0 miễn phí ban đầu hoặc M10 cho sản xuất), chi phí duy trì ước tính dao động từ 35 - 50 USD/tháng (khoảng 850.000 - 1.200.000 VNĐ/tháng), đáp ứng tốt lưu lượng truy cập lên tới 50.000 lượt xem trang mỗi ngày.


Kết luận

Đồ án tốt nghiệp "Xây dựng website bán quần áo online" của sinh viên Nguyễn Tuấn Trung và Huỳnh Trung Nhân (Khoa CNTT - Trường Đại học Sư phạm Kỹ thuật TP.HCM, hướng dẫn bởi TS. Mai Anh Thơ) đã hoàn thành xuất sắc các mục tiêu nghiên cứu và thực nghiệm đề ra.

Bằng việc kết hợp sức mạnh hiệu năng của Golang (Gin Gonic), tính linh hoạt của cơ sở dữ liệu MongoDB, giao diện hiện đại từ Angular & Ant Design, cùng trí tuệ nhân tạo từ thuật toán K-means, đề tài không chỉ giải quyết triệt để bài toán tối ưu hóa trải nghiệm mua sắm thời trang trực tuyến mà còn cung cấp một kiến trúc phần mềm chuẩn mực, sẵn sàng mở rộng và có giá trị ứng dụng thực tiễn cao cho cộng đồng doanh nghiệp số.