PHẦN MỞ ĐẦU 1. TÍNH CẤP THIẾT CỦA ĐỀ TÀI Trong thời đại công nghệ với sự phát triển của khoa học - kỹ thuật chất lượng cuộc sống ngày càng được cải thiện. Nhu cầu mua sắm và sử dụng các sản phẩm xanh, sạch, đẹp và tốt cho môi trường đang được ưu tiên. Tuy nhiên, việc có thể lựa chọn chính xác loại sản phẩm phù hợp với nhu cầu, túi tiền của mình cũng là vấn đề của nhiều người.
Mỗi sản phẩm cũng đều có những ưu, nhược điểm riêng khi sử dụng. Với mong muốn giới thiệu, cung cấp các thông tin cần thiết về các sản phẩm xanh, sạch, đẹp và có nguồn gốc rõ ràng, nhằm định hướng cho việc người dùng có cái nhìn cũng như lựa chọn dễ dàng hơn. Cùng với đó, website còn cung cấp các phương thức thanh toán trực tuyến, để việc mua sắm sản phẩm trở nên thuận tiện, nhanh chóng. Vì vậy, nhóm quyết định thực hiện luận văn tốt nghiệp với đề tài “Xây dựng website kinh doanh sản phẩm xanh”.
MỤC ĐÍCH CỦA ĐỀ TÀI Đề tài “ Xây dựng website kinh doanh sản phẩm xanh” bao gồm các mục tiêu cần đạt được: - Thiết kế website có giao diện bắt mắt, dễ sử dụng phù hợp với trải nghiệm của người dùng. - Xây dựng website giúp đơn giản hoá quá trình mua hàng, bắt đầu từ việc tìm kiếm, xem sản phẩm chi tiết, giỏ hàng, đặt mua và hỗ trợ thanh toán trực tuyến các sản phẩm. Sau khi mua hàng, người dùng được đánh giá các sản phẩm mà mình đã mua. - Xây dựng và phát triển phục vụ cho việc quản lý và thống kê doanh số bán được sản phẩm trên website.
- Thực hiện phân quyền người dùng hệ thống đồng thời phải bảo mật các dữ liệu quan trọng của người dùng. - Nghiên cứu và sử dụng kiến trúc Microservice, các công nghệ như Spring Boot và React JS trong việc xây dựng website. ĐỐI TƯỢNG NGHIÊN CỨU 20 Đề tài này có đối tượng cần tập trung nghiên cứu là nhu cầu sử dụng và mua sắm sản phẩm xanh. Cùng với đó là vận dụng các kiến thức thực tế trong việc xây dựng website bao gồm từ quy trình tìm kiếm, lựa chọn sản phẩm, đặt hàng và thanh toán, quản lý đơn hàng của người dùng đến việc quản lý sản phẩm, xử lý đơn hàng.
Với các công nghệ nhóm đã nghiên cứu và sử dụng bao gồm: - Kiến trúc Microservice. - ReactJS và các thư viện hỗ trợ như Ant Design, React Query, TailwindCSS trong việc xây dựng giao diện người dùng. - Spring Boot để xây dựng các API phục vụ cho việc truy xuất và xử lý dữ liệu. - Spring Security và JWT để thực hiện các phân quyền và xác thực người dùng hệ thống.
- Cơ sở dữ liệu MySQL trong việc lưu trữ và quản lý dữ liệu. PHẠM VI NGHIÊN CỨU Đề tài được thực hiện dựa trên việc nghiên cứu các website bán hàng trực tuyến đã có từ trước. Dựa vào các nghiên cứu đó, tập trung vào xây dựng và phát triển các yêu cầu chức năng của một website bán hàng cần phải có bao gồm tìm kiếm, hiển thị danh sách và thông tin chi tiết của sản phẩm, lựa chọn sản phẩm, giỏ hàng, đặt hàng, thanh toán trực tuyến, quản lý đơn hàng của bên khách hàng và các chức năng quản lý, thống kê bên phía quản trị viên. KẾT QUẢ DỰ KIẾN ĐẠT ĐƯỢC Trong quá trình thực hiện đề tài này, nhóm dự kiến đạt được các kết quả - Về phía Quản trị viên o Giao diện đẹp mắt, dễ sử dụng.
o Thống kê được doanh thu, sản phẩm, đơn hàng. o Quản lý các dữ liệu cần thiết cho trang web: sản phẩm, đơn hàng, người dùng, đánh giá. - Về phía Người dùng o Giao diện đầy đủ, dễ dàng sử dụng. o Đăng nhập, đăng ký cách thông thường hoặc thông qua tài khoản 21 Google.
o Các chức năng cơ bản của trang web thương mai điện tử: Xem chi tiết, lọc, tìm kiếm các sản phẩm, giỏ hàng, đặt hàng, quản lý thông tin cá nhân, đơn hàng, thanh toán (COD hoặc PayPal) 6. Ý NGHĨA KHOA HỌC VÀ THỰC TIỄN Đồ án khi được sử dụng vào trong thực tiễn nhằm phục vụ cho việc mua sắm, tìm kiếm, lựa chọn sản phẩm xanh và thực hiện thanh toán của người dùng một cách linh hoạt, thuận tiện và có hiệu quả ở bất cứ đâu. Hơn nữa, còn giúp nâng cao tinh thần nghiên cứu và sáng tạo, cống hiến vì cộng đồng, vì một tương lai xanh. Đồng thời, việc xây dựng trang bán hàng trực tuyến còn giúp các sản phẩm dễ dàng tiếp cận được với thị trường, nhiều người hơn so với bán hàng truyền thống điều này góp phần nâng cao doanh thu, lợi nhuận.
22 PHẦN NỘI DUNG CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1. KIẾN TRÚC MICROSERVICE 1. Khái niệm Một hệ thống monolithic là một hệ thống phần mềm trong đó tất cả các chức năng và tính năng đều được tích hợp chặt chẽ với nhau. Mặc dù kiến trúc monolithic có thể đơn giản hóa việc phát triển và triển khai ban đầu, nhưng nó cũng có thể gây ra một số vấn đề khi hệ thống phát triển và mở rộng.
Một số vấn đề của một hệ thống monolithic bao gồm: • Khó mở rộng: khi lưu lượng truy cập tăng, việc mở rộng một hệ thống monolithic có thể trở nên khó khăn do sự phụ thuộc chặt chẽ giữa các thành phần. • Khó bảo trì: việc bảo trì và nâng cấp một hệ thống monolithic có thể trở nên phức tạp và tốn kém do sự phụ thuộc chặt chẽ giữa các thành phần. • Khó tái sử dụng: các thành phần trong một hệ thống monolithic thường khó tái sử dụng trong các dự án khác do sự phụ thuộc chặt chẽ giữa chúng. • Khó kiểm thử: việc kiểm thử một hệ thống monolithic có thể trở nên khó khăn do sự phụ thuộc chặt chẽ giữa các thành phần.
• Code base lớn: các lập trình viên mới vào dự án sẽ khó nắm bắt được project vì lượng thông tin rất lớn. Microservice là một kiến trúc phần mềm trong đó ứng dụng được xây dựng dưới dạng một tập hợp các service nhỏ và độc lập, có thể triển khai và quản lý một cách độc lập [7]. Kiến trúc microservice mang lại nhiều lợi ích, bao gồm: ● Khả năng mở rộng: các dịch vụ có thể được mở rộng độc lập, giúp tăng cường khả năng xử lý của hệ thống. ● Dễ bảo trì: việc bảo trì và nâng cấp các dịch vụ trở nên dễ dàng hơn do chúng được quản lý một cách độc lập.
23 ● Tái sử dụng: các dịch vụ có thể được tái sử dụng trong các dự án khác, giúp tiết kiệm thời gian và chi phí phát triển. ● Dễ kiểm thử: việc kiểm thử các service trở nên dễ dàng hơn do chúng được quản lý một cách độc lập. ● Life cycle độc lập: các service sẽ có life cycle riêng và không phụ thuộc lẫn nhau giúp các nhóm có thể thoải mái hơn trong việc đặt version và release. ● Code base nhỏ: mỗi nhóm sẽ chỉ cần quan tâm và quản lý codebase riêng của service mà họ đang phát triển.
● Deploy nhanh: do life cycle độc lập và các service có thể deploy riêng nên việc dừng các tiến trình đang chạy để khởi tạo các tiến trình mới với các cập nhật mới nhanh hơn nhiều so với monolithic system. API Gateway & Service Discovery 1. API Gateway API Gateway là một thành phần trung gian giữa các client và các service trong một distributed system. Nó đóng vai trò như một cửa vào cho các yêu cầu từ client, xử lý các yêu cầu đó và điều hướng chúng đến service thích hợp [7].
Một số vấn đề mà API Gateway có thể giải quyết: - Định tuyến yêu cầu: định tuyến các yêu cầu từ client đến service thích hợp dựa trên các tiêu chí như URL, phương thức HTTP hoặc thông tin trong header. - Authentication & Authorization: xác thực và phân quyền các yêu cầu từ client trước khi chuyển chúng đến service. - Giới hạn yêu cầu: có thể giới hạn số lượng yêu cầu từ một client trong một khoảng thời gian nhất định để ngăn chặn các cuộc tấn công từ chối dịch vụ (DoS) hoặc giảm thiểu các request bất thường. - Chuyển đổi dữ liệu: có thể chuyển đổi dữ liệu từ một định dạng sang một định dạng khác để phù hợp với yêu cầu của client hoặc service.
API Gateway Một biến thể của API Gateway là pattern Back-end for Front-end. Đây là một pattern tách từng API Gateway riêng biệt cho từng loại Client. Pattern Backend for Frontend 25 1. Service Discovery Service registry là nơi để lưu metadata của các microservice instances (bao gồm vị trí location, host port).
Các microservice instance được đăng ký với service registry khi khởi động và sẽ hủy đăng ký khi bị shutdown. Các thành phần khác cần tìm thông tin của một microservice nào đó thì sẽ tìm thông qua service registry [6]. Để các service trong hệ thống có thể giao tiếp được với nhau thì một service phải biết được IP và Port của service khác, nhưng IP và Port của các service hoặc các Instance của các service không cố định dẫn đến sự khó khăn trong việc quản lý khi mà hệ thống có nhiều service. Để giải quyết vấn đề trên có một phương pháp gọi là Service Discovery.
Khi các service khởi động nó sẽ tự động đăng ký các thông tin về IP và Port với Service Discovery (các thông tin về IP Port của các service hoặc các Instance của service được lưu trữ trong Service Registry). Lúc này việc giao tiếp giữa các service trở nên dễ dàng. Có 2 mô hình Service Discovery: - Client-side Discovery: client hay API Gateway lấy thông tin Instant của service bằng cách truy vấn Service Registry Hình 3. Mô hình Client-side Discovery - Server-side Discovery: client hay API Gateway gửi yêu cầu lên một component (có thể là một Load Balancer).
Component này sẽ gọi Service Registry và quyết định thông tin của các microservices. Mô hình Server-side Discovery 1. Phương pháp giao tiếp giữa các service Trong một hệ thống monolithic, các thành phần khác nhau của ứng dụng có thể giao tiếp với nhau một cách trực tiếp thông qua các lời gọi hàm hoặc các cơ chế khác. Tuy nhiên, trong một hệ thống microservice, các dịch vụ được triển khai và quản lý một cách độc lập, do đó việc giao tiếp giữa các service đồi hỏi phải sử dụng một số kỹ thuật để thiết lập giao tiếp giữa các service [7].
Một số kỹ thuật phổ biến bao gồm: • HTTP: các service có thể cung cấp các API theo chuẩn RESTful để cho phép các service khác gọi và trao đổi dữ liệu. • Message: các service có thể sử dụng message queue để gửi và nhận các thông điệp không đồng bộ. • Event-Driven: giao tiếp giữa các service diễn ra thông qua các sự kiện mà các service riêng lẻ tạo ra 1.