Bối cảnh và vấn đề nghiên cứu
Trong bối cảnh khoa học và công nghệ thông tin phát triển mạnh mẽ, việc ứng dụng các giải pháp phần mềm vào công tác quản trị vận hành đã trở thành nhu cầu thiết yếu đối với các doanh nghiệp kinh doanh dịch vụ ẩm thực và đồ uống (F&B). Quy mô hoạt động của các nhà hàng, quán ăn ngày càng mở rộng, kéo theo sự gia tăng về số lượng khách hàng, danh mục mặt hàng và khối lượng hóa đơn phát sinh hàng ngày. Phương thức quản lý truyền thống bộc lộ nhiều bất cập trong việc lưu trữ, tra cứu chứng từ, cũng như tổng hợp số liệu báo cáo doanh thu định kỳ, dễ dẫn đến sai sót và tiêu tốn nhiều thời gian, nhân lực.
Hiện nay trên thị trường đã có một số giải pháp quản lý bán hàng tiêu biểu như KiotViet hoặc PopApp. Tuy nhiên, các hệ sinh thái này thường đòi hỏi chi phí đầu tư ban đầu lớn cho các thiết bị phần cứng chuyên dụng, cùng các khoản phí định kỳ cho việc lắp đặt, bảo trì và duy trì hệ thống. Nhằm giải quyết bài toán tối ưu chi phí, nâng cao hiệu suất hoạt động, tăng tính sẵn sàng và khả năng mở rộng quy mô, đề tài "Ứng dụng các công nghệ React Native, React và Spring Boot trong kiến trúc Microservices để xây dựng phần mềm quản lý bán hàng cho nhà hàng và dịch vụ đồ uống" đã được thực hiện.
Đề tài xác định rõ các mục tiêu và nhiệm vụ nghiên cứu cụ thể:
- Nghiên cứu, nắm vững các quy trình nghiệp vụ bán hàng, nhập kho nguyên liệu và quản lý thông tin trong ngành dịch vụ nhà hàng - đồ uống.
- Nghiên cứu cơ sở lý thuyết, công cụ và nền tảng lập trình hiện đại bao gồm kiến trúc Microservices, hệ sinh thái Spring Framework (Spring Boot, Spring Cloud, Spring Security), React, React Native, Redux Saga và GraphQL.
- Phân tích, thiết kế và xây dựng hoàn chỉnh hệ thống phần mềm quản lý bán hàng hoạt động đa nền tảng (Mobile, Tablet, Website), cho phép quản lý vận hành trực tiếp trên các thiết bị cá nhân của người dùng và nhân viên mà không cần phụ thuộc vào phần cứng chuyên dụng.
- Đối tượng nghiên cứu: Quy trình nghiệp vụ bán hàng, nhập hàng, quản lý vận hành cửa hàng F&B; các công nghệ Back-End (Java, Spring Boot, Spring Security, Spring Cloud, MySQL, Microservices); các công nghệ Front-End (HTML, CSS, JavaScript, TypeScript, React, React Native, Redux Saga); các công nghệ và công cụ phụ trợ (Docker, Docker Compose, Gradle, Keycloak, Zipkin, Prometheus, Grafana).
- Phạm vi nghiên cứu: Tập trung vào các quy trình nghiệp vụ bán hàng và quản lý của doanh nghiệp kinh doanh nhà hàng, dịch vụ đồ uống.
- Thời gian và địa điểm thực hiện: Đề tài được giao ngày 30/01/2023 và hoàn thành bảo vệ ngày 08/09/2023 tại Khoa Công nghệ Thông tin, Trường Đại học Nông Lâm Thành phố Hồ Chí Minh, dưới sự hướng dẫn của ThS. Phan Đình Long và cán bộ phản biện TS. Nguyễn Thị Phương Trâm.
Cơ sở lý thuyết và phương pháp
Khóa luận xây dựng nền tảng lý thuyết dựa trên các mô hình kiến trúc phần mềm phân tán và ngăn xếp công nghệ đa nền tảng:
Khung kiến trúc và mô hình thiết kế
- Kiến trúc Microservices: Hệ thống phân rã logic nghiệp vụ phức tạp thành các dịch vụ độc lập, có tính kết nối lỏng (loose coupling) và gắn kết cao (high cohesion). So với kiến trúc nguyên khối (Monolithic) và kiến trúc hướng dịch vụ (SOA), Microservices mang lại khả năng mở rộng độc lập cho từng dịch vụ, tối ưu hóa chu kỳ tích hợp và triển khai liên tục (CI/CD), đồng thời cho phép lựa chọn công nghệ chuyên biệt cho từng bài toán cụ thể.
- Kiến trúc Lục giác (Hexagonal Architecture / Ports and Adapters): Khắc phục những hạn chế của mô hình Ba lớp (Three-Layer) truyền thống bằng cách cô lập hoàn toàn tầng Domain Logic (lõi nghiệp vụ) khỏi các yếu tố phụ thuộc bên ngoài (cơ sở dữ liệu, giao diện người dùng, giao thức mạng) thông qua các cổng giao tiếp (Ports) và bộ điều hợp (Adapters).
- Thiết kế hướng miền (Domain-Driven Design - DDD): Định hình các ranh giới nghiệp vụ (Bounded Contexts) để phân chia dữ liệu và dịch vụ chuẩn xác.
Ngăn xếp công nghệ Back-End và Hạ tầng
- Hệ sinh thái Spring Framework: Khai thác các nguyên lý Inversion of Control (IoC), Dependency Injection (DI) và lập trình hướng khía cạnh (Aspect Oriented Programming - AOP). Sử dụng Spring Boot nhằm áp dụng quy ước cấu hình sẵn có (convention-over-configuration), tích hợp máy chủ nhúng (Tomcat, Jetty, Undertow) và Spring Boot Actuator phục vụ kiểm tra trạng thái hệ thống.
- Spring Cloud: Cung cấp hạ tầng phân tán bao gồm Spring Cloud Gateway (định tuyến và kiểm soát lưu lượng), Eureka Server (Service Discovery - định danh và đăng ký dịch vụ động), cơ chế cân bằng tải (Load Balancing), Circuit Breaker (sử dụng thư viện Resilience4j để cô lập lỗi cục bộ) và Spring Cloud Config Server (lưu trữ và quản lý cấu hình tập trung từ kho lưu trữ GitHub).
- Bảo mật và Định danh: Sử dụng Keycloak kết hợp Spring Security để thực hiện xác thực tập trung (Authentication), phân quyền (Authorization) và quản lý phiên người dùng (Session Management).
- Cơ sở dữ liệu: Hệ thống áp dụng mô hình cơ sở dữ liệu phân tán theo dịch vụ (Database-per-service pattern) trên nền tảng MySQL.
Ngăn xếp công nghệ Front-End và Giao tiếp dữ liệu
- React JS & React Native: Xây dựng giao diện Web cho nhà quản lý/nhân viên và ứng dụng di động đa nền tảng (iOS/Android) cho khách hàng/nhân viên. Khai thác cơ chế Virtual DOM, Reconciliation và luồng dữ liệu một chiều (Unidirectional data flow) trong React; tận dụng cơ chế Bridge và Hot-reloading trong React Native để tối ưu hóa hiệu năng và tốc độ phát triển.
- Redux Saga: Thư viện middleware quản lý các tác vụ bất đồng bộ và hiệu ứng phụ (side effects) thông qua Generator Functions (
function*, yield), các Effect chuẩn (Call, Put, Take, Delay), mô hình Watcher/Worker cùng cơ chế Forking và Blocking.
- GraphQL: Giao thức truy vấn dữ liệu theo cấu hình Schema định kiểu tĩnh (Type System / SDL) với điểm cuối duy nhất (Single endpoint) và các Resolver, giải quyết triệt để vấn đề truy xuất thừa dữ liệu (Overfetching) hoặc thiếu dữ liệu (Underfetching) so với RESTful API truyền thống.
| Tiêu chí so sánh |
Kiến trúc Monolithic |
Kiến trúc Microservices |
| Tính phân tách |
Đóng gói toàn bộ logic trong một khối duy nhất, phụ thuộc chặt chẽ |
Phân tách logic thành nhiều dịch vụ độc lập theo nghiệp vụ |
| Ngăn xếp công nghệ |
Đồng nhất một ngôn ngữ và một nền tảng cho toàn bộ hệ thống |
Cho phép đa dạng hóa công nghệ và ngôn ngữ cho từng dịch vụ |
| Khả năng mở rộng |
Phải nhân bản và mở rộng toàn bộ khối ứng dụng |
Mở rộng độc lập cho từng dịch vụ có nhu cầu tải cao |
| Triển khai & CI/CD |
Rủi ro cao khi cập nhật, phải tái triển khai toàn bộ ứng dụng |
Hỗ trợ phân phối và triển khai độc lập, liên tục từng phần |
| Quản trị cơ sở dữ liệu |
Sử dụng chung một cơ sở dữ liệu duy nhất |
Mỗi dịch vụ sở hữu cơ sở dữ liệu riêng biệt |
Thiết kế và triển khai
Hệ thống được thiết kế theo mô hình phân tán, chia tách rõ ràng giữa các phân hệ chức năng và hạ tầng mạng:
1. Phân rã Microservices và Cơ sở dữ liệu
Hệ thống quản lý bán hàng được bóc tách thành 5 dịch vụ nghiệp vụ chính, mỗi dịch vụ sở hữu một lược đồ cơ sở dữ liệu (Schema) riêng biệt:
user-service: Quản lý thông tin tài khoản người dùng, vai trò (Role), nhóm quyền (Group), tích hợp trực tiếp với máy chủ xác thực Keycloak.
product-service: Quản lý danh mục sản phẩm, nhóm sản phẩm, công thức chế biến (MaterialProduct) và hình ảnh (Image).
inventory-service: Quản lý kho nguyên vật liệu (Material), nhà cung cấp (Supplier), đơn nhập hàng (ReceiptOrder, ReceiptInventory) và phiếu chi (PaySlipOrder, PaySlipInventory).
order-service: Quản lý thông tin bàn (Table, GroupTables), quy trình đặt bàn, tạo đơn hàng, quản lý trạng thái gọi món và chi tiết đơn hàng.
payment-service: Xử lý các giao dịch thanh toán hóa đơn, tích hợp cổng thanh toán trực tuyến PayPal.
2. Thiết kế kiến trúc Hexagonal trong dịch vụ
Nhóm tác giả đã áp dụng kiến trúc Hexagonal vào các dịch vụ trọng tâm (tiêu biểu như dịch vụ đặt món). Nghiệp vụ được phân tách thành 4 nhóm Service thông qua các Use Case Interfaces, kết nối với bên ngoài thông qua Ports và Adapters, đảm bảo tầng Domain Layer độc lập hoàn toàn với Framework và Cơ sở dữ liệu.
3. Phân bổ kiến trúc máy chủ và vận hành
Hạ tầng hệ thống được đóng gói bằng Docker/Docker Compose và phân bổ trên các máy chủ chuyên biệt:
- Máy chủ Microservices: Chứa các dịch vụ nghiệp vụ (
user-service, product-service, inventory-service, order-service, payment-service) kết nối đến các phiên bản cơ sở dữ liệu MySQL tương ứng, giao tiếp với bên ngoài qua Spring Cloud Gateway.
- Máy chủ Keycloak: Chịu trách nhiệm quản lý Identity & Access Management, cấp phát token và kiểm soát quyền truy cập API.
- Máy chủ Config-Server & Eureka: Định danh mạng (Service Discovery) và đồng bộ tệp cấu hình tập trung từ kho mã nguồn.
- Hệ thống giám sát và vận hành phụ trợ: Tích hợp Apache Kafka cho truyền thông điệp phân tán, Zipkin cho truy vết phân tán (Distributed Tracing), Prometheus và Grafana phục vụ thu thập số liệu và trực quan hóa trạng thái hệ thống.
Nội dung chính theo từng chương
Chương 1: Giới thiệu
Chương 1 trình bày tổng quan về tính cấp thiết của việc hiện đại hóa quy trình quản lý nhà hàng, phân tích những điểm nghẽn của phương pháp thủ công và các hạn chế về mặt chi phí của phần mềm thương mại hiện hành. Tác giả xác định rõ các mục tiêu, đối tượng nghiên cứu (nghiệp vụ F&B, ngăn xếp công nghệ Java/Spring, React/React Native, Docker, Keycloak) và phạm vi nghiên cứu từ ngày 30/01/2023 đến ngày 08/09/2023.
Chương 2: Tổng quan công nghệ
Chương 2 cung cấp cơ sở lý thuyết chuyên sâu về toàn bộ công nghệ được áp dụng:
- So sánh chi tiết giữa Microservices với Monolithic và SOA.
- Phân tích kiến trúc 5 phần của Spring Framework (Core Container, Data Access/Integration, Web, AOP & Instrumentation, Test) và các module mở rộng (Spring Boot, Spring Security, Spring Cloud).
- Trình bày cơ chế hoạt động của React JS (Virtual DOM, Reconciliation) và React Native (Bridge, Native UI).
- Phân tích thư viện Redux Saga (Generator Functions, Effects, Watcher/Worker).
- Đánh giá ưu điểm của GraphQL so với REST trong tối ưu hóa truy vấn client-server.
- Giới thiệu các công cụ hạ tầng: Docker, Apache Kafka, Keycloak, Zipkin, Prometheus, Grafana và mô hình kiến trúc Hexagonal.
Chương 3: Phân tích và thiết kế hệ thống
Chương 3 tập trung phân tích bài toán thực tế và mô hình hóa hệ thống:
- Xác định danh sách yêu cầu chức năng cho 2 ứng dụng: Ứng dụng đặt món/đặt bàn dành cho khách hàng và Ứng dụng quản lý dành cho chủ cửa hàng/nhân viên.
- Xây dựng hệ thống Use Case chi tiết (Đăng nhập, Đăng ký, Đăng xuất, Quên mật khẩu, Xem/Quản lý sản phẩm, Quản lý giỏ hàng, Đặt bàn, Đặt món, Hủy đơn hàng, Quản lý người dùng, Tư vấn, Nhập kho).
- Thiết kế các sơ đồ tuần tự (Sequence Diagrams) cho các quy trình: Đăng nhập, Đăng ký, Quên mật khẩu, Đặt món, Hủy đặt món, Nhập kho, Đặt bàn và Thanh toán PayPal.
- Hiện thực hóa sơ đồ lớp (Class Diagrams) và Domain Layer theo kiến trúc Hexagonal cho từng dịch vụ riêng biệt (
product-service, inventory-service, user-service, order-service, payment-service).
- Thiết kế cơ sở dữ liệu chi tiết cho từng dịch vụ độc lập.
Chương 4: Kiến trúc tổng thể của hệ thống
Chương 4 mô tả chi tiết kiến trúc phần mềm và kiến trúc triển khai phần cứng/hạ tầng mạng:
- Phân tích cơ chế Database-per-service nhằm triệt tiêu sự phụ thuộc dữ liệu giữa các dịch vụ.
- Thiết lập Eureka Server để quản lý danh bạ dịch vụ động và hỗ trợ Load Balancing.
- Triển khai Spring Cloud Config Server kết nối kho lưu trữ GitHub để quản lý cấu hình tập trung.
- Cấu hình Keycloak và Spring Security để bảo mật toàn bộ các điểm cuối API.
- Bố trí cấu hình các máy chủ: Máy chủ Microservices, Máy chủ Keycloak, Máy chủ Config-Server.
Chương 5: Kết quả đạt được
Chương 5 tổng kết các kết quả đạt được sau quá trình triển khai:
- Hoàn thiện giao diện ứng dụng quản lý web và ứng dụng di động.
- Trích xuất biểu đồ tổng doanh thu theo ngày và biểu đồ top những sản phẩm bán chạy nhất.
- Kiểm thử các giao diện điều hành hệ thống: Giao diện quản lý người dùng Keycloak và giao diện quản lý dịch vụ Eureka Server.
- Đánh giá điểm mạnh, những mặt hạn chế và các thách thức kỹ thuật gặp phải trong quá trình thực hiện.
Kết quả và đóng góp
Khóa luận đã hoàn thành các nội dung theo đúng nhiệm vụ được giao với các kết quả cụ thể:
Kết quả triển khai thực tế
- Xây dựng thành công hệ sinh thái phần mềm quản lý bán hàng cho ngành nhà hàng và đồ uống, bao gồm ứng dụng Web quản lý và ứng dụng Di động đa nền tảng.
- Vận hành ổn định hệ thống phân tán theo kiến trúc Microservices, tách biệt 5 dịch vụ nghiệp vụ chính với cơ sở dữ liệu độc lập.
- Tích hợp hoàn chỉnh các thành phần điều phối hạ tầng: Cổng API Gateway, Trung tâm định danh Eureka Server, Máy chủ cấu hình tập trung Config Server, Hệ thống bảo mật Keycloak và Cổng thanh toán trực tuyến PayPal.
- Xuất được các biểu đồ trực quan phục vụ thống kê kinh doanh như: Biểu đồ tổng doanh thu theo ngày của cửa hàng và Biểu đồ top những sản phẩm bán chạy nhất theo ngày.
Đóng góp kỹ thuật và ứng dụng
- Tối ưu hóa chi phí đầu tư: Giúp các cơ sở kinh doanh F&B có thể vận hành quy trình bán hàng, đặt bàn, gọi món và quản lý kho trực tiếp trên các thiết bị cá nhân (điện thoại thông minh, máy tính xách tay) mà không cần đầu tư các thiết bị POS chuyên dụng đắt tiền.
- Khả năng mở rộng và chịu lỗi: Ứng dụng thành công mẫu thiết kế Circuit Breaker (Resilience4j) và kiến trúc Hexagonal, giúp hệ thống không bị sập dây chuyền khi một dịch vụ gặp sự cố, đồng thời dễ dàng mở rộng tính năng mới mà không làm ảnh hưởng đến mã nguồn hiện tại.
- Tối ưu hóa giao tiếp mạng: Ứng dụng GraphQL giúp tầng Front-End chủ động định dạng dữ liệu cần lấy, giảm thiểu dung lượng truyền tải trên đường truyền mạng.
Hạn chế và hướng nghiên cứu tiếp
Dựa trên phạm vi và các thách thức được tác giả ghi nhận trong văn bản:
Hạn chế
- Việc phân tách ứng dụng thành nhiều Microservices làm gia tăng độ phức tạp trong công tác quản lý, điều hành và giám sát toàn bộ các dịch vụ khi vận hành đồng thời.
- Chi phí giao tiếp mạng giữa các dịch vụ phân tán tăng lên, có thể tác động đến độ trễ xử lý nếu quy mô giao dịch tăng đột biến.
- Việc quản lý các phiên bản phụ thuộc và cấu hình chi tiết trong hệ sinh thái Spring Framework đòi hỏi kỹ năng chuyên sâu, gây khó khăn cho quá trình kiểm thử tích hợp.
- Giao thức GraphQL đòi hỏi kiểm soát chặt chẽ để tránh các nguy cơ về an toàn bảo mật liên quan đến truy vấn phức tạp lạm dụng tài nguyên máy chủ.
Hướng nghiên cứu tiếp
- Tiếp tục tối ưu hóa hiệu năng giao tiếp mạng và cơ chế đồng bộ dữ liệu bất đồng bộ giữa các dịch vụ thông qua Apache Kafka.
- Nghiên cứu hoàn thiện các kịch bản kiểm thử tự động toàn diện cho hệ thống phân tán.
- Nâng cấp và mở rộng các tính năng phân tích dữ liệu kinh doanh nâng cao nhằm hỗ trợ việc ra quyết định quản trị chuẩn xác hơn.
Giá trị tham khảo
Khóa luận là tài liệu tham khảo có giá trị chuyên môn cao cho:
- Sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm đang thực hiện đồ án tốt nghiệp hoặc nghiên cứu về kiến trúc Microservices và hệ thống phân tán.
- Các nhà phát triển phần mềm muốn tìm hiểu mô hình tích hợp thực tế giữa ngăn xếp Back-End (Spring Boot, Spring Cloud, Spring Security, Keycloak) và ngăn xếp Front-End (React, React Native, Redux Saga, GraphQL).
- Những nghiên cứu ứng dụng kiến trúc Lục giác (Hexagonal Architecture / Ports and Adapters) và mô hình cơ sở dữ liệu riêng biệt (Database-per-service) trong các bài toán quản lý bán hàng và vận hành doanh nghiệp thực tế.
Câu hỏi thường gặp
1. Khóa luận giải quyết bài toán nghiệp vụ gì và phục vụ đối tượng nào?
Khóa luận giải quyết bài toán quản lý quy trình hoạt động bán hàng, đặt bàn, gọi món, quản lý nguyên vật liệu nhập kho và thống kê doanh thu cho các nhà hàng và cửa hàng dịch vụ đồ uống (F&B). Hệ thống phục vụ 2 nhóm đối tượng chính: khách hàng sử dụng dịch vụ và đội ngũ quản lý/nhân viên cửa hàng.
2. Hệ thống Back-End được chia thành những Microservices nào và lưu trữ dữ liệu ra sao?
Hệ thống Back-End được chia thành 5 microservices nghiệp vụ độc lập: user-service (người dùng), product-service (sản phẩm), inventory-service (kho hàng), order-service (đặt món/đặt bàn) và payment-service (thanh toán). Hệ thống áp dụng mô hình Database-per-service, trong đó mỗi dịch vụ kết nối và quản lý một cơ sở dữ liệu MySQL riêng biệt.
3. Hệ thống sử dụng giải pháp nào để định danh dịch vụ và quản lý cấu hình tập trung?
Hệ thống sử dụng Eureka Server (thuộc Spring Cloud) để làm Service Discovery, giúp các dịch vụ tự động đăng ký và tìm kiếm lẫn nhau mà không cần cấu hình cứng địa chỉ IP/cổng. Đồng thời, hệ thống sử dụng Spring Cloud Config Server kết nối với kho lưu trữ GitHub để lưu trữ và phân phối cấu hình tập trung cho tất cả các dịch vụ khi khởi chạy.
4. Giải pháp bảo mật và phân quyền trong hệ thống được hiện thực như thế nào?
Bảo mật được thực hiện tập trung thông qua máy chủ Keycloak kết hợp với Spring Security tại từng dịch vụ. Keycloak quản lý tài khoản, vai trò và xác thực người dùng, sau đó Spring Security dựa trên thông tin ủy quyền để kiểm soát quyền truy cập tới các điểm cuối API của từng microservice.
5. Vai trò của GraphQL và Redux Saga trong hệ thống là gì?
GraphQL đóng vai trò là tầng giao tiếp giữa Client và Server, cho phép Client truy vấn chính xác các trường dữ liệu cần thiết qua một endpoint duy nhất, giúp tối ưu băng thông mạng và loại bỏ tình trạng Overfetching/Underfetching. Trong khi đó, Redux Saga được sử dụng tại Front-End (React và React Native) như một middleware xử lý các tác vụ bất đồng bộ (gọi API, side effects) thông qua các hàm Generator, giúp luồng dữ liệu rõ ràng và dễ bảo trì.
Kết luận
Khóa luận tốt nghiệp của sinh viên Nguyễn Lê Thành và Dương Thị Minh Như đã nghiên cứu và ứng dụng thành công kiến trúc Microservices cùng hệ sinh thái Spring Boot, React, React Native, Redux Saga và GraphQL vào bài toán quản lý bán hàng ngành F&B. Hệ thống đã hiện thực hóa giải pháp vận hành đa nền tảng linh hoạt trên thiết bị cá nhân, tối ưu hóa chi phí đầu tư phần cứng và nâng cao tính sẵn sàng trong quản trị doanh nghiệp. Toàn bộ công trình đã được hoàn thành, nghiệm thu và bảo vệ thành công trước Hội đồng chấm luận văn cử nhân tại Trường Đại học Nông Lâm Thành phố Hồ Chí Minh vào tháng 09 năm 2023.