반응형
Ribbon 이란?
- Called(API Caller)에 탑재되는 S/W 모듈
- 주어진 서버 목록에 대해서 Load Balancing을 수행함
Ribbon의 장점
- H/W가 필요없이 S/W로만 Load Balancing 가능(비용 ⬇️, 유연성 ⬆️)
- 서버 목록의 동적 변경이 자유로움(단 Coding 필요)
- Load Balancing Schema를 마음대로 구성 가능(단 Coding 필요)
- 매우 다양한 설정 가능(서버선택, 실패 시 skip시간, Ping체크 등등)
- Retry 기능이 내장되어 있음
- Eureka - Service Discovery 와 함께 사용되어 매우 강력한 기능 발휘(서버 목록을 자동으로 관리)
- Twelve-Factors 의 설정(Config)에 적합
사용법
1. Ribbon Dependency 추가
ServiceA build.gradle
dependencies {
...
compile('org.springframework.cloud:spring-cloud-starter-netflix-ribbon')
}
2. 연결할 서비스 URL을 호출하는 메소드에 @LoadBalanced 어노테이션 추가
ServiceA main class
public class ServiceAApplication {
@Bean
@LoadBalaced
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(ServiceAAplication.class);
}
}
3. 호출 URL의 IP주소를 이름등으로 변경
ServiceA ServiceBRemoteServiceImpl
// localhost:8081에서 serviceB로 변경
// private final String url = "http://localhost:8081/serviceBApi";
private final String url = "http://serviceB/serviceBApi";
4. 호출하는 서비스의 application.yml 파일을 이용해 3에서 설정한 Ribbon의 이름을 실제 서버로 맵핑
ServiceA application.yml
serviceB:
ribbon:
listOfServers: localhost:8082, localhost:8083 # Load Balancing될 서버 목록
# 기타 retry 기능 추가
MaxAutoRetries: 0 # 실패시 재시도 하는 최대 횟수
MaxAutoRetriesNextServer: 1 # 실패시 다른 서버로 재시도 하는 횟수
5. Retry 사용 시 Retry Dependency 추가
ServiceA build.grade
dependencies {
...
compile('org.springframework.cloud:spring-cloud-starter-netflix-ribbon')
compile('org.springframework.retry:spring-retry:1.2.2.RELEASE')
}
- 서버 두대 중 한대라도 존재하거나 살아있으면 Load Balancing & Retry로 항상 통신 성공
- 기본적으로 Round Robin 방식을 사용(뒤쪽 서버부터 순차적)
- Retry를 시도하더라도 HystrixTimeout이 발생하면, 즉시 에러가 리턴 될 수 있다.(Hystrix로 Ribbon을 감쌌기 때문)
반응형
'MSA' 카테고리의 다른 글
Spring Cloud Feign - Declarative Http Client (0) | 2021.09.11 |
---|---|
Eureka - Service Discovery (0) | 2021.09.10 |
Hystrix - Circuit Breaker (0) | 2021.09.10 |
Twelve-Factors (0) | 2021.09.10 |
Cloud Native (0) | 2021.09.10 |