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

Theo số liệu từ Trung tâm Internet Việt Nam được tác giả trích dẫn, tính đến đầu năm 2021, Việt Nam ghi nhận 68,72 triệu người sử dụng Internet, chiếm 70,3% dân số. Sự phát triển này thúc đẩy mạnh mẽ các nền tảng kinh doanh số và mạng xã hội. Cùng với xu hướng số hóa, mô hình lưu trú homestay—dịch vụ du lịch dựa vào cộng đồng cho phép khách lưu trú tại nhà người dân để trải nghiệm không gian sống địa phương—ngày càng phổ biến ở cả các vùng du lịch trọng điểm lẫn đô thị. Nhu cầu tìm kiếm không gian nghỉ ngơi ngắn ngày, riêng tư với chi phí hợp lý của giới trẻ đặt ra yêu cầu về các nền tảng trực tuyến chuyên biệt.

Từ thực tiễn trên, đề tài "Xây dựng Hệ thống quản lý cộng đồng đặt và cho thuê căn hộ HomeLike" được thực hiện nhằm kết hợp giữa dịch vụ thương mại điện tử đặt phòng homestay và mô hình tương tác mạng xã hội. Mục tiêu tổng quát là hỗ trợ người dùng tìm kiếm, đặt thuê căn hộ chất lượng, đồng thời kết nối cộng đồng để chia sẻ đánh giá thực tế.

Đề tài phân rã thành hai bài toán cụ thể:

  1. Tìm kiếm căn hộ trực tuyến theo vị trí có hiển thị bản đồ trực quan.
  2. Đặt thuê, đánh giá và chia sẻ thông tin về căn hộ với bạn bè thông qua mô hình mạng xã hội.

Đối tượng nghiên cứu là quy trình quản lý, tìm kiếm, giao dịch đặt phòng ngắn hạn và các tương tác xã hội số giữa các chủ thể. Phạm vi nghiên cứu tập trung vào bài toán kinh doanh căn hộ homestay tại Việt Nam; giải pháp công nghệ được giới hạn trong việc phân tích, thiết kế và cài đặt hệ thống ứng dụng web thử nghiệm HomeLike với các kịch bản tương tác chính giữa khách hàng, chủ nhà và người quản trị.


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

Đề tài áp dụng phương pháp phân tích và thiết kế hướng đối tượng (OOAD) kết hợp mô hình hóa bằng ngôn ngữ UML để xây dựng các biểu đồ ca sử dụng (Use Case), biểu đồ lớp (Class Diagram) và biểu đồ tuần tự (Sequence Diagram).

Nền tảng công nghệ và lý thuyết tính toán được lựa chọn trong hệ thống bao gồm:

  • Công cụ tìm kiếm phân tán Elasticsearch: Hoạt động trên nền tảng Apache Lucene, sử dụng cấu trúc chỉ mục đảo (inverted index) trên các tài liệu JSON (Document) không bị ràng buộc schema. Cấu trúc lưu trữ tổ chức theo Cluster, Node và Shard (bao gồm Primary Shard và Replica Shard). Kể từ phiên bản 7.x, mỗi index mặc định tạo 1 Primary Shard và 1 Replica Shard để giảm dư thừa phân mảnh đối với dữ liệu vừa và nhỏ.
  • Thuật toán xếp hạng TF/IDF: Elasticsearch áp dụng thuật toán Term Frequency / Inverse Document Frequency để tính toán điểm liên quan ($_score$) của tài liệu theo công thức: $$_score = IDF \times TF \times fieldNorms$$ Trong đó:
    • $tf(t, d) = \sqrt{\text{frequency}}$ (căn bậc hai tần suất xuất hiện của từ khóa $t$ trong tài liệu $d$).
    • $idf(t) = 1 + \ln\left(\frac{\text{numDocs}}{\text{docFreq} + 1}\right)$ (logarit tự nhiên của tỉ số giữa tổng số tài liệu và số tài liệu chứa từ khóa $t$).
    • $norm(d) = \frac{1}{\sqrt{\text{numFieldTerms}}}$ (nghịch đảo căn bậc hai số lượng từ trong trường).
  • Thư viện bản đồ LeafletJS: Thư viện JavaScript mã nguồn mở dung lượng nhẹ (~38KB), hỗ trợ hiển thị bản đồ tương tác và đánh dấu vị trí địa lý.
  • Framework máy chủ Ruby on Rails: Xây dựng trên ngôn ngữ hướng đối tượng Ruby (tác giả Yukihiro Matsumoto phát triển từ năm 1993, phát hành năm 1995), hỗ trợ kiến trúc MVC và chuẩn Restful API.
  • Hệ quản trị cơ sở dữ liệu quan hệ MySQL: Đảm bảo 4 thuộc tính ACID (Atomicity, Consistency, Isolation, Durability), chuẩn SQL, hỗ trợ lưu trữ bảng dữ liệu lớn (mặc định 4GB, lý thuyết mở rộng đến 8 triệu TB).
  • Thư viện giao diện ReactJS: Thư viện JavaScript phát triển bởi Facebook (mã nguồn mở năm 2015), hoạt động theo mô hình ứng dụng đơn trang (SPA) và cơ chế Virtual DOM giúp tối ưu hóa việc cập nhật giao diện.
  • Cổng thanh toán PayPal: Sử dụng PayPal Orders API để xử lý giao dịch đặt cọc/thanh toán của khách hàng và PayPal Payouts API để chi trả tiền thuê cho chủ hộ kinh doanh.
  • Cơ chế xác thực JWT (JSON Web Token): Sử dụng cặp access_token và refresh_token lưu trữ tại localStorage phía trình duyệt để quản lý phiên đăng nhập.
Tiêu chí Công nghệ lựa chọn Công nghệ đối sánh Lý do lựa chọn của tác giả
Công cụ tìm kiếm Elasticsearch MySQL Full-text search Hiệu năng tìm kiếm vượt trội, thuật toán chấm điểm liên quan TF/IDF tối ưu, khả năng mở rộng ngang tốt hơn.
Hiển thị bản đồ LeafletJS Google Maps API LeafletJS là mã nguồn mở, không tốn chi phí bản quyền, kích thước nhẹ (~38KB), cung cấp đầy đủ API tương tác bản đồ.
Cơ sở dữ liệu MySQL (RDBMS) NoSQL (MongoDB,...) Nghiệp vụ tài chính và đặt phòng đòi hỏi tính toàn vẹn giao dịch (ACID), duy trì ràng buộc khóa ngoại tránh xóa nhầm dữ liệu.
Giao diện người dùng ReactJS (SPA) Multi-Page truyền thống Tận dụng Virtual DOM tối ưu render, chỉ tải tài nguyên tĩnh một lần, tái sử dụng component và tăng độ mượt mà.

Thiết kế và triển khai

Hệ thống HomeLike được thiết kế theo mô hình kiến trúc phân tách Client - Server. Phía máy khách (Client) là ứng dụng đơn trang xây dựng bằng ReactJS tương tác với người dùng qua trình duyệt. Phía máy chủ (Server) phát triển trên nền tảng Ruby on Rails, đóng vai trò Restful API tiếp nhận các request, xử lý nghiệp vụ, giao tiếp với hệ quản trị cơ sở dữ liệu MySQL, đẩy chỉ mục và truy vấn sang Elasticsearch, đồng thời gọi cổng thanh toán quốc tế PayPal API.

+--------------------------------------------------------+
|                   Client (ReactJS SPA)                 |
|       LeafletJS Map  |  Local Storage (JWT Token)      |
+---------------------------+----------------------------+
                            | HTTP / Restful API
+---------------------------v----------------------------+
|               Server (Ruby on Rails API)               |
|      Authentication  |  Booking Logic  |  Social Feed  |
+-------------+--------------------+---------------------+
              |                    |
+-------------v-------+  +---------v--------+  +---------v----------+
|    MySQL Database   |  |  Elasticsearch   |  |   PayPal Services  |
|  (23 Tables - ACID) |  | (TF/IDF Search)  |  |  Orders & Payouts  |
+---------------------+  +------------------+  +--------------------+

Thiết kế lớp và cơ sở dữ liệu

Qua quá trình phân tích tác nhân và kịch bản hoạt động, tác giả thiết kế các lớp thực thể tương ứng với các bảng lưu trữ trong cơ sở dữ liệu MySQL:

  • Nhóm quản trị và người dùng: User, FullName, Address, Role, RefreshToken, Admin, AdminRefreshToken, Customer, Merchant.
  • Nhóm tương tác mạng xã hội: Post, Likes, Comment, Image.
  • Nhóm lưu trú và đánh giá: Apartment, Item, Facility, Tag, Review.
  • Nhóm giao dịch và thanh toán: Order, Payment, Payout.

Để giải quyết các quan hệ nhiều - nhiều ($n-n$) trong mô hình hướng đối tượng, tác giả xây dựng 5 lớp trung gian và chuyển hóa thành các bảng quan hệ tương ứng:

  1. Relationship (giải quyết liên kết giữa người theo dõi follower và người được theo dõi followed từ lớp User).
  2. User_Role (liên kết giữa User và Role).
  3. Post_Item (liên kết giữa bài viết Post và căn hộ cho thuê Item).
  4. Apartment_Facility (liên kết giữa căn hộ Apartment và cơ sở vật chất Facility, kèm thông tin số lượng quantity và chất lượng quality).
  5. Item_Tag (liên kết giữa căn hộ cho thuê Item và thẻ phân loại Tag).

Quy trình và biểu đồ tuần tự

Hệ thống xây dựng các luồng xử lý tuần tự cho các chức năng trọng yếu:

  • Xác thực đăng nhập (JWT): Người dùng nhập tài khoản, AuthenticationController gọi AuthenticationService xác thực thông tin. Khi thông tin hợp lệ, hệ thống cấp phát access_token và refresh_token lưu tại localStorage. Trong các yêu cầu truy cập tài nguyên cần phân quyền, access_token được gửi kèm ở phần header của HTTP request. Khi token hết hạn, refresh_token tự động được dùng để tái cấp access_token mới mà không bắt người dùng đăng nhập lại.
  • Quy trình thanh toán (PayPal Orders API): Khi khách hàng đặt thuê phòng, hệ thống điều hướng sang giao diện chọn hình thức thanh toán. Giao diện tích hợp nút thanh toán PayPal; khi khách xác nhận, PayPal Orders API kích hoạt giao dịch và trả về callback thành công cho máy chủ HomeLike để hoàn tất đơn thuê Order.
  • Quy trình chi trả (PayPal Payouts API): Hỗ trợ chuyển tiền cho chủ nhà (Merchant) thông qua email hoặc số điện thoại định danh tài khoản PayPal Business.

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

CHƯƠNG 1. GIỚI THIỆU BÀI TOÁN VÀ CÁC CÔNG NGHỆ XÂY DỰNG HỆ THỐNG

Chương 1 thiết lập bài toán tổng quan về mô hình dịch vụ lưu trú homestay và nhu cầu kết nối số hóa. Tác giả đi sâu phân tích cơ chế hoạt động của Elasticsearch: quy trình lưu trữ dữ liệu 3 bước (Node Master xác định Primary Shard -> chuyển tiếp Node lưu P0 -> sao chép sang các Node chứa Replica Shard) và quy trình lấy dữ liệu (Master chọn Shard theo thuật toán Round-Robin để cân bằng tải; truy vấn toàn văn gửi broadcast tới tất cả các Node, Shard xử lý tính _id và _score, sau đó Node tiếp nhận thực hiện sắp xếp toàn cục kết quả). Thuật toán TF/IDF được tác giả giải thích cặn kẽ từng thành phần toán học cấu thành. Ngoài ra, chương này luận chứng việc chọn LeafletJS thay thế Google Maps do tiết kiệm chi phí; chọn MySQL thay vì NoSQL vì cần bảo đảm tính toàn vẹn quan hệ ACID cho dữ liệu giao dịch; đồng thời giới thiệu tính ưu việt của ReactJS (Virtual DOM) và quy trình tích hợp PayPal Orders API, PayPal Payouts API.

CHƯƠNG 2. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG

Chương 2 mô tả chi tiết quá trình phân tích và thiết kế hệ thống theo phương pháp hướng đối tượng. Tác giả phân loại 4 tác nhân chính:

  • Người dùng hệ thống (User): Thực hiện các ca sử dụng đăng nhập, đăng ký, đăng bài viết, tương tác (thích, chia sẻ, bình luận), theo dõi/hủy theo dõi tài khoản khác.
  • Khách hàng (Customer): Kế thừa từ User; có thêm quyền tìm kiếm căn hộ theo vị trí, địa điểm, giá tiền; đặt thuê; gửi đánh giá và thanh toán trực tuyến.
  • Chủ căn hộ (Merchant): Kế thừa từ User; thực hiện đăng tải thông tin căn hộ, quản lý danh sách phòng, tiếp nhận đặt chỗ và nhận tiền chi trả.
  • Người quản trị (Admin): Quản lý toàn bộ danh mục căn hộ, duyệt và quản lý tài khoản người dùng (kích hoạt, khóa, xóa), theo dõi thống kê doanh thu.

Tác giả lập các bảng kịch bản chi tiết (gồm tên ca sử dụng, mô tả, tác nhân, tiền điều kiện, hậu điều kiện, luồng sự kiện chính và các luồng sự kiện phụ) cho 9 chức năng: Đăng nhập, Thêm bài viết, Bình luận bài viết, Theo dõi người dùng, Đặt thuê căn hộ, Thanh toán, Thêm căn hộ, Xóa căn hộ, Xóa người dùng. Từ kịch bản nghiệp vụ, tác giả trích xuất danh sách 21 lớp thực thể cơ bản, thiết lập mối quan hệ số lượng (1-1, 1-$n$, $n-n$), đề xuất 5 lớp quan hệ trung gian và chuyển hóa thành lược đồ cơ sở dữ liệu quan hệ gồm 23 bảng. Cuối chương là các biểu đồ tuần tự mô tả chi tiết tương tác message giữa các đối tượng trong cơ chế xác thực JWT, thêm bài viết, bình luận, theo dõi bạn bè và thanh toán đặt phòng.

CHƯƠNG 3. CÀI ĐẶT THỬ NGHIỆM VÀ ĐÁNH GIÁ

Chương 3 trình bày sơ đồ kiến trúc triển khai hệ thống và giới thiệu kết quả cài đặt thực tế qua các giao diện chức năng:

  • Giao diện Trang chủ và Trang mạng xã hội (hiển thị bài viết, hình ảnh, thông tin chia sẻ từ bạn bè).
  • Giao diện Thông tin chi tiết căn hộ và Chi tiết bài viết.
  • Giao diện Trang cá nhân người dùng và Danh sách người theo dõi.
  • Giao diện Tìm kiếm căn hộ tích hợp hiển thị vị trí trên bản đồ tương tác LeafletJS.
  • Giao diện Quy trình đặt căn hộ, màn hình xác nhận thanh toán PayPal và Thông tin chi tiết đặt thuê.
  • Giao diện Quản lý danh sách đặt thuê của khách hàng và Danh sách căn hộ của chủ nhà.

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

Đồ án đã thiết kế và triển khai hoàn chỉnh một ứng dụng web kết hợp dịch vụ homestay và mạng xã hội, giải quyết được các yêu cầu kỹ thuật đề ra:

Phân hệ chức năng Chức năng chi tiết đã hoàn thành Công nghệ / Cơ chế áp dụng
Xác thực & Bảo mật Đăng nhập, lưu phiên làm việc, phân quyền 4 nhóm tác nhân JSON Web Token (JWT), localStorage
Tìm kiếm & Bản đồ Tìm kiếm căn hộ theo từ khóa liên quan, hiển thị vị trí trực quan Elasticsearch (TF/IDF ranking), LeafletJS API
Mạng xã hội Đăng bài viết, bình luận, tương tác yêu thích, theo dõi tài khoản khác Restful API, quan hệ đa chiều (Relationship, Post_Item)
Quản lý lưu trú Thêm, sửa, xóa thông tin căn hộ, quản lý cơ sở vật chất, nhãn căn hộ Ruby on Rails, MySQL (bảng Apartment, Facility, Item)
Giao dịch & Thanh toán Khách hàng đặt thuê, thanh toán trực tuyến, chủ nhà nhận tiền qua cổng PayPal Orders API, PayPal Payouts API

Hệ thống có đóng góp thực tiễn khi kết hợp mô hình mạng xã hội vào nền tảng thương mại điện tử lưu trú. Thay vì chỉ đọc các nhận xét ẩn danh như các website truyền thống, người thuê nhà có thể trực tiếp theo dõi bạn bè hoặc những chủ nhà uy tín, theo dõi bài viết chia sẻ trải nghiệm thực tế để đưa ra quyết định đặt phòng chính xác hơn. Về mặt kỹ thuật, tác giả đã kết hợp đồng thời cơ sở dữ liệu quan hệ MySQL để quản lý giao dịch toàn vẹn với công cụ tìm kiếm Elasticsearch và thư viện bản đồ nguồn mở LeafletJS nhằm giải quyết bài toán hiệu năng và tối ưu chi phí.


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

  • Hạn chế được tác giả đề cập trong văn bản:
    • Lợi thế về tính phân tán và khả năng mở rộng theo chiều ngang (horizontal scale) của Elasticsearch chưa được áp dụng trên môi trường thực nghiệm của đồ án.
    • Tốc độ thực thi của ngôn ngữ Ruby còn chậm hơn so với Java.
    • Thời gian thực hiện, lượng kiến thức và kinh nghiệm thực tế của sinh viên còn hạn chế nên hệ thống không tránh khỏi một số thiếu sót trong thiết kế và cài đặt.
  • Hướng nghiên cứu và phát triển tiếp:
    • Khai thác tính năng mở rộng theo chiều ngang và cấu hình cụm phân tán đa Node (Cluster) thực tế cho Elasticsearch khi quy mô dữ liệu căn hộ tăng lên.
    • Nâng cấp, hoàn thiện thêm các tính năng tương tác mạng xã hội chuyên sâu và tối ưu hóa hiệu năng máy chủ.

Giá trị tham khảo

Báo cáo đồ án tốt nghiệp là tài liệu tham khảo cho sinh viên các ngành Công nghệ thông tin, Kỹ thuật phần mềm và Hệ thống thông tin:

  • Phương pháp phân tích thiết kế hệ thống: Cung cấp mẫu quy trình phân tích hướng đối tượng rõ ràng từ việc xác định tác nhân, viết kịch bản use case cụ thể (có luồng chính, luồng phụ) đến việc xây dựng biểu đồ lớp, xử lý chuẩn hóa quan hệ $n-n$ và chuyển dịch thành 23 bảng cơ sở dữ liệu quan hệ.
  • Tích hợp công nghệ đa dạng: Cung cấp tài liệu tham khảo trực quan về cách tích hợp công cụ tìm kiếm toàn văn Elasticsearch song song với cơ sở dữ liệu quan hệ MySQL; cách cấu hình và triển khai thư viện bản đồ nguồn mở LeafletJS thay thế cho các giải pháp thương mại đắt đỏ; và kỹ thuật kết nối cổng thanh toán quốc tế PayPal thông qua cả hai dịch vụ Orders API và Payouts API trên nền tảng Ruby on Rails kết hợp ReactJS.

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

1. Hệ thống HomeLike giải quyết bài toán tìm kiếm căn hộ bằng công cụ gì và cơ chế xếp hạng kết quả ra sao?
Hệ thống sử dụng Elasticsearch chạy trên nền Apache Lucene với cấu trúc chỉ mục đảo (inverted index). Để xác định mức độ phù hợp của kết quả tìm kiếm so với từ khóa, hệ thống áp dụng thuật toán TF/IDF tính điểm $_score$ dựa trên ba thành phần: tần suất xuất hiện từ trong tài liệu (Term Frequency), độ hiếm của từ trên toàn bộ chỉ mục (Inverse Document Frequency), và độ dài của trường chứa từ (Field-length norm). Kết quả trả về được sắp xếp tự động từ $_score$ cao nhất đến thấp nhất.

2. Tại sao tác giả lựa chọn thư viện LeafletJS thay vì Google Maps API để hiển thị bản đồ?
Theo phân tích của tác giả ở Chương 1, Google Maps API có chi phí sử dụng cao. Trong khi đó, LeafletJS là thư viện JavaScript mã nguồn mở hoàn toàn miễn phí, có dung lượng tải rất nhẹ (chỉ khoảng 38KB phần script) nhưng vẫn cung cấp đầy đủ các tính năng bản đồ tương tác cần thiết và hỗ trợ tốt trên cả máy tính lẫn điện thoại di động.

3. Cơ chế xác thực người dùng được thiết kế trong đồ án hoạt động như thế nào?
Hệ thống áp dụng cơ chế xác thực JWT (JSON Web Token). Khi người dùng đăng nhập thành công, máy chủ trả về hai mã token: access_token và refresh_token, được lưu tại localStorage ở trình duyệt. Với mỗi request tiếp theo tới các tài nguyên yêu cầu xác thực, access_token được đính kèm ở header. Nếu access_token hết hạn, hệ thống tự động sử dụng refresh_token để yêu cầu cấp cặp token mới nhằm duy trì phiên làm việc cho người dùng mà không cần nhập lại mật khẩu.

4. Tại sao hệ thống sử dụng cơ sở dữ liệu MySQL thay vì chuyển sang các hệ thống NoSQL mới hơn?
Tác giả giải thích rằng phạm vi đồ án không đòi hỏi việc truy vấn dữ liệu phi cấu trúc khổng lồ ở tốc độ cực cao vốn là thế mạnh của NoSQL. Ngược lại, hệ thống có các nghiệp vụ giao dịch thuê phòng và thanh toán đòi hỏi tính toàn vẹn dữ liệu nghiêm ngặt theo chuẩn ACID của hệ quản trị cơ sở dữ liệu quan hệ. Ngoài ra, việc duy trì ràng buộc quan hệ chặt chẽ giữa các bảng trong MySQL giúp bảo đảm an toàn dữ liệu, phòng tránh việc xóa nhầm dữ liệu liên đới.

5. Quy trình nhận tiền của chủ nhà (Merchant) từ hệ thống HomeLike qua PayPal diễn ra như thế nào?
Việc trả tiền cho chủ căn hộ được thực hiện qua PayPal Payouts API. Điều kiện yêu cầu là hệ thống phải có tài khoản PayPal Business liên kết ngân hàng và đủ số dư. Khi tạo yêu cầu Payout, hệ thống nhập email hoặc số điện thoại của chủ nhà. Nếu chủ nhà đã có tài khoản PayPal, hệ thống gửi thông báo qua email/ứng dụng để nhận tiền trực tiếp; nếu chưa có tài khoản, chủ nhà sẽ nhận được thông báo hướng dẫn tạo tài khoản PayPal theo email/số điện thoại để rút tiền.


Kết luận

Đồ án tốt nghiệp "Xây dựng Hệ thống quản lý cộng đồng đặt và cho thuê căn hộ HomeLike" của sinh viên Nguyễn Sỹ Quang Anh đã hoàn thành mục tiêu nghiên cứu và xây dựng một hệ thống web tích hợp giữa mô hình thương mại homestay và mạng xã hội. Báo cáo thể hiện quy trình phân tích và thiết kế phần mềm hướng đối tượng rõ ràng, chuyển đổi hiệu quả từ kịch bản sử dụng sang kiến trúc cơ sở dữ liệu và biểu đồ tuần tự. Việc kết hợp các công nghệ như Ruby on Rails, ReactJS, MySQL, Elasticsearch, LeafletJS và PayPal đã giải quyết trọn vẹn các bài toán nghiệp vụ từ tìm kiếm, hiển thị bản đồ, tương tác cộng đồng đến thanh toán trực tuyến.