Học Microservice với Spring Boot - ToiHieuRoi.com

Học Microservice với Spring Boot – [Phần cuối]

Posted by

Dưới đây là link của loạt bài “Học Microservice với Spring Boot“:

Phần này là phần cuối của loạt bài trên. Chúng ta sẽ tập trung vào việc sử dụng Eureka Naming Server để có thể thực hiện Load Balancing một cách tự động.

Mục tiêu

Mục tiêu của chúng ta ở phần cuối này là trả lời 3 câu hỏi dưới đây:

  • Naming Server cần gì?
  • Eureka là gì?
  • Làm thế nào để Naming Server tự động xác định các microservice?

Tổng quan

Trong phần 2 & 3 chúng ta đã tạo 2 microservice và thiết lập cách thức giao tiếp giữa chúng.

Học Microservice với Spring Boot - ToiHieuRoi.com

Trong phần 4 chúng ta đã sử dụng Ribbon để phân tải giữa 2 instance của Forex Service.

Tuy nhiên, chúng ta đang hardcode URL của 2 FS instance trong CSS.

Điều này có nghĩa là mỗi khi tạo mới một instance của FS chúng ta cần phải cập nhật cấu hình của CSS. Rất là bất tiện.

Trong phần cuối này, chúng ta sẽ sử dụng Eureka Naming Server để khắc phục sự bất tiện trên.

Học Microservice với Spring Boot - ToiHieuRoi.com

Complete Maven Project

Mình có đưa source code lên Github. Bạn nào cần thì có thể lấy về tham khảo nhé. Link: https://github.com/ndtai/learning-microservice

Tạo Eureka Naming Server Project

Cấu trúc project:

Học Microservice với Spring Boot - ToiHieuRoi.com

Tạo Eureka Naming Server project:

Học Microservice với Spring Boot - ToiHieuRoi.com

Chọn Eureka Server dependency  rồi click Finish :

Học Microservice với Spring Boot - ToiHieuRoi.com

Cấu hình

Thêm annotation  @EnableEurekaServer trong Application class:

Thiết lập trong application.properties

Chạy Eureka Server

Chạy Eureka Server sau đó truy cập  http://localhost:8761

Kết quả như sau:

Học Microservice với Spring Boot - ToiHieuRoi.com

Tuy nhiên ta sẽ thấy chưa có instance nào được kết nối với Eureka.

Đăng ký CSS và FS với Eureka

Thêm dependency sau vào trong pom.xml của cả CSS và FS:

Đừng quên cấu hình Eureka URL trong application.properties :

Restart lại tất cả các instance của CSS và FS. Ngoài ra, chúng ta sẽ chạy thêm 1 instance của FS sử dụng port 8001 nhé. Sau đó truy cập vào localhost:8761 kết quả như dưới đây:

Học Microservice với Spring Boot - ToiHieuRoi.com

Điều hướng Ribbon request qua Eureka

Để làm điều này thì ta chỉ việc bỏ cấu hình Ribbon trong application.properties  đi.

Restart CSS rồi chuyển qua phần test nào.

Test

Mở 2 tab của browser lên, truy cập vào link này: http://localhost:8100/currency-converter-feign/from/EUR/to/INR/quantity/10000 

Kết quả thu được như sau:

Học Microservice với Spring Boot - ToiHieuRoi.com

Học Microservice với Spring Boot - ToiHieuRoi.com

Chúng ta có thể thấy port của 2 response khác nhau. Vậy là request của CSS đến FS đã được phân tải cho 2 FS instance bằng Ribbon qua Eureka thành công.

Lời kết

Đây là ý tưởng tạo ra một ứng dụng đơn giản ứng dụng Microservice Architecture mà ở đó chúng ta có thể dễ dàng scale các service một cách đơn giản, chúng sẽ làm việc với nhau một cách tự động đồng thời quá trình scale không làm ảnh hưởng đến các thành phần của hệ thống. Tổng quan ứng dụng như sau:

  • Sử dụng Ribbon để phân tải giữa 2 instance Forex Service.
  • Sử dụng Feign để giao tiếp giữa các service.
  • Eureka là Naming Server.
  • Mỗi khi thêm instance Forex Service mới thì instance này sẽ tự động được chia sẻ để xử lý một phần các request đến Forex Service.

Ngoài ra thì còn có nhiều cách khác để tiếp cận Microservice Architecture. Chúng ta sẽ tiếp tục đề cập trong những loạt bài sau.

Nguồn: http://www.springboottutorial.com/microservices-with-spring-boot-part-5-eureka-naming-server

4 comments

  1. Mình rất cảm ơn về bài viết chi tiết và bổ ích của bạn. Mình có một câu hỏi mở rộng của chủ đề này như sau. Giả sử mình là người quá cẩn thận và mình muốn xây dựng 2 naming server để phòng khi 1 server tạch thì các request qua lại còn có hoa tiêu chỉ đường. Theo bạn thì cách nào sẽ là hợp lý nhất cho mô hình này?

  2. Đây là lúc chúng ta sử dụng kỹ thuật HA (high availability) cho naming server. Ta có thể dựng 1 con HA cho 2 naming servers (hoặc nhiều hơn) của bạn, trường hợp 1 naming server unavailable thì các request đến naming server sẽ được điều hướng đến naming server đang available. Một cách đơn giản hơn là sử dụng tính năng Peer-Aware có sẵn của Eureka (bản chất nó cũng là kỹ thuật HA).
    Chi tiết về kỹ thuật HA cũng như cách xây dựng bạn theo dõi trong các bài viết tiếp của mình về series học microservice nhé.

Leave a Reply

Your email address will not be published. Required fields are marked *