Bối cảnh và vấn đề nghiên cứu

Ngành dịch vụ tại Việt Nam đang duy trì tốc độ tăng trưởng cao, đóng góp tỷ trọng ngày càng lớn vào nền kinh tế và được kỳ vọng sẽ chiếm đến 43% GDP cả nước vào năm 2025. Cùng với sự gia tăng lượng khách du lịch trong nước và quốc tế (đạt 15,5 triệu lượt khách quốc tế vào năm 2018), xu hướng du lịch ngẫu hứng và du lịch phượt ngày càng trở nên phổ biến trong giới trẻ. Hình thức này mang lại tính tự do về thời gian, địa điểm, sự linh hoạt trong lựa chọn phương tiện di chuyển (xe máy, xe đạp, ô tô) cũng như quy mô tổ chức (cá nhân hoặc hội nhóm).

Nhu cầu sử dụng các giải pháp công nghệ phục vụ chuyến đi ngày càng đa dạng. Mặc dù thị trường đã có nhiều sản phẩm trực tuyến như VeXeRe, Booking, Agoda, Trivago, TripAdvisor hay diadiemdulich, phần lớn các nền tảng này tập trung vào dịch vụ đặt phòng, mua vé xe hoặc đánh giá địa điểm tĩnh. Phân khúc ứng dụng hỗ trợ tạo lập lịch trình chuyên biệt, kết nối nhóm phượt và chia sẻ thông tin hành trình thực tế vẫn chưa được khai thác toàn diện. Trên cơ sở đó, đề tài khóa luận "Phát triển ứng dụng hỗ trợ tư vấn & chia sẻ thông tin du lịch cùng nhau" tập trung xây dựng ứng dụng di động PackNGo cùng hệ thống dịch vụ phụ trợ.

Mục tiêu nghiên cứu của đề tài gồm các nội dung cụ thể:

  1. Nghiên cứu khái niệm và mô hình kiến trúc vi dịch vụ (Microservices) theo định hướng kiến trúc hướng sự kiện (Event-Driven Architecture).
  2. Khảo sát và ứng dụng bộ công nghệ xây dựng hệ thống: NodeJS, PostgreSQL, React Native, Redis, RabbitMQ (hoặc Kafka), Docker và Kubernetes.
  3. Xây dựng ứng dụng di động PackNGo với giao diện trực quan, đáp ứng các chức năng: tạo và quản lý chuyến đi theo nhóm, theo dõi vị trí thời gian thực (realtime) của các thành viên trong đoàn khi di chuyển nhằm xử lý sự cố, tra cứu tiện ích dọc đường (quán ăn, tiệm sửa xe, nhà trọ).
  4. Tích hợp nền tảng mạng xã hội nhằm hỗ trợ mời bạn bè tham gia và chia sẻ kinh nghiệm hành trình.

Phạm vi và đối tượng nghiên cứu:

  • Đối tượng nghiên cứu: Công nghệ phát triển, đóng gói và vận hành hệ thống microservices (Docker, Kubernetes Engine, Gitlab CI/CD) cùng kỹ thuật xây dựng ứng dụng di động đa nền tảng (Hybrid Mobile App) với React Native.
  • Đối tượng sử dụng: Người dùng thiết bị di động thông minh có nhu cầu đi du lịch phượt cá nhân hoặc theo đoàn thể.
  • Phạm vi không gian và thời gian: Đề tài thực hiện tại Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin – ĐHQG-HCM, trong khoảng thời gian từ ngày 01/09/2020 đến ngày 28/12/2020.

Cơ sở lý thuyết và phương pháp

Khóa luận thiết lập nền tảng lý thuyết kỹ thuật phần mềm dựa trên các mô hình và công nghệ tiêu chuẩn:

  • Công nghệ ảo hóa Container và Docker: So sánh với kiến trúc máy ảo truyền thống (Virtual Machine - VM), Docker vận hành trên nhân hệ điều hành của máy chủ (Host OS) và ứng dụng cơ chế hệ thống tệp cắt lớp (Layer File System). Cách tiếp cận này giúp tối ưu hóa việc cấp phát RAM, giảm thời gian khởi động từ mức phút xuống mức giây và giảm bớt dung lượng đĩa cứng chiếm dụng nhờ việc tái sử dụng các image chỉ đọc (read-only) và writable-layer.
  • Công nghệ điều phối Container (Kubernetes): Sử dụng để quản lý tự động vòng đời container, loại bỏ thời gian chết (downtime), tự khởi động lại hoặc thay thế các container không vượt qua cấu hình kiểm tra tình trạng (health check). Kiến trúc phân tầng gồm Kubernetes Master (API Server kube-apiserver, etcd, kube-scheduler, kube-controller-manager, cloud-controller-manager), Worker Nodes (kubelet, kube-proxy) cùng các Addons (DNS Server, Web UI Dashboard, Container Resource Monitoring).
  • Quy trình Tích hợp và Triển khai liên tục (CI/CD): Ứng dụng Gitlab CI/CD và Gitlab Runner với Kubernetes executor để tự động hóa kiểm thử mã nguồn, đóng gói bản build và triển khai trực tiếp lên cluster.
  • Ngôn ngữ và Framework: NodeJS với cơ chế non-blocking I/O hướng sự kiện kết hợp Express Framework để xây dựng hệ thống RESTful API; cơ chế xác thực người dùng dựa trên PassportJS và giao thức OAuth 2.0.
  • Ứng dụng di động React Native: Vận hành mô hình luồng kép độc lập gồm Main Thread (xử lý giao diện người dùng - UI) và JS Thread (thực thi logic JavaScript), kết nối với nhau thông qua Bridge (cầu nối trao đổi dữ liệu).
  • Hệ quản trị cơ sở dữ liệu: PostgreSQL lưu trữ dữ liệu quan hệ đối tượng kết hợp Redis phục vụ cơ chế bộ nhớ đệm (caching) để giảm tải truy vấn đọc.

Phương pháp nghiên cứu kết hợp giữa nghiên cứu lý thuyết nền tảng, khảo sát nghiệp vụ thực tế của cộng đồng du lịch phượt, phân tích so sánh các sản phẩm cùng loại trên thị trường, mô hình hóa nghiệp vụ bằng UML và thực nghiệm triển khai hệ thống phần mềm. Nguồn dữ liệu thống kê bối cảnh được thu thập từ Cổng thông tin của Tổng cục Du lịch Việt Nam (vietnamtourism.gov.vn).

Thiết kế và triển khai

Hệ thống được thiết kế theo mô hình kiến trúc vi dịch vụ (Microservices) nhằm phân tách trách nhiệm logic, cho phép mở rộng độc lập và vận hành linh hoạt.

Thành phần / Dịch vụ Công nghệ sử dụng Vai trò chức năng chính
PackNGo Mobile App React Native, Redux, Redux-Saga Giao diện tương tác người dùng đa nền tảng (iOS/Android).
PackNGo Core API NodeJS, Express, PassportJS Xử lý logic nghiệp vụ chính, tài khoản và quản lý chuyến đi.
PackNGo Image API NodeJS, Express Tiếp nhận, xử lý và quản lý tệp tin đa phương tiện/hình ảnh.
Cơ sở dữ liệu chính PostgreSQL Lưu trữ dữ liệu cấu trúc về người dùng, chuyến đi, bài đánh giá.
Bộ nhớ đệm (Cache) Redis Tăng tốc độ phản hồi truy vấn đọc, giảm tải cho PostgreSQL.
Lưu trữ đám mây Google Cloud Storage Lưu trữ phân tán các tệp hình ảnh và video người dùng tải lên.
Định vị & Bản đồ Google Maps API / SDK Hiển thị tọa độ di chuyển, chỉ đường và theo dõi vị trí realtime.
Tích hợp xã hội Facebook SDK Đăng nhập liên kết và chia sẻ thông tin lên mạng xã hội.
Tự động hóa CI/CD Gitlab CI/CD, Gitlab Runner Thực thi pipeline kiểm thử và điều phối triển khai container.

Kiến trúc dữ liệu phân tích qua sơ đồ lớp (Class Diagram) bao gồm các thực thể:

  • User: Lưu trữ mã định danh id, username, password, display_name, phone_number, avatar_url, danh sách bạn bè friend_ids, yêu cầu kết bạn friend_request_ids.
  • Trip: Lưu trữ owner_id, danh sách thành viên tham gia partner_ids, mốc thời gian start_date, end_date, địa điểm xuất phát và kết thúc thuộc cấu trúc Area.
  • Area: Lưu trữ tên name, danh mục phân loại category và tọa độ mốc base.
  • Review và Comment: Lưu trữ nội dung chia sẻ trải nghiệm title, content, danh sách ảnh image_urls và các phản hồi lồng nhau replies.

Quy trình tích hợp và triển khai tự động (CI/CD) áp dụng phân nhánh mã nguồn 3 cấp:

  1. Nhánh uat: Môi trường kiểm thử chấp nhận người dùng (User Acceptance Testing) dành cho bộ phận kiểm thử (tester).
  2. Nhánh develop: Môi trường phát triển và tổng hợp mã nguồn từ các lập trình viên.
  3. Nhánh master: Môi trường phát hành chính thức (Production).

Quá trình triển khai hạ tầng được cấu hình trên nền tảng Google Cloud Platform (GCP) sử dụng dịch vụ Google Kubernetes Engine (GKE). Các công cụ phục vụ quản trị và triển khai bao gồm gcloud sdk, kubectl, Dockerfile đóng gói image chuyển giao lên Google Cloud Registry (GCR), cùng công cụ giám sát dòng lệnh k9s để theo dõi trạng thái các Pods và Services trong Cluster.

Nội dung chính theo từng chương

Báo cáo khóa luận được cấu trúc thành 5 chương với các nội dung chi tiết:

Chương 1. Tổng quan đề tài

Trình bày tính cấp thiết của đề tài xuất phát từ sự tăng trưởng của ngành dịch vụ du lịch và nhu cầu phượt tự túc của giới trẻ. Phân tích khoảng trống tính năng của các ứng dụng du lịch hiện hành (chủ yếu tập trung vào đặt phòng và bán vé). Xác định mục tiêu nghiên cứu, phạm vi, đối tượng người dùng mục tiêu, kết quả kỳ vọng, phương pháp nghiên cứu và nguồn dữ liệu trích xuất từ cơ quan quản lý du lịch. Đưa ra kế hoạch thực hiện 5 giai đoạn từ ngày 01/09/2020 đến ngày 28/12/2020.

Chương 2. Kiến thức nền tảng

Hệ thống hóa các lý thuyết công nghệ phục vụ xây dựng hệ thống:

  • Bản chất của ảo hóa Container, Docker Engine, Docker Hub, Docker Image, Docker Container và Dockerfile; so sánh ưu thế tài nguyên giữa Container và Virtual Machine.
  • Kiến trúc điều phối Kubernetes (Master Node, Worker Node, Pods, Deployments, Services).
  • Định nghĩa và ưu điểm của mô hình tự động hóa CI/CD (giảm chi phí, tăng tốc độ phát hành, cô lập lỗi và ngăn chặn phân phối mã lỗi); quy trình triển khai bằng Gitlab CI/CD với Kubernetes Runner Executor.
  • Đặc tính kỹ thuật của NodeJS/Express, PostgreSQL, sự khác biệt giữa ứng dụng Native và Hybrid, cấu trúc đa luồng (Main Thread - JS Thread - Bridge) của React Native.

Chương 3. Phân tích, thiết kế

Mô hình hóa chi tiết toàn bộ hệ thống phần mềm:

  • Thiết lập sơ đồ kiến trúc hệ thống phân tách giữa 2 dịch vụ chính (PackNGo Core API, PackNGo Image API) và các dịch vụ phụ trợ (PostgreSQL, Redis, Google Cloud Storage, Google Maps API, Gitlab Runner).
  • Xây dựng sơ đồ triển khai (Deployment Diagram) trên Kubernetes Cluster với các địa chỉ Service IP nội bộ và ngoại vi.
  • Xây dựng sơ đồ Use Case và sơ đồ lớp (Class Diagram).
  • Mô hình hóa các luồng xử lý qua sơ đồ tuần tự (Sequence Diagram) cho các chức năng: Đăng nhập (kiểm tra tài khoản, trả về access_token), Đăng ký, Tải lên hình ảnh, Chỉnh sửa thông tin cá nhân, Đổi mật khẩu, Tạo chuyến đi mới, Đánh dấu địa điểm, Cập nhật thông tin chuyến đi, Mời bạn bè, Theo dõi vị trí thành viên đoàn theo thời gian thực, Cập nhật vị trí hiện tại và Viết bài đánh giá sau chuyến đi.
  • Bản vẽ thiết kế giao diện người dùng (UI Screens) tương ứng với từng chức năng.

Chương 4. Triển khai và phát triển sản phẩm

Ghi nhận toàn bộ quy trình cấu hình và vận hành thực tế:

  • Đăng ký và thiết lập dự án trên Google Cloud Platform, kích hoạt Kubernetes Engine API và khởi tạo Kubernetes Cluster.
  • Cài đặt và cấu hình môi trường phát triển cục bộ với Docker, gcloud sdk và kubectl.
  • Thiết lập tệp Dockerfile để đóng gói dịch vụ PackNGo Core API, kiểm tra container cục bộ và đẩy image lên Google Cloud Registry.
  • Triển khai dịch vụ lên GKE Cluster và sử dụng giao diện dòng lệnh k9s để giám sát trạng thái tài nguyên.
  • Tích hợp Gitlab CI/CD: Liên kết Kubernetes Cluster vào repository Gitlab, cấu hình file .gitlab-ci.yml, cài đặt Gitlab Runner và kích hoạt tính năng Auto DevOps để tự động kiểm thử, phân phối mã nguồn mỗi khi phát sinh sự kiện push code.

Chương 5. Tổng kết

Đánh giá thuận lợi, các thành quả kỹ thuật đã đạt được trong quá trình phát triển ứng dụng di động và triển khai hạ tầng máy chủ vi dịch vụ; chỉ ra những hạn chế kỹ thuật còn tồn tại và xác định các hướng nghiên cứu mở rộng trong tương lai.

Kết quả và đóng góp

Khóa luận ghi nhận các kết quả thực tế qua quá trình nghiên cứu và phát triển:

  • Quy mô tài liệu báo cáo: Cuốn báo cáo tốt nghiệp dài 87 trang, gồm 5 chương, 77 hình vẽ minh họa kiến trúc và giao diện, 0 bảng số liệu thống kê nội bộ trong báo cáo và 7 tài liệu tham khảo.
  • Sản phẩm ứng dụng hoàn thiện:
    • Ứng dụng di động PackNGo được xây dựng trên nền tảng React Native, có giao diện tương thích với nhiều kích thước màn hình thiết bị di động.
    • Vận hành đầy đủ các tính năng: Đăng nhập/đăng ký bằng tài khoản hoặc liên kết mạng xã hội, quản lý hồ sơ cá nhân, tạo lập lịch trình chuyến đi, tìm kiếm và gắn tọa độ các điểm mốc, gửi lời mời tham gia nhóm, theo dõi vị trí trực tiếp của các thành viên trong suốt quá trình di chuyển trên nền Google Maps, và chia sẻ bài viết review sau chuyến đi.
    • Hạ tầng backend triển khai theo kiến trúc microservices trên Google Kubernetes Engine (GKE), kết hợp lưu trữ cơ sở dữ liệu PostgreSQL, lưu trữ tệp tin trên Google Cloud Storage và caching dữ liệu bằng Redis.
    • Thiết lập thành công chu trình CI/CD hoàn chỉnh qua Gitlab CI/CD và Gitlab Runner sử dụng Kubernetes executor, đảm bảo khả năng kiểm thử và triển khai tự động.
  • Đánh giá chuyên môn: Hội đồng chấm khóa luận tốt nghiệp (thành lập theo quyết định của Hiệu trưởng Trường Đại học Công nghệ Thông tin) gồm Chủ tịch Huỳnh Ngọc Tín, Thư ký Thái Thụy Hán Uyên và Ủy viên Nguyễn Công Hoan. Cán bộ hướng dẫn ThS. Nguyễn Thị Thanh Trúc và Cán bộ phản biện ThS. Phan Nguyệt Minh đều đánh giá khóa luận xếp loại Giỏi với điểm số 9/10.
  • Đóng góp kỹ thuật: Luận văn đóng góp mô hình tích hợp khép kín giữa công nghệ quản lý mã nguồn (Git/Gitlab), quy trình tự động triển khai (Gitlab CI/CD) và nền tảng điều phối vi dịch vụ (Google Cloud Kubernetes), hình thành một hệ thống có khả năng tự phục hồi khi có sự cố container, giúp tối ưu hóa thời gian và quy trình phát triển phần mềm.

Hạn chế và hướng nghiên cứu tiếp

Dựa trên các nhận xét phản biện và đánh giá tổng kết của tác giả:

  • Hạn chế tồn tại: Chức năng gợi ý địa điểm và tiện ích du lịch hoạt động ổn định về mặt luồng xử lý nhưng còn hạn chế về mặt tập dữ liệu huấn luyện/thu thập, dẫn đến độ chính xác gợi ý theo ngữ cảnh cá nhân hóa chưa cao; sản phẩm cần bổ sung thêm các điều kiện tối ưu để chuyển giao thương mại hóa hoặc ứng dụng thực tế trên quy mô lớn.
  • Hướng phát triển: Thu thập và mở rộng tập dữ liệu du lịch thực tế để nâng cao độ chính xác của thuật toán gợi ý điểm đến; tối ưu hóa hiệu năng truyền nhận tọa độ realtime giữa các thiết bị di động trong điều kiện mạng di động yếu; hoàn thiện các tính năng nghiệp vụ mở rộng nhằm đáp ứng nhu cầu sử dụng thực tế.

Giá trị tham khảo

Báo cáo khóa luận cung cấp tài liệu tham khảo cho các đối tượng:

  • Sinh viên ngành Kỹ thuật Phần mềm và Công nghệ Thông tin: Nguồn tài liệu học tập về phương pháp phân tích, thiết kế hệ thống phần mềm hướng đối tượng qua sơ đồ UML (Use case, Class diagram, Sequence diagram).
  • Kỹ sư phát triển phần mềm và DevOps: Tham khảo mô hình cấu hình thực tế của Gitlab CI/CD kết hợp Kubernetes Runner trên hạ tầng Google Cloud Platform (GKE), quy trình đóng gói container Docker và giám sát cụm bằng k9s.
  • Lập trình viên Mobile/Fullstack: Tham khảo mô hình tổ chức ứng dụng di động React Native tích hợp các dịch vụ bản đồ (Google Maps API), mạng xã hội (Facebook SDK) và kiến trúc backend phân tán sử dụng NodeJS/Express cùng PostgreSQL/Redis.

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

1. Hệ thống backend của ứng dụng PackNGo được phân chia thành những dịch vụ vi mô (microservices) nào?
Hệ thống backend gồm 2 dịch vụ nghiệp vụ chính là PackNGo Core API (xử lý logic tài khoản, chuyến đi) và PackNGo Image API (xử lý tệp hình ảnh), cùng với 5 dịch vụ phụ trợ gồm PostgreSQL (lưu trữ cơ sở dữ liệu quan hệ), Redis (bộ nhớ đệm cache), Google Cloud Storage (lưu trữ file media), Google Maps API (cung cấp dữ liệu bản đồ) và Gitlab Runner (thực thi tác vụ CI/CD).

2. Gitlab CI/CD được cấu hình kết nối với Kubernetes Cluster thông qua cơ chế nào?
Quy trình CI/CD sử dụng Gitlab Runner cấu hình với loại Kubernetes executor. Khi một pipeline được kích hoạt, executor này sẽ kết nối trực tiếp đến Kubernetes API Server trong cluster để tự động khởi tạo các Pod riêng biệt thực thi các job kiểm thử và triển khai mã nguồn.

3. Cơ chế giao tiếp giữa hai luồng (threads) trong ứng dụng React Native được thực hiện như thế nào?
React Native phân tách thành Main Thread (phụ trách cập nhật giao diện người dùng UI và tương tác) và JS Thread (thực thi mã JavaScript). Hai luồng này chạy độc lập và giao tiếp với nhau thông qua một cầu nối gọi là Bridge để chuyển đổi và truyền nhận dữ liệu qua lại.

4. Quy trình phân nhánh (branching) trong chu trình CI/CD của đề tài quy định như thế nào?
Hệ thống quy định 3 nhánh chính: nhánh uat dành cho môi trường kiểm thử chấp nhận (Tester kiểm tra chức năng); nhánh develop dùng cho môi trường staging tích hợp mã nguồn từ các lập trình viên; và nhánh master đại diện cho môi trường production chính thức.

5. Khóa luận tốt nghiệp này do ai thực hiện và đạt kết quả đánh giá như thế nào?
Khóa luận do sinh viên Ngô Đức Hòa (MSSV: 16520423), ngành Kỹ thuật Phần mềm, Trường Đại học Công nghệ Thông tin – ĐHQG-HCM thực hiện dưới sự hướng dẫn của ThS. Nguyễn Thị Thanh Trúc. Báo cáo hoàn thành vào tháng 12/2020, được bảo vệ vào tháng 02/2021 và được cả Cán bộ hướng dẫn lẫn Cán bộ phản biện (ThS. Phan Nguyệt Minh) chấm đạt điểm số 9/10 (xếp loại Giỏi).

Kết luận

Khóa luận tốt nghiệp của sinh viên Ngô Đức Hòa đã hoàn thành mục tiêu xây dựng ứng dụng di động PackNGo phục vụ nhu cầu tạo lập, quản lý hành trình và theo dõi vị trí theo nhóm cho người đi du lịch phượt. Nghiên cứu đã hiện thực hóa thành công mô hình kiến trúc vi dịch vụ (Microservices) vận hành trên nền tảng Google Kubernetes Engine kết hợp quy trình tự động hóa Gitlab CI/CD. Mặc dù cần tiếp tục hoàn thiện tập dữ liệu để nâng cao hiệu quả thuật toán gợi ý địa điểm, công trình là tài liệu tham khảo hoàn chỉnh về mặt kỹ thuật cho các đề tài phát triển ứng dụng di động đa nền tảng và triển khai hệ thống phân tán.