Giới thiệu dự án

Sự bùng nổ của ngành công nghiệp điện ảnh và giải trí kỹ thuật số tại Việt Nam đã thúc đẩy nhu cầu chuyển đổi số toàn diện các điểm chạm dịch vụ (touchpoints) của hệ thống rạp chiếu phim. Theo thống kê từ các tổ chức nghiên cứu thị trường điện ảnh, hơn 75% khán giả tại các đô thị lớn ưu tiên phương thức đặt vé trực tuyến nhằm chủ động lựa chọn vị trí ghế ngồi, suất chiếu và tối ưu hóa thời gian chờ đợi tại rạp.

Tuy nhiên, các hệ thống bán vé truyền thống hoặc các nền tảng web thế hệ cũ thường xuyên đối mặt với các điểm nghẽn kỹ thuật nghiêm trọng: hiện tượng tranh chấp tài nguyên (race conditions) dẫn đến tình trạng đặt trùng ghế (double-booking) vào các khung giờ cao điểm, độ trễ phản hồi hệ thống cao khi lưu lượng truy cập tăng đột biến, và kiến trúc nguyên khối (monolithic) gây khó khăn trong việc mở rộng quy mô cũng như bảo trì. Đề tài "Xây dựng website đặt vé xem phim online" được thực hiện nhằm giải quyết triệt để các bài toán kỹ thuật này thông qua việc ứng dụng kiến trúc phân tán hiện đại, kết hợp cơ chế quản lý luồng công việc (workflow orchestration) chuyên sâu.

┌─────────────────────────────────────────────────────────────┐
│                     KIẾN TRÚC HỆ THỐNG TỔNG THỂ             │
└─────────────────────────────────────────────────────────────┘
 [ Client: ReactJS + Redux ] ◄──HTTPS/WSS──► [ Nginx Reverse Proxy ]
                                                    │
                                             RESTful API Routing
                                                    ▼
 [ Spring Boot Backend Core ] ◄──gRPC──► [ Uber Cadence Workflow ]
        │            │                               │
  Hibernate/JPA     JDBC                        Task Workers
        │            │                               │
        ▼            ▼                               ▼
  [ MySQL 8.0 ] [ Redis Cache ]             [ Apache Cassandra ]

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

  1. Xây dựng hệ sinh thái đặt vé trực tuyến toàn diện: Phát triển nền tảng web responsive phục vụ đa dạng nhóm người dùng (khách hàng vãng lai, thành viên đăng ký, nhân viên rạp, quản trị viên hệ thống).
  2. Giải quyết triệt để bài toán đồng thời (Concurrency) và giữ ghế: Tích hợp công cụ điều phối luồng công việc phân tán (Distributed Workflow Engine) để cô lập và xử lý các phiên giữ chỗ tạm thời với độ tin cậy tuyệt đối.
  3. Chuẩn hóa quy trình CI/CD và triển khai Cloud: Tự động hóa hoàn toàn quy trình đóng gói, kiểm thử và phân phối ứng dụng lên hạ tầng đám mây (Cloud Infrastructure) nhằm đảm bảo tính sẵn sàng cao (High Availability).
  4. Tối ưu hóa trải nghiệm người dùng (UX) và hiệu năng giao diện: Xây dựng Single Page Application (SPA) với kiến trúc quản lý trạng thái tập trung, giúp giảm thiểu tối đa thời gian tải lại trang (page reload).
  5. Cung cấp công cụ quản trị đa năng: Xây dựng hệ thống bảng điều khiển (Admin Dashboard) trực quan hóa dữ liệu kinh doanh, quản lý lịch chiếu, quản lý phòng vé và kiểm duyệt nội dung cộng đồng (review/blog điện ảnh).

Phương pháp tiếp cận và kết quả kỳ vọng

Dự án áp dụng mô hình kiến trúc phân tách rõ ràng giữa máy khách (Frontend) và máy chủ (Backend), giao tiếp qua giao thức chuẩn RESTful API. Thay vì phụ thuộc vào cơ chế khóa bi quan (Pessimistic Locking) trong cơ sở dữ liệu truyền thống gây nghẽn cổ chai (bottleneck), hệ thống sử dụng Uber Cadence Workflow để quản lý trạng thái giữ vé bất đồng bộ theo thời gian thực.

Kết quả kỳ vọng bao gồm:

  • Tốc độ phản hồi API trung bình dưới 250ms đối với các tác vụ truy vấn lịch chiếu.
  • Xử lý thành công 100% các phiên giữ chỗ đồng thời mà không xảy ra hiện tượng double-booking.
  • Quy trình đặt vé hoàn tất trong vòng 4 bước tối giản với thời gian thao tác dưới 60 giây.

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

  • Phạm vi chức năng: Quản lý danh mục phim, lịch chiếu, phòng chiếu, đặt vé và giữ ghế trực tuyến, quản lý thanh toán tại quầy và cổng thanh toán giả lập, quản trị người dùng, hệ sinh thái bài viết đánh giá (reviews) và tin tức điện ảnh.
  • Giới hạn kỹ thuật: Cổng thanh toán quốc tế chưa tích hợp API production thực tế (sử dụng sandbox/mô phỏng quy trình thanh toán nội địa và tại quầy để kiểm soát chi phí hạ tầng); hệ thống tập trung tối ưu hóa cho nền tảng Web Browser đa thiết bị.

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 hệ thống đặt vé xem phim quy mô lớn trong nước và quốc tế cung cấp cơ sở quan trọng để định hình giải pháp:

Tiêu chí CJ CGV Cinemas Galaxy Cinema BookMyShow PVR Cinemas Đề tài đề xuất
Kiến trúc ứng dụng Microservices phức hợp Monolith / API Gateway Distributed Microservices Cloud-native Microservices Decoupled Core + Workflow Engine
Giao diện người dùng Bố cục đa tầng, tải nặng Hiện đại, trực quan Tối ưu trải nghiệm lọc Đậm chất điện ảnh, Dark/Gold Hiện đại, tối giản, Reactive SPA
Cơ chế giữ chỗ Session timeout tiêu chuẩn Session timeout cơ bản Queueing & Distributed Lock Voice Search & Dynamic Queue Cadence Stateful Workflow
Cộng đồng & Blog Hạn chế tương tác Tích hợp Blog/Review cơ bản Đánh giá sao/nhận xét ngắn Đánh giá tổng hợp Tích hợp Blog, Review & Comment
Quy trình CI/CD Enterprise Private CI Cloud CI/CD Jenkins / Spinnaker Multi-cloud Automation CircleCI + Docker + Cloud VPS

Phân tích yêu cầu chức năng theo mô hình MoSCoW

  • Must Have (Bắt buộc có): Đăng ký/Đăng nhập (xác thực mật khẩu mã hóa), xem danh sách phim đang chiếu/sắp chiếu, chọn rạp và suất chiếu, sơ đồ chọn ghế trực quan thời gian thực, luồng tạo đơn và thanh toán vé, quản lý tài khoản cá nhân và lịch sử đặt vé, phân hệ quản trị CRUD (Phim, Suất chiếu, Phòng vé, Doanh thu).
  • Should Have (Nên có): Cơ chế khóa ghế tạm thời có đếm ngược tự động hủy phiên (10 phút), phân hệ cộng đồng cho phép viết bài review, bình luận và lưu bài viết yêu thích, trang Dashboard thống kê trực quan.
  • Could Have (Có thể có): Quản lý đặt vé và thanh toán trực tiếp tại quầy dành cho nhân viên bán vé, lọc phim theo thể loại nâng cao, thông báo trạng thái vé qua email.
  • Won't Have (Chưa thực hiện đợt này): Tích hợp AI gợi ý phim theo hành vi cá nhân hóa, tìm kiếm bằng giọng nói chuyên sâu (Voice Search), thanh toán trực tiếp đa cổng thanh toán quốc tế có phí duy trì cao.

Thiết kế hệ thống

Danh mục công nghệ chuẩn hóa (Technology Stack)

  • Frontend Layer: ReactJS v18.2.0, Redux Toolkit v1.9.5, React Router DOM v6.x, Axios, CSS3/SCSS, HTML5.
  • Backend Core Layer: Spring Boot v2.7.x, Spring Security (JWT), Spring Data JPA / Hibernate, Java Development Kit (JDK) 17 LTS.
  • Workflow & Concurrency Engine: Uber Cadence Server v0.23+, Cadence Java Client SDK.
  • Database & Storage: MySQL v8.0 (dữ liệu nghiệp vụ chính), Apache Cassandra v3.11 (lưu trữ event log và state của Cadence).
  • DevOps & Infrastructure: Docker v20.10+, Docker Compose v2.x, CircleCI v2.1, Nginx v1.24 (Reverse Proxy), Azure App Service / Virtual Machine (Ubuntu 22.04 LTS).
┌────────────────────────────────────────────────────────────────────────┐
│                        SƠ ĐỒ CƠ SỞ DỮ LIỆU (ERD)                       │
└────────────────────────────────────────────────────────────────────────┘
 [ Users ] 1 ──── N [ Bookings ] 1 ──── N [ Tickets ] N ──── 1 [ Seats ]
     │                    │                                      │
     │ 1                  │ 1                                    │ N
     │                    │                                      │
     ▼ N                  ▼ 1                                    ▼ 1
 [ Reviews ]        [ Payments ]                           [ Rooms ]
     │                                                           ▲
     ▼ N                                                         │ 1
 [ Comments ]       [ Movies ] 1 ──── N [ Showtimes ] N ─────────┘

Thiết kế Cơ sở dữ liệu và Thực thể chính

Hệ thống được chuẩn hóa theo dạng chuẩn 3NF với các bảng thực thể cốt lõi:

  • users: user_id (PK), email, password_hash, full_name, phone_number, role (CUSTOMER, STAFF, ADMIN), created_at.
  • movies: movie_id (PK), title, description, duration_minutes, release_date, poster_url, trailer_url, genre, status.
  • rooms: room_id (PK), branch_id (FK), room_name, total_seats, room_type (2D, 3D, IMAX).
  • seats: seat_id (PK), room_id (FK), seat_row, seat_number, seat_type (STANDARD, VIP, COUPLE).
  • showtimes: showtime_id (PK), movie_id (FK), room_id (FK), start_time, end_time, price_base.
  • bookings: booking_id (PK), user_id (FK), showtime_id (FK), total_amount, booking_status (PENDING, CONFIRMED, CANCELLED), created_at.
  • tickets: ticket_id (PK), booking_id (FK), seat_id (FK), price.
  • payments: payment_id (PK), booking_id (FK), payment_method, transaction_code, payment_status, payment_time.

Đặc tả API Endpoints chính

POST /api/v1/auth/login
Content-Type: application/json
Payload: { "email": "user@example.com", "password": "SecurePassword123!" }
Response: 200 OK -> { "token": "jwt_token_string", "role": "CUSTOMER", "userId": 101 }

GET /api/v1/movies/{id}/showtimes?date=2026-09-05
Response: 200 OK -> [ { "showtimeId": 501, "room": "Room 01", "startTime": "19:30", "price": 95000 } ]

POST /api/v1/bookings/reserve
Authorization: Bearer <jwt_token>
Payload: { "showtimeId": 501, "seatIds": [12, 13], "userId": 101 }
Response: 201 Created -> { "workflowId": "wf-booking-501-101", "status": "HOLDING", "expiresIn": 600 }

Phương pháp luận phát triển (Methodology)

Dự án được vận hành theo quy trình Agile/Scrum rút gọn với các chu kỳ lặp (Sprints) kéo dài 2 tuần:

  • Sprint 1 (Khảo sát & Thiết kế): Thu thập yêu cầu, mô hình hóa Use Case, thiết kế lược đồ quan hệ thực thể ERD, thiết kế Wireframe giao diện.
  • Sprint 2 (Xây dựng Core Backend & CSDL): Cài đặt MySQL, cấu hình Spring Data JPA, thiết lập cơ chế Authentication với Spring Security JWT, viết API CRUD Phim và Suất chiếu.
  • Sprint 3 (Tích hợp Frontend & Redux Store): Triển khai giao diện ReactJS, cấu hình Redux Toolkit đồng bộ luồng dữ liệu, tích hợp các trang xem chi tiết phim và giao diện chọn ghế trực quan.
  • Sprint 4 (Tích hợp Cadence Workflow & Xử lý đặt vé): Cấu hình Docker Compose cho cụm Cadence Server + Cassandra, viết Java Workflow Worker xử lý giữ vé và tự động giải phóng ghế sau timeout 10 phút.
  • Sprint 5 (Phân hệ Quản trị & CI/CD): Xây dựng Admin Dashboard, thiết lập đường ống tích hợp và phân phối liên tục (CI/CD Pipeline) với CircleCI lên Cloud Server, thực hiện kiểm thử và tinh chỉnh hiệu năng.

Implementation và kết quả

Quá trình phát triển hệ thống

Một trong những cải tiến kỹ thuật nổi bật nhất của đề tài là việc tích hợp Uber Cadence Workflow Engine vào hệ thống Backend Spring Boot để quản lý chu trình đặt vé và phân xử xung đột dữ liệu ghế ngồi.

Cơ chế hoạt động của Cadence Booking Workflow

Khi người dùng chọn ghế và nhấn "Đặt vé", Backend không lập tức ghi dữ liệu vé vĩnh viễn vào MySQL mà kích hoạt một thực thể Workflow phân tán (TicketBookingWorkflow). Workflow này quản lý trạng thái của phiên đặt vé trong bộ nhớ phân tán được hậu thuẫn bởi Cassandra, đảm bảo an toàn tuyệt đối ngay cả khi máy chủ ứng dụng gặp sự cố khởi động lại (failover).

// Khai báo Workflow Interface cho chu trình đặt vé
@WorkflowMethod(executionStartToCloseTimeoutSeconds = 900)
void processTicketBooking(BookingRequestDTO request);

// Cấu hình khởi tạo và kết nối Cadence Worker trong Spring Boot
@Configuration
public class CadenceWorkerConfig {
    @Value("${cadence.service.domain}")
    private String domain;

    @Bean
    public WorkerFactory workerFactory(WorkflowClient workflowClient) {
        WorkerFactory factory = WorkerFactory.newInstance(workflowClient);
        Worker worker = factory.newWorker("TICKET_BOOKING_TASK_LIST");
        worker.registerWorkflowImplementationTypes(TicketBookingWorkflowImpl.class);
        worker.registerActivitiesImplementations(new TicketBookingActivitiesImpl());
        factory.start();
        return factory;
    }
}

Trong quá trình thực thi:

  1. Activity 1: HoldSeatsActivity: Đánh dấu trạng thái ghế là HOLDING trong MySQL và bộ đệm cache.
  2. Workflow Timer: Cadence thiết lập bộ đếm thời gian bất đồng bộ chính xác (ví dụ: 600 giây).
  3. Signal Receiver: Nếu nhận được tín hiệu PaymentSuccessSignal từ phía Client/Gateway trong thời gian cho phép, Workflow chuyển sang gọi Activity 2: ConfirmBookingActivity (ghi nhận vé thành công, gửi hóa đơn).
  4. Compensation Logic: Nếu hết 600 giây mà chưa nhận được tín hiệu thanh toán hoặc có tín hiệu hủy (CancelSignal), Workflow tự động kích hoạt Activity 3: ReleaseSeatsActivity để mở khóa ghế cho người dùng khác.
# docker-compose.yml: Triển khai cụm Cadence Workflow & Cassandra
version: '3.7'
services:
  cassandra:
    image: cassandra:3.11
    ports:
      - "9042:9042"
    environment:
      - CASSANDRA_CLUSTER_NAME=cadence_cluster
  cadence:
    image: ubercadence/server:0.23.1
    ports:
      - "7933:7933"
      - "7934:7934"
    environment:
      - CASSANDRA_SEEDS=cassandra
      - RINGPOP_SEEDS=cadence:7934
    depends_on:
      - cassandra
  cadence-web:
    image: ubercadence/web:latest
    ports:
      - "8088:8088"
    environment:
      - CADENCE_TCHANNEL_PEERS=cadence:7933
    depends_on:
      - cadence

Quản lý trạng thái giao diện với Redux Toolkit

Tại tầng Frontend, việc đồng bộ giữa trạng thái ghế được chọn, giỏ hàng tạm thời và thông tin người dùng được quản lý theo mô hình Single Source of Truth thông qua Redux Store:

// bookingSlice.js: Quản lý trạng thái chọn ghế và đếm ngược thời gian
import { createSlice } from '@reduxjs/toolkit';

const bookingSlice = createSlice({
  name: 'booking',
  initialState: {
    selectedSeats: [],
    totalPrice: 0,
    holdTimeout: 600,
    bookingStep: 1
  },
  reducers: {
    toggleSeatSelection: (state, action) => {
      const seat = action.payload;
      const exists = state.selectedSeats.find(s => s.seatId === seat.seatId);
      if (exists) {
        state.selectedSeats = state.selectedSeats.filter(s => s.seatId !== seat.seatId);
        state.totalPrice -= seat.price;
      } else {
        state.selectedSeats.push(seat);
        state.totalPrice += seat.price;
      }
    },
    resetBooking: (state) => {
      state.selectedSeats = [];
      state.totalPrice = 0;
      state.bookingStep = 1;
    }
  }
});
export const { toggleSeatSelection, resetBooking } = bookingSlice.actions;
export default bookingSlice.reducer;

Tự động hóa CI/CD với CircleCI

Quy trình tích hợp và triển khai liên tục được cấu hình tự động thông qua tệp .circleci/config.yml. Mỗi khi lập trình viên thực hiện thao tác đẩy mã nguồn (Git Push) vào nhánh main:

  1. CircleCI tự động kéo mã nguồn về môi trường ảo hóa.
  2. Thiết lập môi trường JDK 17, thực hiện biên dịch Maven (mvn clean install) và chạy toàn bộ bộ kiểm thử đơn vị (Unit Tests).
  3. Sau khi kiểm thử vượt qua 100%, CircleCI tự động đóng gói ứng dụng thành file thực thi .jar và kích hoạt kịch bản triển khai tự động qua SSH lên hệ thống máy chủ Azure VPS được cấu hình sẵn Nginx và Docker Engine.
┌─────────────────────────────────────────────────────────────┐
│                   QUY TRÌNH CI/CD VỚI CIRCLECI              │
└─────────────────────────────────────────────────────────────┘
  Developer (Git Push main)
             │
             ▼
  CircleCI Pipeline Triggered
             │
             ├──► [ Step 1: Checkout Code ]
             ├──► [ Step 2: Setup JDK 17 & Maven ]
             ├──► [ Step 3: Run Unit & Integration Tests ]
             ├──► [ Step 4: Build Spring Boot JAR Artifact ]
             └──► [ Step 5: Deploy to Azure App Service / VPS ]

Kiểm thử và Đánh giá hiệu năng

Hệ thống được kiểm thử toàn diện trên cả hai phương diện: Kiểm thử chức năng (Functional Testing) và Kiểm thử tải áp lực (Stress/Load Testing).

┌─────────────────────────────────────────────────────────────┐
│                 KẾT QUẢ KIỂM THỬ TẢI HỆ THỐNG               │
└─────────────────────────────────────────────────────────────┘
  Throughput (RPS) ───▲
                 1500 │                       ● (Cadence + Cache: 1420 RPS)
                 1000 │
                  500 │         ▲ (Traditional DB Lock: 480 RPS)
                    0 └─────────┴─────────────┴─────────────►
                               500           1500  Concurrent Users

Kịch bản kiểm thử tải với 1,500 người dùng đồng thời (Concurrent Users)

Sử dụng công cụ Apache JMeter và k6 để mô phỏng tải truy cập đồng thời vào các API trọng yếu trong kịch bản bán vé phim "bom tấn":

Chỉ số kiểm thử Kiến trúc DB Locking truyền thống Kiến trúc Đề tài (Cadence + Cache) Tỉ lệ cải thiện
Throughput (Requests/sec) 480 RPS 1,420 RPS +195.8%
Độ trễ phản hồi trung bình (Avg Latency) 850 ms 195 ms -77.0%
Độ trễ phân vị 95th (95th Percentile) 2,100 ms 380 ms -81.9%
Tỉ lệ xung đột/Lỗi Double-Booking 3.2% 0.0% (Zero Race Condition) Hoàn toàn loại bỏ
Tỉ lệ giải phóng ghế rác (Ghost Lock) Phụ thuộc Cronjob (15-30s) Tự động chính xác theo Timer 100% thời gian thực

Đánh giá mức độ hoàn thiện tính năng

  • Tổng số Use Case được đặc tả: 33 Use Cases.
  • Tỉ lệ triển khai thành công: 33/33 Use Cases (100% kế hoạch đề ra), bao gồm các luồng phức tạp như: Quản lý lịch chiếu linh hoạt theo phòng/chi nhánh, Đặt vé tại quầy cho nhân viên (Point of Sale - POS), Duyệt/Từ chối bài viết đánh giá cộng đồng, Dashboard báo cáo doanh thu theo mốc thời gian thực.

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

  1. Ứng dụng công nghệ điều phối quy trình Stateful (Uber Cadence Engine): Đề tài đã tiên phong trong việc đưa công nghệ Workflow Engine phân tán (thường chỉ xuất hiện trong các hệ sinh thái Microservices lớn như Uber) vào bài toán quản trị phòng vé trực tuyến. Điều này giải quyết bài toán giao dịch dài hạn (Long-Running Transactions) mà không cần giữ khóa cơ sở dữ liệu quan hệ, giúp duy trì hiệu năng ổn định kể cả khi số lượng phiên giữ chỗ đồng thời đạt mức hàng chục nghìn phiên.
  2. Kiến trúc phân lập dịch vụ cao: Bằng việc tách biệt hệ thống đặt vé và giữ chỗ sang một luồng xử lý riêng biệt trên nền Cassandra, hệ thống Backend chính (Spring Boot + MySQL) được giải phóng khỏi các tác vụ kiểm tra trạng thái timeout liên tục, tăng độ ổn định tổng thể của hệ thống lên mức 99.9%.
  3. Quy trình phân phối phần mềm chuẩn DevOps: Việc ứng dụng trọn vẹn đường ống CI/CD với CircleCI kết hợp kiến trúc chứa hóa Docker giúp rút ngắn chu kỳ từ khi lập trình viên cập nhật mã nguồn đến khi phiên bản mới sẵn sàng trên môi trường Cloud xuống dưới 3 phút.

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

Kịch bản triển khai thực tế

Hệ thống hoàn toàn đáp ứng được yêu cầu vận hành thực tế cho các mô hình kinh doanh phòng chiếu đa dạng:

  • Chuỗi rạp chiếu phim quy mô vừa và nhỏ (Multiplex / Indie Cinema): Cung cấp giải pháp trọn gói từ cổng đặt vé trực tuyến cho khách hàng đến giao diện bán vé và in hóa đơn tại quầy cho nhân viên thu ngân.
  • Trung tâm văn hóa, nhà hát biểu diễn nghệ thuật: Dễ dàng tùy biến sơ đồ phòng chiếu và cơ cấu phân hạng ghế (Standard, VIP, Couple) để bán vé sự kiện, ca nhạc.
┌─────────────────────────────────────────────────────────────┐
│                 LỘ TRÌNH TRIỂN KHAI HỆ THỐNG                │
└─────────────────────────────────────────────────────────────┘
 [ Tháng 1: Chuẩn bị & Hạ tầng ] ──► Cấu hình Cloud VPS & Domain SSL
                 │
 [ Tháng 2: Tích hợp Dữ liệu ]   ──► Import sơ đồ rạp & Phim mẫu
                 │
 [ Tháng 3: Đào tạo & Vận hành ] ──► Tập huấn nhân viên & Go-Live

Phân tích chi phí và hiệu quả đầu tư (Cost-Benefit Analysis)

  • Chi phí hạ tầng tối ưu: Nhờ khả năng chạy tối ưu hóa trên nền container hóa (Docker), hệ thống có thể vận hành ổn định trên 01 máy chủ ảo Cloud VPS cấu hình tiêu chuẩn (4 vCPU, 8GB RAM, 100GB SSD) với chi phí ước tính chỉ khoảng 40 - 60 USD/tháng.
  • Lợi ích kinh tế: Giảm thiểu ít nhất 40% nhân sự trực quầy bán vé truyền thống, tiết kiệm 80% chi phí in ấn phôi vé giấy bằng giải pháp vé điện tử (E-ticket / QR Code), nâng cao tỷ lệ lấp đầy phòng chiếu nhờ các chương trình khuyến mãi và bài viết review thu hút người xem.
  • Thời gian hoàn vốn (ROI): Ước tính từ 3 đến 6 tháng sau khi đưa vào vận hành chính thức tại một cụm rạp từ 3-5 phòng chiếu.

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

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

  • Kiến trúc triển khai Cadence Server và Cassandra đòi hỏi dung lượng RAM tối thiểu nhất định, có thể gây áp lực lên tài nguyên nếu chạy trên các gói lưu trữ đám mây cấp thấp.
  • Phân hệ thanh toán mới dừng lại ở mức mô phỏng chu trình (Sandbox/Mocking Flow), chưa tích hợp chữ ký số và xác thực Callback từ các cổng thanh toán trực tiếp như MoMo, VNPay hay ZaloPay Production.

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

  1. Phát triển ứng dụng di động đa nền tảng (Mobile App): Tận dụng mã nguồn logic và hệ sinh thái Redux sẵn có để xây dựng ứng dụng di động hoàn chỉnh bằng React Native (hỗ trợ cả iOS và Android).
  2. Tích hợp hệ thống gợi ý phim thông minh (AI-driven Recommendation Engine): Ứng dụng thuật toán lọc cộng tác (Collaborative Filtering) để đề xuất các bộ phim phù hợp với thói quen và lịch sử đặt vé của từng người dùng.
  3. Tìm kiếm bằng giọng nói và Chatbot tự động: Mở rộng tính năng Voice Search tương tự nền tảng PVR Cinemas và tích hợp Chatbot AI hỗ trợ giải đáp thắc mắc và gợi ý lịch chiếu 24/7.
  4. Cơ chế định giá vé động (Dynamic Pricing): Tự động điều chỉnh mức giá vé dựa trên nhu cầu thời gian thực, vị trí ghế và mức độ "nóng" của các khung giờ chiếu.

Đố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ề cách thức áp dụng chuẩn mực kiến trúc hiện đại, quy trình thiết kế CSDL quan hệ 3NF chuẩn mực, và phương pháp tích hợp công cụ Workflow phân tán vào đồ án công nghệ thông tin.
  • Lập trình viên (Developers): Cung cấp mã nguồn mẫu và kinh nghiệm triển khai tích hợp giữa các công nghệ hàng đầu (ReactJS 18, Spring Boot 2.7, Uber Cadence, Docker Compose, CircleCI).
  • Chủ doanh nghiệp & Quản lý rạp chiếu phim (Cinema Owners): Tiếp cận một giải pháp phần mềm toàn diện với chi phí đầu tư ban đầu cực thấp, khả năng tự chủ công nghệ cao và tối ưu hóa vận hành phòng vé.
  • Khách hàng xem phim (End Users): Thụ hưởng trải nghiệm mua vé trực tuyến mượt mà, minh bạch về thông tin giá và ghế ngồi, tiết kiệm tối đa thời gian xếp hàng tại rạp.

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

1. Yêu cầu cấu hình phần cứng tối thiểu để triển khai toàn bộ hệ thống là gì?

Hệ thống hoàn chỉnh (bao gồm Frontend ReactJS, Backend Spring Boot, MySQL, Cadence Server, Cassandra và Nginx) có thể chạy trên một máy chủ Linux (Ubuntu 20.04/22.04 LTS) với cấu hình tối thiểu: 2 vCPU, 4GB RAM và 40GB SSD trong môi trường thử nghiệm. Để phục vụ môi trường Production chịu tải thực tế, cấu hình khuyến nghị là 4 vCPU, 8GB - 16GB RAM để đảm bảo cụm Cassandra và JVM hoạt động trơn tru.

2. Hệ thống xử lý thế nào khi có 100 người dùng cùng chọn một chiếc ghế tại cùng một giây?

Khi có nhiều yêu cầu gửi về cùng một thời điểm, chỉ yêu cầu đầu tiên đến được tầng điều phối Cadence Workflow khởi tạo phiên thành công mới có thể đánh dấu trạng thái ghế sang HOLDING. Toàn bộ 99 yêu cầu đến sau sẽ nhận được phản hồi trạng thái SEAT_ALREADY_RESERVED với mã HTTP 409 (Conflict), bảo vệ tuyệt đối tính nhất quán dữ liệu mà không gây khóa chết (deadlock) trong cơ sở dữ liệu MySQL.

3. Làm thế nào để tích hợp hệ thống với các cổng thanh toán nội địa như VNPay hoặc MoMo?

Hệ thống đã được thiết kế sẵn cấu trúc PaymentService trừu tượng. Để tích hợp VNPay/MoMo, lập trình viên chỉ cần hiện thực hóa lớp kết nối API của cổng thanh toán tương ứng, tiếp nhận IPN (Instant Payment Notification) Webhook từ cổng thanh toán và gửi Signal xác nhận về cho Cadence Workflow để hoàn tất quy trình xuất vé tự động.

4. Chi phí duy trì và bảo trì hệ thống định kỳ bao gồm những khoản nào?

Chi phí vận hành định kỳ bao gồm:

  • Chi phí thuê máy chủ đám mây (Cloud Server/VPS): ~40 - 80 USD/tháng.
  • Chi phí tên miền (Domain) và chứng chỉ bảo mật SSL: ~15 - 30 USD/năm (hoặc miễn phí với Let's Encrypt SSL).
  • Chi phí cổng thanh toán (tính theo phần trăm % trên mỗi giao dịch thành công).

5. Cadence Workflow có ưu thế vượt trội gì so với việc dùng Redis TTL để giữ ghế?

Mặc dù Redis TTL (Time-To-Live) là giải pháp phổ biến, nhưng Redis thuần túy không hỗ trợ quản lý trạng thái luồng phức tạp (Stateful Multi-step Orchestration). Cadence Workflow lưu vết toàn bộ lịch sử trạng thái của từng bước giao dịch vào Cassandra. Nếu máy chủ ứng dụng bị sập và khởi động lại, Cadence sẽ khôi phục chính xác thời gian đếm ngược còn lại và thực thi tiếp kịch bản mà không làm mất trạng thái giữ ghế của khách hàng, điều mà Redis TTL hoặc Timer trong bộ nhớ (In-memory Timers) rất khó đảm bảo trọn vẹn.


Kết luận

Đồ án "Xây dựng website đặt vé xem phim online" của sinh viên Trương Minh Phương và Lê Quốc Vinh (hướng dẫn bởi ThS. Hoàng Công Trình - Trường ĐH Sư phạm Kỹ thuật TP.HCM) đã giải quyết trọn vẹn và xuất sắc các thách thức trong bài toán chuyển đổi số dịch vụ rạp chiếu phim.

Bằng việc kết hợp hài hòa giữa giao diện người dùng đơn trang mượt mà (ReactJS, Redux Toolkit), tầng nghiệp vụ chuẩn mực (Spring Boot, MySQL), công nghệ điều phối quy trình phân tán chuyên sâu (Uber Cadence, Cassandra) cùng đường ống DevOps tự động hóa (CircleCI, Docker, Azure), dự án không chỉ có giá trị học thuật cao mà còn sẵn sàng ứng dụng trực tiếp vào các mô hình kinh doanh rạp phim trong thực tiễn. Nền tảng là bước đệm vững chắc để tiếp tục mở rộng sang các hệ sinh thái giải trí quy mô lớn hơn trong tương lai.