Load balancing sử dụng Ribbon và Eureka Server của Spring Cloud Netflix

Việc đảm bảo các service luôn available để handle các request từ người dùng, service khác trong một hệ thống Microservice là điều rất quan trọng, nhằm giúp ứng dụng của chúng ta có thể hoạt động ổn định và hiệu quả. Một vấn đề đặt ra để đảm bảo được những điều trên là khi các service không thể handle thêm những request khác từ người dùng, chúng ta cần tạo ra các bản sao replicate cho service đó để chúng thể handle tiếp những request đó. Việc tạo ra các bản sao cho các service thì rất dễ, chúng ta chỉ cần deploy các service đó trên nhiều máy khác nhau, còn việc handle làm sao request từ người dùng có thể forward giữa các bản sao của một service thì chúng ta phải làm thế nào? Một trong những option mà các bạn có thể sử dụng đó là sử dụng Ribbon với Eureka Server của Spring Cloud Netflix. Cụ thể như thế nào? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này các bạn nhé!

OK, để bắt đầu tìm hiểu về Ribbon, điều đầu tiên mà mình cần nói với các bạn về Ribbon là: nó là một thư viện load balancer client. Điều này có nghĩa, nếu service của các bạn cần gọi tới một service nào đó theo cơ chế load balancing thì service của các bạn cần biết tất cả các instance của service đó. Việc gọi tới instance nào của service đó thì tuỳ thuộc vào service của bạn, tuỳ thuộc vào độ ưu tiên của instance mà các bạn định nghĩa. Ribbon hỗ trợ cho chúng ta tất cả các tính năng của một load balancer client. Chúng ta có thể sử dụng Ribbon mà không cần Eureka Server nhưng nếu có Eureka Server thì việc quản lý các instance của một service sẽ đơn giản hơn nhiều.

Để làm ví dụ cho bài viết này, mình sẽ sử dụng Eureka Server mà mình đã tạo sử dụng Spring Cloud Netflix trong bài viết trước về Eureka Server cùng với một service mà mình đã tạo trong bài viết về Eureka Client.

Mình sẽ tạo ra nhiều bản sao cho service “Eureka Client Example” bằng cách run service này trên nhiều port khác nhau (8080 và 8081):

Load balancing sử dụng Ribbon và Eureka Server của Spring Cloud Netflix

Giao diện của Eureka Server lúc này sẽ như sau:

Load balancing sử dụng Ribbon và Eureka Server của Spring Cloud Netflix

Như các bạn thấy, ở đây chúng ta có 2 instance của service “Eureka Client Example” bao gồm: “khanh-macbook-pro:Eureka Client Example” , “khanh-macbook-pro:Eureka Client Example:8081”.

Bây giờ, mình sẽ tạo một service khác với Eureka Client, Web và Ribbon dependencies như sau:

Load balancing sử dụng Ribbon và Eureka Server của Spring Cloud Netflix

Kết quả:

Load balancing sử dụng Ribbon và Eureka Server của Spring Cloud Netflix

Mình sẽ cấu hình để đăng ký service này với Eureka Server trước:

Kết quả:

Load balancing sử dụng Ribbon và Eureka Server của Spring Cloud Netflix

Bây giờ, chúng ta sẽ sử dụng Ribbon để load balancing gọi tới service “Eureka Client Example” từ service “Ribbon Example” các bạn nhé!

Để làm được điều này, mình sẽ tạo mới một controller để làm ví dụ. Nội dung ban đầu của controller này như sau:

Controller này đang định nghĩa một request URL cho phép chúng ta có thể gọi tới service “Eureka Client Example”. Để đơn giản, sau khi lấy được thông tin instance của service “Eureka Client Example” sẽ handle request, mình sẽ return lại thông tin đó.

Với Ribbon, chúng ta sẽ sử dụng interface LoadBalancerClient để gọi tới một instance của service “Eureka Client Example”. Các bạn có thể autowire LoadBalancerClient vào controller RibbonController như sau:

Sau đó sử dụng đối tượng LoadBalancerClient này để request instance của service “Eureka Client Example”, như sau:

Như các bạn thấy, ở đây chúng ta sẽ sử dụng phương thức choose() của đối tượng LoadBalancerClient với tham số là tên của service “Eureka Client Example” để lấy một instance của service này.

Bây giờ, nếu các bạn chạy ví dụ này lên rồi request tới URL http://localhost:8082/load-balancing nhiều lần, các bạn sẽ thấy thông tin instance handle request của service “Eureka Client Example” sẽ thay đổi như sau:

Load balancing sử dụng Ribbon và Eureka Server của Spring Cloud Netflix

Load balancing sử dụng Ribbon và Eureka Server của Spring Cloud Netflix

Như các bạn thấy, instance handle request cho service “Eureka Client Example” sẽ thay đổi chứ không cố định nữa. Việc sử dụng instance nào của service sẽ handle request sẽ dựa trên những thuật toán nhất định, chúng ta sẽ tìm hiểu thêm về chúng trong những bài viết sau các bạn nhé!

4.5/5 - (2 bình chọn)

Add Comment