Báo Cáo Cuối Kỳ Thực Tập Ngành Khoa Học Máy Tính: Thiết Kế Ứng Dụng Microservices Sử Dụng Spring Cloud

MỤC LỤC

NỘI DUNG THỰC TẬP 1. Tổng quan về đề tài

Thiết kế ứng dụng 1. Sơ đồ kiến trúc tổng quan

Spring Cloud Gateway: Chúng tôi sử dụng Spring Cloud Gateway, một thành phần của Spring Cloud, để triển khai API Gateway. Service Registry đóng vai trò như một sổ địa chỉ cho hệ thống, cho phép các dịch vụ biết về nhau và tương tác một cách linh hoạt. Spring Cloud Gateway: Sử dụng Spring Cloud Eureka Server để triển khai Service Registry, giúp các dịch vụ tự động đăng ký và tìm kiếm nhau.

Config Server giúp quản lý cấu hình trung tâm, giúp các dịch vụ có thể thay đổi cấu hình mà không cần khởi động lại. Spring Cloud Config Server: Sử dụng Spring Cloud Config Server để cung cấp thông tin cấu hình cho tất cả các dịch vụ từ một kho lưu trữ trung tâm (ví dụ: Git Repository). Circuit Breaker giúp hệ thống đáp ứng linh hoạt trước các sự cố, ngăn chặn việc lan truyền lỗi và bảo vệ hệ thống khỏi tình trạng quá tải.

Spring Boot & Resilience4j: Trong dự án này, chúng tôi đã quyết định sử dụng Resilience4j, một thư viện lightweight và dễ mở rộng, tối ưu cho Java 8 và hỗ trợ tích hợp sâu với Spring Boot. MinIO: Là kho lưu trữ đối tượng được sử dụng để lưu giữ dữ liệu hình ảnh thực tế, cung cấp khả năng lưu trữ hiệu quả và truy cập nhanh chóng. MySQL: Cơ sở dữ liệu này chứa thông tin liên quan đến hình ảnh, bao gồm metadata, người tải lên, ngày giờ tải lên và các thuộc tính khác liên quan đến hình ảnh.

Thiết kế và cài đặt các API cho việc tải lên, chỉnh sửa, xóa và truy xuất hình ảnh cũng như bộ ảnh sử dụng Spring Boot. Tích hợp MinIO để lưu trữ dữ liệu hình ảnh và đảm bảo đồng bộ giữa dữ liệu trên MinIO và thông tin lưu trữ trên MySQL. Xây dựng tính năng tạo và quản lý bộ ảnh, cho phép người dùng tổ chức và phân loại hình ảnh của họ một cách dễ dàng.

Rating Service là dịch vụ chịu trách nhiệm quản lý, thu thập và phân tích đánh giá từ người dùng, tạo nên một phản hồi quan trọng cho cả hệ thống và người dùng khác. ExpressJS: Đây là một framework nhẹ và linh hoạt trên nền tảng Node.js, cho phép xây dựng các ứng dụng web và API một cách nhanh chóng và hiệu quả. Với khả năng mở rộng và linh hoạt của MongoDB, việc lưu trữ và truy vấn dữ liệu đánh giá trở nên dễ dàng và hiệu quả.

Xây dựng giao diện người dùng 1. Thiết kế giao diện người dùng

Nút "Đăng hình": Hiển thị dưới dạng dấu cộng được đặt ở góc trên bên phải, nút này cho phép người dùng dễ dàng tải lên hình ảnh mới mà họ muốn chia sẻ. Tương tác hình ảnh: Mỗi hình ảnh trên lưới có khả năng tương tác, cho phép người dùng nhấp để xem chi tiết hơn, thích, bình luận hoặc lưu vào bộ sưu tập cá nhân của họ. Phân trang và Lazy Loading: Khi người dùng cuộn xuống dưới cùng, hệ thống tự động tải thêm hình ảnh mới, giúp trải nghiệm duyệt web trở nên mượt mà và liên tục.

Ảnh đại diện và tên người dùng: Ở giữa trang, ảnh đại diện của người dùng được hiển thị ở kích thước lớn, kết hợp với tên đầy đủ và tên người dùng. Khu vực ảnh đã lưu: Phần chính của trang là một lưới hiển thị tất cả hình ảnh mà người dùng đã chia lưu, cũng được hiển thị theo dạng lưới Masonry. Nút “Created” và “Saved”: Được đặt ở ngay dưới phần ảnh đại diện và tên người dùng, được dùng để chuyển đổi giữa khu vực ảnh đã chia sẻ và khu vực ảnh đã lưu.

Chọn hình ảnh từ thiết bị: Nếu người dùng không muốn sử dụng chức năng kéo và thả, họ có thể nhấp vào nút "Chọn hình ảnh" để duyệt và chọn hình ảnh từ thiết bị của họ. Thông tin hình ảnh: Phía bên phải khu vực tải lên, người dùng có thể nhập thông tin về hình ảnh, bao gồm tiêu đề, mô tả, đường dẫn đến nguồn. Nút tải lên: Sau khi điền đầy đủ thông tin và chọn hình ảnh, người dùng có thể nhấp vào nút "Tải lên" để chia sẻ hình ảnh của mình với cộng đồng.

Thông tin người dùng: Ngay phía dưới hình ảnh, thông tin về người dùng đã tải lên hình ảnh – bao gồm ảnh đại diện, tên và một liên kết đến trang cá nhân của họ – được hiển thị. Mô tả và chi tiết hình ảnh: Bên cạnh hình ảnh là phần mô tả, nơi người dùng có thể chia sẻ thông tin về hình ảnh, bối cảnh hoặc bất kỳ chi tiết nào họ muốn chia sẻ. Tùy chọn tải xuống: Ngay góc dưới bên phải hình ảnh chi tiết, biểu tượng cho phép người dùng tải xuống hoặc lưu hình ảnh vào bộ sưu tập cá nhân của họ.

- Chức năng tìm kiếm: Sử dụng tính năng Live Search, cho phép kết quả được lọc tự động và liên tục mỗi khi người dùng nhập một kí tự trong thanh tìm kiếm. Chức năng này giúp cho người xem có thể lưu giữ lại những hình ảnh mình thích về trang cá nhân mà không cần tìm kiếm lại, đồng thời cũng giúp cho trang cá nhân của người dùng trở nên sinh động hơn. Với mẫu thiết kế này, chúng ta có thể đảm bảo rằng mỗi dịch vụ, dù là quản lý người dùng, hình ảnh, hay đánh giá, đều tuân theo cùng một quy trình và chuẩn mực khi thao tác với cơ sở dữ liệu.

Trong ứng dụng Spring Boot sử dụng Spring Security, SecurityFilterChain đóng vai trò chính trong quá trình xác thực và ủy quyền yêu cầu đến ứng dụng. 1, Khi người dùng điền đủ thông tin và bấm tải ảnh lên, Client sẽ gửi một request đến Image Service để tải ảnh lên kho lưu trữ (Upload Object lên MinIO). API Gateway hoạt động như một bức tường chắn trước cửa cho hệ thống microservices, điều hướng các yêu cầu từ người dùng tới dịch vụ thích hợp và có thể cung cấp các chức năng như cân bằng tải, bảo mật, rate limiting.

Eureka là một dự án phổ biến trong Spring Cloud giúp triển khai service registry, cho phép các dịch vụ tự động đăng ký bản thân và tìm các dịch vụ khác mà không cần cấu hình cứng.

Hình ảnh liên quan: Ở phía dưới cùng của trang, một danh sách hình ảnh liên quan  giúp người dùng khám phá thêm nội dung tương tự hoặc từ cùng một người dùng.
Hình ảnh liên quan: Ở phía dưới cùng của trang, một danh sách hình ảnh liên quan giúp người dùng khám phá thêm nội dung tương tự hoặc từ cùng một người dùng.