Spring Cloud 시리즈 의 부하 균형 리본 예시 코드
1.1.1 개술
Ribbon 은 넷 플 릭 스 가 발표 한 부하 균형 기로 서 HTTP 와 TCP 클 라 이언 트 의 행동 을 제어 하 는 데 도움 이 된다.Ribbon 에 서비스 제공 자 주소 목록 을 설정 한 후에 Ribbon 은 특정한 부하 균형 알고리즘 을 바탕 으로 서비스 소비자 가 요청 할 수 있 도록 자동 으로 도와 줄 수 있 습 니 다.Ribbon 은 기본적으로 우리 에 게 많은 부하 균형 알고리즘 을 제공 했다.예 를 들 어 폴 링,랜 덤 등 이다.물론 Ribbon 에 게 사용자 정의 부하 균형 알고리즘 을 구현 할 수 있 습 니 다.Ribbon 은 현재 유지보수 상태 에 들 어 갔 지만 대규모 사용 중 입 니 다.Spring Cloud 는 LoadBalancer 를 Ribbon 의 교체 방안 으로 사용 하려 고 합 니 다.
1.1.2 관련 의존
현재 의 등록 센터 가 Ribbon 을 도입 해 주 었 기 때문에 우 리 는 다시 도입 하지 않 아 도 직접 사용 할 수 있 습 니 다.물론 다시 도입 해도 영향 이 없습니다.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
1.2 간단하게 사용1.2.1 건설 프로젝트
☞ eureka 프로젝트
1.2.2 부하 균형 오픈
부하 균형 을 여 는 것 은 매우 간단 하 다.RestTemplate 의 설정 방법 에
@LoadBalanced
주 해 를 더 하면 가장 간단 한 폴 링 을 사용 할 수 있다.
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/10/29
* @description
*/
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
1.2.3 부하 균형 사용
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/10/29
* @description
*/
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private RestTemplate restTemplate;
@GetMapping("/go")
public void go() {
List<ServiceInstance> providerServer = discoveryClient.getInstances("ProviderServer");
if (0 == providerServer.size()) {
return;
}
ServiceInstance serviceInstance = providerServer.get(0);
String url = serviceInstance.getUri() + "/provider/get";
System.out.println(url + " --- ");
String str = restTemplate.getForObject(url, String.class);
System.out.println(str);
}
}
어허!잘못 보 고 했 습 니 다.분명히 방문 할 수 있 는데 왜 사례 를 찾 지 못 했 습 니까?이것 은 디 스 커버 리 클 라 이언 트 를 사용 하여 서비스 제공 자 클 러 스 터 의 특정한 주 소 를 직접 얻 은 다음 에 RestTemplate 에 부하 균형 을 맞 추 게 해 야 합 니 다.우 리 는 모두 정확 한 주 소 를 받 았 는데 어떻게 부하 균형 을 잡 습 니까?그래서 IP 를 사용 할 수 없습니다.서비스 이름 을 사용 해 야 합 니 다.
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/go")
public void go() {
String url = "http://ProviderServer/provider/get";
String str = restTemplate.getForObject(url, String.class);
System.out.println(str);
}
}
수정 이 끝나 면 서비스 제공 자가 번갈아 서 비 스 를 제공 하 는 것 을 볼 수 있다.1.3 부하 균형 정책 교체
1.3.1 자체 부하 균형 전략
정책 이름
정책 설명
RoundRobinRule
폴 링 선택 서버
RandomRule
임의의 serve 선택
RetryRule
먼저 폴 링 정책 에 따라 서 비 스 를 가 져 옵 니 다.서 비 스 를 가 져 오 는 데 실패 하면 지 정 된 시간 내 에 다시 시도 하여 사용 가능 한 서 비 스 를 가 져 옵 니 다.
BestAvailableRule
여러 번 의 방문 고장 으로 인해 차단기 스위치 상태 에 있 는 서 비 스 를 먼저 걸 러 낸 다음 에 병발 량 이 가장 적은 서 비 스 를 선택 합 니 다.
AvailabilityFilteringRule
고장 인 스 턴 스 를 우선 필터 하고 작은 인 스 턴 스 를 선택 합 니 다.
WeightedResponseTimeRule
폴 링 의 확장,응답 속도 가 빠 른 인 스 턴 스 선택 비중 이 클 수록 선택 하기 쉽다.
ZoneAvoidanceRule
서버 가 있 는 지역 의 성능 과 서버 의 가용성 을 복합 적 으로 판단 하 는 서버
1.3.2 설정 클래스 사용
공식 문 서 는 이 사용자 정의 설정 류 는@Componedtscan 이 검색 한 현재 가방 과 하위 가방 에 넣 을 수 없다 고 명확 하 게 경고 합 니 다.그렇지 않 으 면 우리 가 사용자 정의 한 이 설정 류 는 모든 Ribbon 클 라 이언 트 에 의 해 공 유 됩 니 다.즉,Spring Boot 메 인 프로그램 에서 스 캔 한 가방 외 에 설정 류 를 정의 하거나 Spring Boot 메 인 프로그램 과 같은 단계 의 디 렉 터 리 에서 스 캔 을 제외 합 니 다.설정 클래스 생 성 완료 후 Spring Boo 메 인 프로그램 에@RibbonClient 주 해 를 추가 하여 설정 클래스 를 도입 합 니 다.name 속성 으로 호출 된 서비스 이름 을 지정 하고 configuration 속성 은 사용자 정의 설정 클래스 를 지정 합 니 다.
@Configuration
public class MyRibbonRule {
@Bean
public IRule ribbonRule() {
return new RandomRule();
}
}
@SpringBootApplication
@EnableDiscoveryClient
// name ,configuration
@RibbonClient(name = "ProviderServer", configuration = MyRibbonRule.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
1.3.3 프로필
#
# ,
ProviderServer:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
☞ 소스 코드
스프링 클 라 우 드 시리즈 의 부하 균형 리본 에 관 한 예시 코드 에 관 한 글 은 여기까지 입 니 다.스프링 클 라 우 드 부하 균형 리본 에 관 한 더 많은 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.