Đồ án 2: Hoàn thiện hệ thống bán mỹ phẩm với Microservice & Cloud Native

Đồ án hệ thống thương mại điện tử bán mỹ phẩm ứng dụng kiến trúc microservice và cloud native. Báo cáo chi tiết về thiết kế và triển khai dự án.

Chuyên ngành

Công Nghệ Phần Mềm

Người đăng

Ẩn danh

Thể loại

Đồ Án

2025

59
0
0

Phí lưu trữ

30 Point

Tóm tắt

I. Giới thiệu về Đồ án Web Bán Mỹ Phẩm với Microservice Cloud Native

Đồ án web bán mỹ phẩm theo kiến trúc MicroserviceCloud Native là một giải pháp hiện đại để xây dựng hệ thống thương mại điện tử có khả năng mở rộng cao. Trong bối cảnh phát triển ứng dụng web hiện nay, việc áp dụng kiến trúc Microservice giúp tối ưu hóa hiệu suất hệ thống và nâng cao trải nghiệm người dùng. Dự án này tập trung vào việc xây dựng một nền tảng bán mỹ phẩm toàn diện với các tính năng như quản lý sản phẩm, đơn hàng, thanh toán trực tuyến và quản trị hệ thống. Sử dụng công nghệ Cloud Native, hệ thống có thể triển khai trên Kubernetes (K8s) để đảm bảo tính sẵn sàng cao và khả năng tự động mở rộng theo nhu cầu.

1.1. Định nghĩa Microservice Architecture

Microservice Architecture là mô hình kiến trúc phần mềm nơi ứng dụng được chia nhỏ thành các dịch vụ độc lập, mỗi dịch vụ chạy trong một quy trình riêng biệt. Các dịch vụ này giao tiếp với nhau thông qua API và message queue như RabbitMQ. Mô hình này cho phép các nhóm phát triển làm việc độc lập, dễ dàng cập nhật và triển khai các tính năng mới mà không ảnh hưởng đến toàn bộ hệ thống.

1.2. Lợi ích của Cloud Native trong E commerce

Cloud Native cho phép ứng dụng chạy trên môi trường đám mây với khả năng tự động mở rộng, tự chữa lành và dễ dàng triển khai. Các lợi ích bao gồm: giảm chi phí cơ sở hạ tầng, tăng tính linh hoạt, cải thiện độ tin cậy, và hỗ trợ triển khai liên tục. Cho các nền tảng bán mỹ phẩm, điều này có nghĩa là khả năng xử lý lượng truy cập lớn vào những thời điểm cao điểm như sale, khuyến mãi.

II. Kiến trúc Hệ thống Microservice cho Platform Bán Mỹ Phẩm

Kiến trúc Microservice của đồ án bao gồm nhiều dịch vụ độc lập như dịch vụ xác thực, quản lý sản phẩm, quản lý đơn hàng, thanh toán và thông báo. Mỗi dịch vụ có cơ sở dữ liệu riêng để đảm bảo tính độc lập và linh hoạt. Hệ thống sử dụng API Gateway để định tuyến yêu cầu từ phía người dùng đến các dịch vụ tương ứng. Giao tiếp không đồng bộ được thực hiện thông qua RabbitMQ với Mass Transit, cho phép các dịch vụ xử lý sự kiện một cách hiệu quả. Triển khai trên Kubernetes đảm bảo tính sẵn sàng cao, tự động lấy cân bằng tải và khả năng phục hồi khi có sự cố.

2.1. Các Dịch vụ Chính trong Kiến trúc

Hệ thống gồm các microservice chính: Authentication Service (xác thực người dùng), Product Service (quản lý sản phẩm và danh mục), Order Service (quản lý đơn hàng), Payment Service (xử lý thanh toán VNPAY), User Service (quản lý tài khoản và địa chỉ), và Notification Service (gửi email OTP). Mỗi dịch vụ độc lập, có thể cập nhật, mở rộng hoặc sửa chữa mà không làm gián đoạn các dịch vụ khác.

2.2. Công nghệ và Công cụ Sử dụng

Dự án sử dụng .NET/C# để xây dựng các microservice, PostgreSQLMongoDB cho lưu trữ dữ liệu, RabbitMQ cho hàng đợi tin nhắn. Triển khai được thực hiện bằng DockerKubernetes (K8s), với Helm để quản lý cấu hình. CI/CD Pipeline được thiết lập trên Jenkins tích hợp với GitHub để tự động hóa quá trình kiểm tra, xây dựng và triển khai.

III. Triển khai trên Cloud với Infrastructure as Code IaC

Infrastructure as Code (IaC) là phương pháp quản lý cơ sở hạ tầng thông qua các tập tin cấu hình, cho phép tự động hóa quá trình triển khai trên cloud. Đồ án sử dụng Digital Ocean làm nhà cung cấp dịch vụ đám mây, tạo ra các tài nguyên như Kubernetes Cluster, Load Balancer, Volume Block StorageVirtual Private Cloud (VPC). Sử dụng Helm ChartsHelmfile, toàn bộ cấu hình được lưu trữ dưới dạng code, dễ dàng sao lưu, kiểm soát phiên bản và triển khai lại. Blue/Green Deployment được áp dụng để đảm bảo việc cập nhật ứng dụng không gây mất dịch vụ, với hai môi trường chạy song song cho phép chuyển đổi nhanh chóng nếu cần.

3.1. Cơ sở hạ tầng trên Digital Ocean

Digital Ocean cung cấp Kubernetes managed cluster để triển khai các container chứa microservice. Load Balancer phân phối lưu lượng truy cập giữa các node trong cluster. Volume Block Storage cung cấp lưu trữ bền vững cho dữ liệu cơ sở dữ liệu. VPC tạo một mạng riêng an toàn cho các tài nguyên cloud, đảm bảo bảo mật và kiểm soát truy cập.

3.2. Tự động hóa triển khai với CI CD

Jenkins Pipeline được thiết lập tích hợp với GitHub thông qua webhook, tự động kích hoạt khi có commit mới. Pipeline thực hiện các bước: kiểm tra mã, xây dựng Docker image, đẩy lên container registry, cập nhật Kubernetes manifests, và triển khai lên cluster. Blue/Green Deployment cho phép kiểm tra phiên bản mới trước khi chuyển toàn bộ lưu lượng truy cập, giảm rủi ro và thời gian ngừng dịch vụ.

IV. Giao diện Người dùng và Tính năng Chính của Hệ thống

Giao diện người dùng của nền tảng bán mỹ phẩm được thiết kế thân thiện, dễ sử dụng với các tính năng chính bao gồm: đăng ký/đăng nhập với xác thực OTP qua email, duyệt sản phẩm theo danh mục, xem chi tiết sản phẩm, thêm vào giỏ hàng và wishlist, thanh toán trực tuyến qua VNPAY. Quản lý tài khoản cá nhân cho phép người dùng cập nhật thông tin, thay đổi mật khẩu, quản lý đơn hàng và địa chỉ giao hàng. Trang quản trị viên cung cấp dashboard tổng quan, quản lý sản phẩm, danh mục, đơn hàng và khách hàng. Giao diện được xây dựng với React hoặc Vue.js để đảm bảo hiệu suất cao và trải nghiệm người dùng mượt mà trên mọi thiết bị.

4.1. Tính năng cho Khách hàng

Người dùng có thể đăng ký tài khoản với xác thực OTP, duyệt danh mục sản phẩm mỹ phẩm đa dạng, xem chi tiết sản phẩm kèm hình ảnh và đánh giá, sử dụng quickview để xem nhanh. Chức năng giỏ hàng cho phép thêm, xóa, cập nhật số lượng sản phẩm. Wishlist lưu các sản phẩm yêu thích. Thanh toán qua VNPAY an toàn, dễ dàng. Quản lý đơn hàng, địa chỉ giao hànglịch sử mua hàng.

4.2. Tính năng cho Quản trị viên

Dashboard hiển thị thống kê tổng quan: doanh thu, số lượng đơn hàng, khách hàng mới. Quản lý danh mục sản phẩm: thêm, sửa, xóa. Quản lý sản phẩm: thêm sản phẩm mới, chỉnh sửa thông tin, quản lý chi tiết sản phẩm (kích cỡ, màu sắc). Quản lý đơn hàng: xem danh sách, chi tiết đơn hàng, cập nhật trạng thái. Quản lý khách hàngbáo cáo doanh số.

28/12/2025

Trích đoạn nội dung tài liệu

Chương 1. GIỚI THIỆU BÀI TOÁN 1.1 Giới thiệu bài toán Trong bối cảnh phát triển ứng dụng web hiện đại, khả năng xử lý nhanh chóng và hiệu quả đóng vai trò then chốt trong việc nâng cao trải nghiệm người dùng và tối ưu hóa hiệu suất hệ thống. Đồ án xây dựng trang web bán hàng lần này tập trung áp dụng các giải pháp xử lý trên nền tảng DigitalOcean, tận dụng các dịch vụ như App Platform, Kubernetes, Load balancing,… Hệ thống được phát triển dựa trên mô hình event-driven (hướng sự kiện), nơi các luồng xử lý được kích hoạt thông qua sự kiện như tìm kiếm sản phẩm, xử lý thanh toán, hay truy xuất thông tin sản phẩm. Nền tảng DigitalOcean Functions được sử dụng để xây dựng các chức năng serverless, cho phép triển khai nhanh và tự động mở rộng để đáp ứng yêu cầu xử lý linh hoạt.

Bên cạnh đó, cơ chế horizontal scaling (mở rộng ngang) và vertical scaling (mở rộng dọc) được thiết lập để đảm bảo tài nguyên máy chủ có thể thích nghi với lưu lượng truy cập biến động, đặc biệt trong các giai đoạn cao điểm. Load Balancer (cân bằng tải) của DigitalOcean giúp phân phối đều lưu lượng truy cập, giảm tải áp lực cho các máy chủ và đảm bảo hiệu suất ổn định. Các dịch vụ DigitalOcean Managed Databases được tích hợp chặt chẽ với hệ thống để cung cấp cơ sở dữ liệu nhanh chóng và ổn định, hỗ trợ xử lý hiệu quả các truy vấn tìm kiếm, thêm mới, và cập nhật dữ liệu. Ngoài ra, việc sử dụng Redis Cache giúp tăng tốc độ xử lý các yêu cầu truy xuất dữ liệu, đặc biệt với các sản phẩm được truy cập nhiều.

Với trọng tâm là xử lý dữ liệu hiệu quả trên nền tảng DigitalOcean, hệ thống không chỉ đảm bảo khả năng mở rộng và hiệu năng cao, mà còn mang lại một kiến trúc linh hoạt để thích nghi với các yêu cầu phức tạp và khối lượng xử lý lớn.2 Kích thước dữ liệu và sơ đồ quan hệ Hình 1. Sơ đồ quan hệ của dự án 1.1 Kích thước dữ liệu Mỗi table bên dưới đều được thêm data từ 50 đến 100 dòng dữ liệu cho mục đích kiểm thử 1.2 Mô tả các bảng trong cơ sở dữ liêu STT Tên bảng Mô tả ● id: Khóa chính, định danh duy nhất cho mỗi người dùng. ● email_address: Địa chỉ email của người 1 site_user dùng. ● phone_number: Số điện thoại của người dùng.

2 ● password: Mật khẩu của người dùng, lưu trữ dưới dạng mã hóa. ● user_id: Khóa ngoại liên kết với bảng site_user. ● address_id: Khóa ngoại liên kết với bảng address. 2 user_address ● is_default: Cờ chỉ ra địa chỉ này có phải là địa chỉ mặc định của người dùng hay không.

● id: Khóa chính, định danh duy nhất cho mỗi địa chỉ. ● unit_number, street_number, address_line1, address_line2, city, 3 Address region, postal_code: Các thành phần chi tiết của địa chỉ. ● country_id: Khóa ngoại liên kết với bảng country. ● id: Khóa chính, định danh duy nhất cho 4 Country mỗi quốc gia.

● country_name: Tên của quốc gia. ● user_id: Khóa ngoại liên kết với bảng site_user. ● payment_type_id: Khóa ngoại liên kết với bảng payment_type. 5 User_payment_method ● provider, account_number, expiry_date, is_default: Thông tin chi tiết về phương thức thanh toán.

● id: Khóa chính, định danh duy nhất cho mỗi loại hình thanh toán. 6 Payment_type ● value: Tên của loại hình thanh toán (ví dụ: Visa, MasterCard, PayPal). 3 ● id: Khóa chính, định danh duy nhất cho mỗi giỏ hàng. 7 Shopping_cart ● user_id: Khóa ngoại liên kết với bảng site_user.

● id: Khóa chính, định danh duy nhất cho mỗi mục trong giỏ hàng. ● cart_id: Khóa ngoại liên kết với bảng 8 shopping_cart_item shopping_cart. ● product_item_id: Khóa ngoại liên kết với bảng product_item. ● qty: Số lượng sản phẩm.

● id: Khóa chính, định danh duy nhất cho mỗi sản phẩm. ● category_id: Khóa ngoại liên kết với 9 Product bảng product_category. ● name, description, product_image: Tên, mô tả và hình ảnh của sản phẩm. ● id: Khóa chính, định danh duy nhất cho mỗi phiên bản sản phẩm.

● product_id: Khóa ngoại liên kết với bảng product. 10 product_item ● SKU, qty_in_stock, price, product_image: Mã sản phẩm, số lượng trong kho, giá và hình ảnh của phiên bản sản phẩm. ● product_item_id: Khóa ngoại liên kết với bảng product_item. 11 product_configuration ● variation_option_id: Khóa ngoại liên kết với bảng variation_option.

● id: Khóa chính, định danh duy nhất cho mỗi loại biến thể. 12 Variation ● name: Tên của loại biến thể (ví dụ: màu sắc, kích thước). 4 ● id: Khóa chính, định danh duy nhất cho mỗi tùy chọn biến thể. ● variation_id: Khóa ngoại liên kết với 13 variation_option bảng variation.

● value: Giá trị của tùy chọn (ví dụ: đỏ, xanh, L, XL). ● id: Khóa chính, định danh duy nhất cho mỗi đơn hàng. ● user_id, order_date, payment_method_id, shipping_address_id, 14 shop_order shipping_method, order_total, order_status: Thông tin chi tiết về đơn hàng bao gồm người dùng, ngày đặt, phương thức thanh toán, địa chỉ giao hàng, phương thức giao hàng, tổng tiền và trạng thái đơn hàng. ● id: Khóa chính, định danh duy nhất cho mỗi dòng đơn hàng.

● product_item_id, order_id, qty, price: 15 order_line Thông tin chi tiết về sản phẩm trong đơn hàng bao gồm sản phẩm, đơn hàng, số lượng và giá. ● id: Khóa chính, định danh duy nhất cho mỗi phương thức giao hàng. 16 shipping_method ● name, price: Tên và giá của phương thức giao hàng. ● id: Khóa chính, định danh duy nhất cho 17 order_status mỗi trạng thái đơn hàng.

5 ● status: Mô tả trạng thái đơn hàng (ví dụ: Đang xử lý, Đã giao, Đã hủy). ● id: Khóa chính, định danh duy nhất cho mỗi danh mục sản phẩm. 18 product_category ● parent_category_id, category_name: Thông tin về danh mục cha và tên danh mục. ● id: Khóa chính, định danh duy nhất cho mỗi chương trình khuyến mãi.

● name, description, discount_rate, 19 Promotion start_date, end_date: Tên, mô tả, tỷ lệ giảm giá, ngày bắt đầu và ngày kết thúc của chương trình khuyến mãi. ● category_id: Khóa ngoại liên kết với bảng product_category. 20 promotion_category ● promotion_id: Khóa ngoại liên kết với bảng promotion. ● id: Khóa chính, định danh duy nhất cho mỗi đánh giá của người dùng.

● user_id, ordered_product_id, 21 user_review rating_value, comment: Thông tin chi tiết về đánh giá bao gồm người dùng, sản phẩm đã mua, giá trị đánh giá và bình luận.3 Liệt kê, giới thiệu các thành phần sử dụng trong cloud thuộc nhóm nào? 1.1 Tổng quan ● PaaS: Kubernetes, Container Registry ● IaaS: Volume Block Storage, VPC, Load balancer 6 1.2 Kubernetes (DigitalOcean Managed Kubernetes) DigitalOcean Managed Kubernetes (DOKS) là dịch vụ quản lý Kubernetes giúp triển khai, mở rộng và quản lý các ứng dụng container một cách dễ dàng mà không cần thiết lập cụm Kubernetes thủ công. Ứng dụng trong dự án: ● Tạo cụm Kubernetes để triển khai các microservices. ● Quản lý tài nguyên theo cách tự động và tối ưu chi phí thông qua tính năng autoscaling của cụm. ● Sử dụng Helm Charts để triển khai nhanh các thành phần cần thiết như ingress controllers, monitoring, hoặc logging.

● Tăng tính reliability, availability và maintainability cho hệ thống 1.4 Container Registry Container Registry là kho lưu trữ hình ảnh container bảo mật được tích hợp trong DigitalOcean. Ứng dụng trong dự án: ● Lưu trữ hình ảnh Docker của các microservices. ● Đảm bảo an toàn và bảo mật trong việc lưu trữ và truy xuất hình ảnh container. ● Kết hợp với DOKS để triển khai nhanh các ứng dụng từ container registry mà không cần sử dụng dịch vụ bên thứ ba.5 Volume Block Storage Volume Block Storage cung cấp lưu trữ bền vững và có thể mở rộng, dùng để gắn vào các pods trong Kubernetes.

Ứng dụng trong dự án: ● Lưu trữ dữ liệu lâu dài cho các dịch vụ như database hoặc ứng dụng cần trạng thái (stateful). 7 ● Tạo Persistent Volume (PV) và Persistent Volume Claim (PVC) trong Kubernetes để quản lý dữ liệu trên volume block storage.6 Virtual Private Cloud VPC là mạng ảo riêng cho phép cô lập và bảo mật các tài nguyên trên DigitalOcean. Ứng dụng trong dự án: ● Tạo một môi trường an toàn để các microservices giao tiếp nội bộ mà không lộ ra Internet. ● Giảm thiểu nguy cơ tấn công bằng cách tách biệt giao tiếp nội bộ và giao tiếp công cộng qua Load Balancer.

● Định tuyến lưu lượng một cách hiệu quả giữa các thành phần trong cụm Kubernetes.7 Load Balancer Load Balancer phân phối lưu lượng mạng đến các ứng dụng, đảm bảo tính khả dụng và hiệu suất. Ứng dụng trong dự án: ● Cân bằng tải giữa các pods chạy microservices để đảm bảo độ tin cậy và khả năng mở rộng. ● Được sử dụng với ingress controller trong Kubernetes để định tuyến lưu lượng đến đúng dịch vụ. ● Hỗ trợ HTTPS để bảo mật giao tiếp giữa client và ứng dụng.1 Tổng quan về Microservice architecture 2.1 Microservice architecture là gì? ● Kiến trúc Microservice, hay còn gọi là kiến trúc dịch vụ vi mô, là một phương pháp thiết kế phần mềm trong đó ứng dụng được cấu trúc thành một tập hợp các dịch vụ nhỏ, độc lập và khả năng triển khai riêng biệt.

Mỗi dịch vụ trong kiến trúc microservices thường thực hiện một chức năng kinh doanh cụ thể và có thể giao tiếp với các dịch vụ khác thông qua các giao diện lập trình ứng dụng (API) được định nghĩa rõ ràng. ● Đặc Điểm Chính của Microservice Architecture: o Độc Lập: Mỗi microservice là một đơn vị độc lập, có thể được phát triển, triển khai, vận hành và mở rộng một cách độc lập với các dịch vụ khác. o Đặc Thù Theo Dịch Vụ: Mỗi microservice được thiết kế xung quanh một chức năng kinh doanh cụ thể và quản lý một phần dữ liệu riêng biệt. o Decentralization: Microservices thúc đẩy việc phân tán quản lý dữ liệu và chức năng, giúp giảm sự phụ thuộc giữa các thành phần của hệ thống.

o Đa Ngôn Ngữ và Đa Công Nghệ: Các microservices có thể được viết bằng các ngôn ngữ lập trình khác nhau và sử dụng các công nghệ lưu trữ dữ liệu khác nhau, tùy thuộc vào yêu cầu cụ thể của từng dịch vụ. o Tính Linh Hoạt và Khả Năng Mở Rộng: Kiến trúc microservices cho phép các doanh nghiệp dễ dàng mở rộng hoặc cập nhật các phần của hệ thống mà không ảnh hưởng đến các thành phần khác. 9 o Tự Động Hóa: Việc triển khai và quản lý microservices thường được tự động hóa hoàn toàn, sử dụng các công cụ và kỹ thuật như containerization và orchestration.2 Ưu điểm và thách thức của Microservice architecture ● Ưu điểm: o Tính linh hoạt cao trong việc phát triển và triển khai. o Dễ dàng mở rộng và tối ưu hóa tài nguyên.

o Giảm thiểu rủi ro khi cập nhật và bảo trì hệ thống. o Tăng cường độc lập giữa các đội ngũ phát triển, cho phép họ làm việc song song và hiệu quả hơn. ● Nhược điểm: o Quản lý phức tạp: Việc quản lý nhiều dịch vụ độc lập có thể trở nên phức tạp.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ