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

Thị trường bất động sản cho thuê ngắn hạn và dài hạn tại các đô thị lớn đang ghi nhận nhu cầu gia tăng nhanh chóng, bắt nguồn từ lượng lớn sinh viên, người lao động và khách du lịch có nhu cầu tìm kiếm chỗ ở linh hoạt. Sự chuyển dịch sang các nền tảng kỹ thuật số giúp người thuê tiếp cận nguồn nhà trọ, căn hộ minh bạch và tiết kiệm thời gian, đồng thời hỗ trợ chủ nhà quảng bá và quản lý tài sản mà không cần đầu tư mặt bằng trưng bày. Tuy nhiên, tại Việt Nam, số lượng nền tảng công nghệ chuyên biệt phục vụ thuê nhà có chất lượng dịch vụ cao và độ uy tín được kiểm chứng vẫn còn hạn chế. Khách hàng thường đối mặt với các băn khoăn về tính xác thực của thông tin và chất lượng thực tế của căn hộ.

Khóa luận tốt nghiệp "Xây dựng ứng dụng web thuê nhà dựa trên kiến trúc microservices" do sinh viên Trần Trọng Tín và Hà Danh Tuấn (ngành Hệ thống Thông tin, 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. Hà Lê Hoài Trung nhằm giải quyết bài toán trên.

Mục tiêu nghiên cứu của đề tài được tác giả xác định cụ thể qua các nhiệm vụ sau:

  1. Nghiên cứu và làm chủ các công nghệ nền tảng: ngôn ngữ Golang, hệ quản trị cơ sở dữ liệu PostgreSQL, thư viện giao diện ReactJS, Material UI và bộ công cụ tìm kiếm Elasticsearch (ELK).
  2. Tìm hiểu quy trình nghiệp vụ thuê nhà trực tuyến và xây dựng hoàn chỉnh ứng dụng web cho thuê nhà mang tên Go Trek.
  3. Nghiên cứu, thiết kế và tích hợp kiến trúc Microservices cùng công cụ tìm kiếm phân tán Elasticsearch nhằm nâng cao hiệu suất và khả năng mở rộng hệ thống.
  4. Vận dụng kiến thức chuyên ngành Hệ thống Thông tin để hoàn thiện một sản phẩm ứng dụng có khả năng triển khai thực tế.

Đối tượng nghiên cứu của khóa luận tập trung vào:

  • Những khó khăn của người dùng khi tìm kiếm chỗ ở phục vụ du lịch, công tác hoặc kỳ nghỉ gia đình (yêu cầu về giá cả, vị trí, tiện nghi và độ tin cậy của thông tin).
  • Thách thức của chủ nhà và nhà đầu tư bất động sản ngắn hạn trong việc vận hành, niêm yết và phê duyệt giao dịch cho thuê.
  • Quy trình quản lý danh mục và giao dịch thuê nhà của các tổ chức, đơn vị quản lý bất động sản.

Phạm vi nghiên cứu được giới hạn trong việc xây dựng hệ thống phần mềm ứng dụng web trên nền tảng đám mây, sử dụng ngôn ngữ Go theo mô hình phân tán Microservices, tích hợp cơ chế đồng bộ dữ liệu qua hàng đợi thông điệp, tối ưu hóa tìm kiếm toàn văn và thử nghiệm triển khai trên hạ tầng Amazon Web Services (AWS).


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

Khóa luận kết hợp phương pháp khảo sát hiện trạng thực tế với phương pháp phân tích, thiết kế và phát triển hệ thống phần mềm hướng dịch vụ (Service-Oriented Architecture / Microservices).

Khảo sát hiện trạng hệ thống

Nhóm tác giả tiến hành khảo sát và đánh giá 4 nền tảng thuê nhà trực tuyến lớn trên thế giới gồm: Airbnb, VRBO, Agoda và Booking.com.

Nền tảng Điểm đặc trưng về nghiệp vụ Chức năng nổi bật
Airbnb Mạng lưới lưu trú cá nhân toàn cầu, hỗ trợ hơn 220 quốc gia; kết nối chủ nhà và khách thuê. Đánh giá hai chiều (chủ nhà và khách), dịch vụ trải nghiệm địa phương (Airbnb Experiences), chương trình bảo vệ AirCover.
VRBO Tập trung vào chỗ ở cá nhân, kỳ nghỉ dài ngày, biệt thự, nhà nghỉ dưỡng độc đáo. Quản lý đặt chỗ nâng cao, bảo hiểm du lịch, hỗ trợ khách hàng 24/7, chính sách thanh toán an toàn.
Agoda Trụ sở tại Singapore (thuộc Booking Holdings), mạng lưới chỗ ở mạnh tại khu vực Châu Á. Công cụ so sánh giá, hệ thống giảm giá theo mùa/thành viên (AgodaCash), hỗ trợ đa ngôn ngữ.
Booking.com Nền tảng đặt phòng thành lập năm 1996 với hơn 28 triệu chỗ ở trên 227 quốc gia và vùng lãnh thổ. Đặt phòng tức thì, chính sách hủy phòng linh hoạt, bộ lọc tìm kiếm đa tiêu chí, hỗ trợ khách hàng 24/7.

Từ kết quả khảo sát, nhóm tác giả đúc kết các khối chức năng thiết yếu cần xây dựng cho ứng dụng: hiển thị thông tin căn hộ chi tiết, bộ lọc tìm kiếm đa chiều, lưu danh sách yêu thích, công cụ đăng ký/quản lý căn hộ cho chủ nhà, thanh toán trực tuyến và hệ thống đánh giá thực tế từ người đã thuê.

Khung lý thuyết và công cụ kỹ thuật

Hệ thống được phát triển dựa trên các công nghệ và công cụ:

  • Ngôn ngữ và Framework: Go (Golang) với ưu thế xử lý đa luồng qua Goroutines/Channels; GORM (Object Relational Mapping cho Go); ReactJS và Material UI cho giao diện phía máy khách; JavaScript (chuẩn ECMAScript 12).
  • Giao thức và Truyền thông liên dịch vụ: gRPC (Google Remote Procedure Call) sử dụng Protocol Buffers (proto3) để truyền tải dữ liệu dạng nhị phân giữa các microservices nhằm tối ưu hiệu năng CPU so với JSON/XML.
  • Hàng đợi thông điệp: RabbitMQ (giao thức AMQP) đóng vai trò Message Broker theo mô hình Publish/Subscribe và Point-to-Point, áp dụng Dead Letter Exchange (DLX) và Time-To-Live (TTL) để đồng bộ dữ liệu bất đồng bộ.
  • Cơ sở dữ liệu và Động cơ tìm kiếm: PostgreSQL (CSDL quan hệ), Redis (lưu trữ phiên đăng nhập, bộ đệm từ khóa, hỗ trợ gợi ý prefix search), Elasticsearch (lập chỉ mục phân tán trên nền Apache Lucene phục vụ tìm kiếm toàn văn).
  • Hạ tầng và Triển khai: Docker và Docker Compose cho container hóa; Amazon Web Services (AWS) bao gồm VPC, Public/Private Subnet, Route Table, Internet Gateway, EC2, RDS, S3, KMS, Route53.
  • Bộ công cụ tự xây dựng: Thư viện hadanhtuan/go-sdk do nhóm phát triển nhằm chuẩn hóa kết nối gRPC, quản lý biến môi trường, định dạng API Request/Response, thao tác CSDL và tích hợp AWS/RabbitMQ.
  • Công cụ phân tích thiết kế: starUML (vẽ sơ đồ ca sử dụng, sơ đồ phân rã chức năng, mô hình dữ liệu), Postman (kiểm thử API endpoints), GitHub (quản lý phiên bản mã nguồn).

Thiết kế và triển khai

Hệ thống được thiết kế theo kiến trúc Microservices phân tán, tách biệt giao diện người dùng, cổng giao tiếp API Gateway và các dịch vụ nghiệp vụ độc lập.

1. Phân tích chức năng và Tác tử (Actors)

Hệ thống phân định rõ quyền hạn của 3 nhóm tác tử:

  • Admin (Quản trị viên): Quản lý toàn bộ danh mục căn hộ, kiểm duyệt đơn thuê, quản lý tài khoản người dùng (khóa/xóa tài khoản vi phạm, mật khẩu được mã hóa bảo mật) và xem báo cáo thống kê doanh thu, đơn thuê, người dùng theo thời gian.
  • Host (Chủ nhà): Thực hiện quy trình đăng ký và tạo căn hộ mới (qua 9 bước giao diện), quản lý danh sách phòng, tiếp nhận và phê duyệt (Approve) hoặc từ chối (Reject) các yêu cầu đặt phòng.
  • User (Người thuê): Đăng ký tài khoản (xác thực email duy nhất, mật khẩu chuẩn bảo mật tối thiểu 8 ký tự), tìm kiếm căn hộ (tổng quan và chi tiết), đặt phòng, thanh toán qua cổng thẻ (VISA/Mastercard/Debit trong thời hạn giữ chỗ 5 phút) và đánh giá căn hộ sau khi hoàn tất kỳ lưu trú.

2. Kiến trúc dịch vụ và Cơ chế đồng bộ dữ liệu

Kiến trúc triển khai gồm các thành phần:

  • API Gateway Service: Tiếp nhận các yêu cầu HTTP/REST từ client, phân tuyến và chuyển đổi sang giao thức gRPC để giao tiếp với các dịch vụ nghiệp vụ nội bộ.
  • Property Service: Quản lý dữ liệu căn hộ, tiện ích (amenity), thông tin lưu trú, tương tác trực tiếp với cơ sở dữ liệu quan hệ PostgreSQL thông qua GORM.
  • Search Service: Tiếp nhận các truy vấn tìm kiếm từ người dùng, thực thi truy vấn trên chỉ mục của Elasticsearch và bộ đệm Redis.
  • Đồng bộ hóa dữ liệu (Data Synchronization): Khi một căn hộ được tạo mới hoặc cập nhật tại Property Service, dịch vụ sẽ đóng gói dữ liệu và gửi message đến RabbitMQ Exchange. Search Service đăng ký lắng nghe (Subscribe) hàng đợi từ Exchange này để tiếp nhận dữ liệu và tiến hành đồng bộ (Indexing) vào Elasticsearch theo thời gian thực.
  • Cơ chế tìm kiếm nâng cao: Kết hợp chỉ mục của Elasticsearch với bảng theo dõi tần suất (tracking index) trên Redis để gợi ý từ khóa tìm kiếm theo tiền tố (prefix search) và định vị vị trí bất động sản trên giao diện Google Maps.

3. Hạ tầng mạng trên AWS Cloud

Hệ thống được thiết lập trên môi trường ảo hóa đám mây AWS với cấu trúc mạng:

  • Khởi tạo một Virtual Private Cloud (VPC) với cấu hình dải mạng CIDR tùy chỉnh cùng Internet Gateway chuyên dụng.
  • Phân chia subnet thành Public Subnet (chứa các instance xử lý tầng ngoài và bộ cân bằng tải) và Private Subnet (chứa CSDL PostgreSQL/RDS và các dịch vụ nghiệp vụ nội bộ không mở kết nối trực tiếp ra Internet).
  • Thiết lập bảng định tuyến (Route Tables), phân quyền truy cập thông qua các quy tắc kiểm soát luồng Inbound Rules và Outbound Rules cho từng máy ảo EC2.

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

Chương 1. Tổng quan

Chương 1 khái quát xu hướng phát triển của thị trường bất động sản cho thuê trực tuyến và nhu cầu nhà ở tại các đô thị tập trung đông sinh viên, người lao động. Tác giả trình bày kết quả khảo sát chi tiết 4 hệ thống thương mại điện tử du lịch (Airbnb, VRBO, Agoda, Booking.com), chỉ rõ điểm tương đồng và khác biệt về tính năng. Từ đó, chương xác định mục tiêu xây dựng ứng dụng Go Trek, xác lập phạm vi nghiên cứu, các công cụ sử dụng (Docker, starUML, GoLand, Postman, GitHub) và cấu trúc 6 chương của báo cáo.

Chương 2. Các công nghệ sử dụng xây dựng hệ thống

Chương 2 trình bày cơ sở lý thuyết của từng công nghệ được lựa chọn. Tác giả phân tích các ưu điểm của Go (xử lý đồng thời, quản lý bộ nhớ tự động, biên dịch nhanh) và nhược điểm liên quan đến tính tương thích ngược; giới thiệu cơ chế ORM qua thư viện GORM; phân tích giao thức truyền thông nhị phân gRPC và tệp định nghĩa Protocol Buffers (.proto). Chương làm rõ bản chất của kiến trúc Microservices, tổng quan các dịch vụ AWS (EC2, S3, RDS, KMS, Route53), đặc tả hoạt động của Elasticsearch, cơ chế định tuyến thông điệp của RabbitMQ và giới thiệu cấu trúc của gói thư viện hadanhtuan/go-sdk.

Chương 3. Phân tích và thiết kế hệ thống

Chương 3 chi tiết hóa quy trình nghiệp vụ thuê nhà trực tuyến từ bước tìm kiếm, liên hệ, xem nhà, đặt chỗ, thanh toán đến đánh giá sau lưu trú. Tác giả xây dựng danh mục yêu cầu chức năng (phân hệ người dùng và phân hệ quản trị admin) cùng các yêu cầu phi chức năng (tốc độ thực thi, tính bảo mật của tài khoản, tính toàn vẹn dữ liệu). Chương cung cấp sơ đồ Use Case tổng quát, danh sách 3 Actors, 14 Use Cases kèm bảng đặc tả chi tiết (tiêu biểu như ca sử dụng Tạo căn hộ, Phê duyệt yêu cầu, Đăng ký/Đăng nhập), sơ đồ phân rã chức năng và mô hình dữ liệu quan hệ gồm các thực thể Property, Login session, Amenity, User.

Chương 4. Triển khai hệ thống trên mô hình Microservices

Chương 4 mô tả quá trình cài đặt hệ thống thực tế thông qua Docker Compose cho CSDL và API-Gateway. Nội dung trọng tâm của chương là thử nghiệm cơ chế đồng bộ dữ liệu giữa Property Service và Search Service thông qua RabbitMQ Exchange, đo lường tỉ lệ message/giây được xử lý. Tác giả trình bày phương thức hiện thực tính năng gợi ý từ khóa tìm kiếm gần đây trên Redis, gợi ý theo prefix, kết hợp bản đồ Google Maps và từng bước cấu hình hạ tầng mạng AWS (thiết lập VPC, Custom Internet Gateway, Route Table, cấu hình Inbound/Outbound Rules cho Public Subnet và Private Subnet).

Chương 5. Một số màn hình của trang web

Chương 5 minh họa kết quả xây dựng giao diện ứng dụng web Go Trek bằng các ảnh chụp màn hình thực tế, bao gồm: sơ đồ điều hướng giao diện, trang chủ, màn hình đăng nhập, đăng ký, quy trình tạo căn hộ hoàn chỉnh qua 9 bước liên tiếp (nhập thông tin, tiện ích, tải ảnh, định giá), màn hình chi tiết căn hộ kèm danh mục tiện ích, thanh tìm kiếm chính, popup lọc chi tiết, phân loại căn hộ theo chuyên mục (Country Side), giao diện bản đồ hiển thị marker và trang quản trị căn hộ của chủ nhà.

Chương 6. Kết luận và hướng phát triển

Chương 6 tổng kết các kết quả đạt được sau quá trình nghiên cứu và triển khai dự án, đánh giá mức độ hoàn thành so với mục tiêu ban đầu, đồng thời chỉ ra những mặt hạn chế còn tồn đọng và đề xuất định hướng phát triển hoàn thiện ứng dụng trong tương lai.


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

Kết quả chính

  • Xây dựng hoàn chỉnh ứng dụng web thuê nhà: Phát triển thành công hệ thống web Go Trek với hai phân hệ người dùng (khách thuê, chủ nhà) và quản trị viên (Admin), đáp ứng toàn bộ luồng nghiệp vụ từ đăng ký, đăng nhập, quản lý thông tin cá nhân, đăng bài tạo căn hộ, tìm kiếm, đặt chỗ và đánh giá chất lượng.
  • Quy trình tạo căn hộ chuẩn hóa: Thiết kế giao diện biểu mẫu tạo căn hộ trực quan chia thành 9 bước cụ thể, giúp chủ nhà cung cấp đầy đủ thông tin về vị trí, hình ảnh, tiện ích và giá thuê theo ngày.
  • Tối ưu hóa công cụ tìm kiếm: Ứng dụng thành công Elasticsearch kết hợp bộ đệm Redis để thực hiện tìm kiếm căn hộ theo thời gian thực, hỗ trợ gợi ý từ khóa dựa trên lịch sử truy vấn (tracking index) và tìm kiếm theo tiền tố (prefix), đồng thời hiển thị trực quan địa điểm trên Google Maps.
  • Hiện thực hóa kiến trúc Microservices và Hàng đợi thông điệp: Triển khai độc lập các dịch vụ (API-Gateway, Property Service, Search Service) kết nối qua gRPC và đồng bộ dữ liệu bất đồng bộ qua RabbitMQ Exchange.
  • Xây dựng thư viện dùng chung: Nhóm tác giả tự phát triển gói SDK hadanhtuan/go-sdk giúp đóng gói cấu hình, chuẩn hóa giao diện Request/Response của API và tích hợp sẵn các driver kết nối PostgreSQL, Redis, Elasticsearch, RabbitMQ và AWS.
  • Triển khai hạ tầng đám mây: Cấu hình thành công môi trường mạng an toàn trên AWS VPC với sự tách biệt giữa Public Subnet và Private Subnet.

Giải pháp và đóng góp

  • Cung cấp một mô hình kiến trúc tham chiếu hoàn chỉnh bằng ngôn ngữ Golang cho các ứng dụng thương mại điện tử/dịch vụ lưu trú vừa và nhỏ, khắc phục các nhược điểm về hiệu năng và nghẽn cổ chai của mô hình Monolithic truyền thống.
  • Đưa ra giải pháp đồng bộ dữ liệu hiệu quả giữa CSDL quan hệ (PostgreSQL) và công cụ tìm kiếm toàn văn (Elasticsearch) thông qua Message Broker (RabbitMQ), đảm bảo tính nhất quán dữ liệu mà không gây suy giảm hiệu năng xử lý của dịch vụ chính.

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

Hạn chế

  • Do thời gian thực hiện có hạn và giới hạn về nguồn lực công nghệ của nhóm sinh viên, một số tính năng nâng cao phục vụ quản trị sâu và thanh toán tự động phức tạp chưa được tích hợp toàn diện.
  • Hệ thống mới dừng lại ở mức độ triển khai thử nghiệm trên môi trường máy ảo và mạng thử nghiệm AWS, chưa trải qua các bài kiểm thử chịu tải quy mô lớn (stress test) với lượng truy cập đồng thời cao từ người dùng thực tế.

Hướng nghiên cứu tiếp

  • Mở rộng và hoàn thiện các chức năng nâng cao cho ứng dụng (tích hợp cổng thanh toán trực tuyến chính thức, tự động hóa giải quyết tranh chấp giữa chủ nhà và khách thuê).
  • Tối ưu hóa hiệu năng của các microservices, nghiên cứu áp dụng các công cụ quản lý container phân tán như Kubernetes (K8s) để nâng cao khả năng tự phục hồi và mở rộng linh hoạt.
  • Phát triển thêm ứng dụng trên nền tảng di động (Mobile App) để tăng tính tiện lợi cho người dùng và chủ căn hộ.

Giá trị tham khảo

Khóa luận là tài liệu học thuật và kỹ thuật có giá trị tham khảo hữu ích cho:

  • Sinh viên ngành Hệ thống Thông tin, Kỹ thuật Phần mềm và Khoa học Máy tính: Học tập phương pháp phân tích yêu cầu, thiết kế sơ đồ Use Case theo chuẩn UML và cách thức tổ chức cơ sở dữ liệu quan hệ cho bài toán cho thuê nhà trực tuyến.
  • Lập trình viên và người nghiên cứu kiến trúc Microservices trên nền tảng Go: Tham khảo mô hình phân chia dịch vụ, cách sử dụng gRPC/Protocol Buffers thay thế REST API trong giao tiếp nội bộ, cách xây dựng SDK dùng chung (go-sdk) và giải pháp đồng bộ dữ liệu thông qua RabbitMQ.
  • Người triển khai giải pháp tìm kiếm và hạ tầng đám mây: Tham khảo quy trình tích hợp Elasticsearch + Redis cho bài toán tìm kiếm tiền tố và mô hình thiết kế VPC phân tầng (Public/Private Subnet) trên AWS.

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

1. Hệ thống Go Trek giải quyết bài toán đồng bộ dữ liệu giữa việc tạo căn hộ và tìm kiếm như thế nào?
Hệ thống sử dụng cơ chế xử lý bất đồng bộ thông qua RabbitMQ. Khi chủ nhà hoàn tất việc tạo hoặc cập nhật căn hộ tại Property Service, dữ liệu được ghi vào PostgreSQL, đồng thời một thông điệp (message) được bắn lên RabbitMQ Exchange. Search Service đăng ký nhận thông điệp từ hàng đợi này để xử lý và lập chỉ mục (index) sang Elasticsearch mà không làm chậm luồng phản hồi của Property Service.

2. Giao thức gRPC và Protocol Buffers đóng vai trò gì trong kiến trúc của hệ thống?
gRPC được sử dụng làm phương thức giao tiếp chính giữa các máy chủ dịch vụ nội bộ (server-to-server). Thay vì truyền tải dữ liệu dạng văn bản JSON hay XML, gRPC sử dụng Protocol Buffers (proto3) để mã hóa và truyền tải dữ liệu nhị phân, giúp giảm tải tài nguyên CPU trong quá trình serialize/deserialize và tăng tốc độ phản hồi giữa các microservices.

3. Thư viện hadanhtuan/go-sdk được nhóm tác giả xây dựng nhằm mục đích gì?
hadanhtuan/go-sdk là bộ công cụ phần mềm nội bộ bằng ngôn ngữ Go, có nhiệm vụ chuẩn hóa cấu trúc dự án: cung cấp hàm kết nối gRPC, tải tệp cấu hình môi trường, chuẩn hóa khuôn mẫu API Request và Response, đồng thời tích hợp sẵn các phương thức kết nối với PostgreSQL, Redis, Elasticsearch, RabbitMQ và AWS.

4. Quy trình đăng bài tạo mới một căn hộ của chủ nhà (Host) gồm những bước nào?
Quy trình tạo căn hộ trên giao diện web Go Trek được thiết kế trực quan qua 9 bước liên tiếp: từ việc nhập các thông tin mô tả chung, chọn vị trí địa lý, khai báo danh mục tiện ích (amenities), tải lên bộ sưu tập hình ảnh thực tế, thiết lập quy định cho thuê, đến bước thứ 9 là nhập mức giá thuê theo đêm và xác nhận lưu thông tin lên hệ thống.

5. Kiến trúc mạng AWS được nhóm tác giả thiết kế như thế nào để đảm bảo tính an toàn?
Nhóm tác giả thiết lập một hạ tầng VPC riêng biệt có gắn Internet Gateway, chia thành Public Subnet và Private Subnet. Các thành phần giao tiếp ngoài được đặt ở Public Subnet với bảng định tuyến và Inbound Rules chặt chẽ, trong khi cơ sở dữ liệu và các microservices nghiệp vụ nội bộ được đặt trong Private Subnet nhằm ngăn chặn hoàn toàn việc truy cập trái phép trực tiếp từ Internet.


Kết luận

Khóa luận tốt nghiệp của sinh viên Trần Trọng Tín và Hà Danh Tuấn đã nghiên cứu và hiện thực hóa thành công ứng dụng web cho thuê nhà trực tuyến Go Trek dựa trên kiến trúc phân tán Microservices với ngôn ngữ Golang. Đề tài thể hiện sự hoàn thiện về mặt kỹ thuật thông qua việc kết hợp gRPC, RabbitMQ, Elasticsearch, Redis và triển khai hạ tầng trên AWS VPC. Kết quả nghiên cứu là tài liệu tham khảo có giá trị cao đối với sinh viên và kỹ sư phần mềm quan tâm đến việc xây dựng hệ thống hướng dịch vụ quy mô mở rộng.