Hướng dẫn xây dựng hệ thống Microservice với Spring Cloud.
Bài 1: Khởi tạo dự án và Eureka Server
Mục tiêu: Khởi tạo Eureka Server và thêm các dependency cần thiết.
Hướng dẫn chi tiết:
Sử dụng Spring Initializr để tạo mới dự án.
Thêm dependency
spring-cloud-starter-netflix-eureka-servervàopom.xml.Tạo
@EnableEurekaServerannotation.Cấu hình
application.propertiescho Eureka.
Bài tập: Chạy Eureka Server và truy cập UI tại
http://localhost:8761.
Bài 2: Khởi tạo User Service
Mục tiêu: Khởi tạo User Service và đăng ký với Eureka.
Hướng dẫn chi tiết:
Tạo mới Spring Boot project.
Thêm các dependency cần thiết:
spring-cloud-starter-netflix-eureka-client,spring-boot-starter-data-jpa,spring-boot-starter-web.Đăng ký dịch vụ với Eureka.
Implement một API đơn giản, ví dụ:
/users.
Bài tập: Chạy dịch vụ và kiểm tra nó có đăng ký với Eureka hay không.
Bài 3: Khởi tạo Content Service
Mục tiêu: Khởi tạo Content Service và đăng ký với Eureka.
Hướng dẫn chi tiết:
- Tương tự như bài 2 nhưng để quản lý nội dung, ví dụ
/contents.
- Tương tự như bài 2 nhưng để quản lý nội dung, ví dụ
Bài tập: Chạy Content Service và kiểm tra đăng ký với Eureka.
Bài 4: Spring Cloud LoadBalancer trong User Service
Mục tiêu: Tích hợp Spring Cloud LoadBalancer vào User Service để nó có thể gọi tới Content Service một cách động.
Hướng dẫn chi tiết:
Thêm dependency
spring-cloud-starter-loadbalancervàopom.xmlcủa User Service.Sử dụng
@LoadBalancedkhi khởi tạoRestTemplate.Implement một API endpoint trong User Service để gọi API của Content Service qua
RestTemplate.
Bài tập: Chạy cả hai dịch vụ và thử nghiệm việc gọi API thông qua LoadBalancer. Nên cố gắng có nhiều instance của Content Service để kiểm tra việc load balancing.
Bài 5: Thiết lập Spring Cloud Gateway
Mục tiêu: Tạo và cấu hình Spring Cloud Gateway để route các request đến các microservices thích hợp.
Hướng dẫn chi tiết:
Tạo mới một dự án Spring Boot và thêm
spring-cloud-starter-gatewayvàopom.xml.Cấu hình routing trong
application.ymlhoặc qua code.Kích hoạt discovery client để tự động hóa việc đăng ký các route từ Eureka.
Bài tập: Chạy API Gateway và kiểm tra xem có thể truy cập User Service và Content Service thông qua Gateway hay không.
Bài 6: Implement Resilience4j cho Circuit Breaking
Mục tiêu: Tích hợp Resilience4j vào User Service để hệ thống có khả năng phục hồi và bảo đảm tính sẵn sàng.
Hướng dẫn chi tiết:
Thêm các dependency cần thiết cho Resilience4j.
Định nghĩa một
CircuitBreakerConfigvàTimeLimiterConfig.Wrap API call tới Content Service với Circuit Breaker.
(Tùy chọn) Sử dụng fallback methods để xử lý khi circuit đóng/bị mở.
Bài tập: Tắt Content Service và kiểm tra xem User Service có sử dụng fallback method và mở circuit khi không thể kết nối đến Content Service hay không.
Bài 7: Distributed Tracing với Spring Cloud Sleuth và Zipkin
Mục tiêu: Hiểu và áp dụng distributed tracing để theo dõi các request khi chúng đi qua hệ thống microservices.
Hướng dẫn chi tiết:
Thêm dependency
spring-cloud-starter-sleuthvàspring-cloud-sleuth-zipkinvào cả hai services: User Service và Content Service.Cấu hình kết nối đến Zipkin Server trong
application.properties.Cách xem traces và spans trong Zipkin UI.
Bài tập: Gửi một số request thông qua API Gateway và theo dõi chúng trên Zipkin UI. Kiểm tra xem các trace và span có được hiển thị đúng cách không.
Bài 8: Security với JWT và Spring Cloud Gateway
Mục tiêu: Cài đặt xác thực và phân quyền cho các microservices bằng JWT thông qua Spring Cloud Gateway.
Hướng dẫn chi tiết:
Tích hợp Spring Security vào Spring Cloud Gateway.
Cấu hình JWT authentication filter.
Propagate token từ Gateway tới các microservices.
Bài tập: Thử đăng nhập để lấy JWT và sử dụng token đó để truy cập các API được bảo vệ. Kiểm tra trường hợp không có token hoặc token không hợp lệ.
Bài 9: Data Consistency và Saga Pattern
Mục tiêu: Giải quyết vấn đề consistency giữa các dịch vụ khi xử lý các hoạt động phức tạp.
Hướng dẫn chi tiết:
Giới thiệu về Saga Pattern và tại sao cần dùng nó trong microservices.
Mô phỏng một use case cần đảm bảo tính nhất quán dữ liệu giữa User Service và Content Service.
Implement Saga Pattern, có thể sử dụng message broker như Kafka hoặc RabbitMQ để giao tiếp giữa các service.
Bài tập: Xây dựng một scenario giả định có yêu cầu đồng nhất dữ liệu và sử dụng Saga Pattern để xử lý.
Bài 10: Caching với Redis
Mục tiêu: Tích hợp Redis vào User Service và Content Service để cải thiện hiệu năng.
Hướng dẫn chi tiết:
Thêm dependency
spring-boot-starter-data-redisvào cả hai services.Cấu hình kết nối đến Redis server.
Sử dụng annotations như
@Cacheable,@CacheEvictđể quản lý cache cho các method.
Bài tập: Measure latency của API khi không sử dụng và khi sử dụng cache.
Bài 11: Event-Driven Architecture với Kafka
Mục tiêu: Tích hợp Kafka để xây dựng kiến trúc dựa trên sự kiện.
Hướng dẫn chi tiết:
Cài đặt và khởi chạy Kafka.
Thêm dependency
spring-kafkavào dự án.Thiết lập producers và consumers trong User Service và Content Service.
Demonstrate một workflow dựa trên sự kiện.
Bài tập: Xây dựng một feature mới trong dự án dựa trên kiến trúc event-driven.
Bài 12: Tổng kết và Best Practices
Mục tiêu: Tổng kết toàn bộ chuỗi bài hướng dẫn và đề cập đến các best practices khi xây dựng microservices với Spring Cloud.
Hướng dẫn chi tiết:
Nhìn lại các bài đã học và các kỹ thuật đã áp dụng.
Một số điều cần tránh khi xây dựng microservices.
Đề xuất các tài nguyên và công nghệ có thể tìm hiểu thêm.