2024-08-01 MSA (Microservices Architecture) - 5

박영무·2024년 8월 1일
0

MSA

목록 보기
5/12
post-thumbnail

강의 자료 링크 (클릭)

목표

  1. Client-Side Load Balancing을 수행하는 FeginClient와 Ribbon에 대해 이해한다.
  2. 실습한다.



Client-Side Load Balancing

- Client는 Service instance의 list를 가지고 있으며, 이를 바탕으로 하나의 Server를 선택하여 요청을 보내는 Load balancing을 수행한다.


FeignClient

- Spring Client에서 제공하는 Http Client로, annotation을 통해 선언적으로 RestFul Web Service를 호출할 수 있다.

- Eureka와 같은 Service Discovery와 연동하여 동적으로 Service instance를 조회하고 Load balancing을 수행한다.

- Ribbon과 연동되어 있어 자동으로 Client-side load balancing을 수행한다.


Ribbon

- MSA에서 Service instance 간의 부하를 분산한다.

- Eureka와 같은 Service Discovery로부터 Service instance의 list를 제공 받아서 Load balancing을 수행한다.

- 요청 실패 시 다른 instance로 자동 전환한다.


실습

- 아래의 의존성을 주입하여 order 클라이언트와 product 클라이언트를 생성한다.

	- Spring Web
    - Lombok
    - Eureka Discovery Client
    - Open Feign

실습 시 유의 사항

	1. product가 없는 상태에서 order를 먼저 호출하면 에러가 발생할 수 있으므로 product를 먼저 작업한다.
    2. server를 먼저 실행시킨 후 product를 실행시킨다.

- IntelliJ IDEA 상단의 Edit Configurations 메뉴에 들어가 product 2개를 복제하고 포트 번호를 19093, 19094로 설정한다.

[그림 1] - Application (server), ProductApplication (product, port=19092) 실행



- [그림 2]에서 포트 번호가 19092인 PRODUCT-SERVICE가 실행 중 (Status: UP)임을 확인할 수 있다.

[그림 2] - Eureka server


- [그림 3]처럼 http://localhost:19092/product/1에 접속하면 [그림 4]의 ProductController 내부의 getProduct()에서 반환하는 값이 잘 출력되었음을 확인할 수 있다.

[그림 3] - http://localhost:19092/product/1 요청

[그림 4] - ProductController


- 이번에는 포트 번호가 19093, 19094인 ProductApplication들도 실행시킨다.

[그림 5] - ProductApplication:19093, ProductApplication:19094 추가 실행

[그림 6] - http://localhost:19093/product/1 요청

[그림 7] - http://localhost:19094/product/1 요청


- 한편, order에는 ProductClient 인터페이스를 [그림 8]처럼 정의한다.

- @FeignClient(name = "product-service")를 이용하여 order 서비스가 product-service와 통신하여 특정 상품의 정보를 가져올 수 있도록 한다.

[그림 8] - ProductClient

- order의 환경 설정 파일인 application.yml을 강의 내용대로 설정한 후 실행시키면 http://localhost:19090/에 요청했을 때 [그림 9]처럼 한 개의 order-service와 세 개의 product-service가 실행 중임을 확인할 수 있다

[그림 9] - Eureka Server


- [그림 10-1] - [그림 10-3]에서 볼 수 있듯이, http://localhost:19091/order/1에 반복적으로 요청하면 Round-Robbin Load Balancing Algorithm에 따라 매번 각기 다른 port 번호의 서비스로 요청된 것을 확인할 수 있다.

[그림 10-1] http://localhost:19091/order/1 첫 번째 요청

[그림 10-2] http://localhost:19091/order/1 두 번째 요청

[그림 10-3] http://localhost:19091/order/1 세 번째 요청


profile
시행착오는 성장의 밑거름입니다.

0개의 댓글