SpringCloud - ribbon 부하 균형
부하 균형
부하 균형 설 비 는 하드웨어 부하 와 소프트웨어 부하 로 나 눌 수 있 는데 흔히 볼 수 있 는 하드웨어 부하 균형 설 비 는?
흔히 볼 수 있 는 소프트웨어 부하 균형 응용
일반적으로 하드웨어 부하 균형 가격 은 비교적 비 싸 지만 성능 은 소프트웨어 부하 보다 훨씬 우수 하 다.위 에 열거 한 소프트웨어 부하 Nginx, LVS 는 모두 서버 의 부하 에 속한다.오늘 우 리 는 Ribbon 이 클 라 이언 트 부하 라 는 것 을 토론 할 것 이다.부하 균형 장치 의 실현 은 두 부분 으로 나 눌 수 있다. 1. 부하 균형 알고리즘 에 따라 클 러 스 터 의 기계 주소 에서 방문 할 주 소 를 선택 할 수 있다.2. 해당 주소 에 해당 하 는 기기 에 전송 을 요청 합 니 다.흔히 볼 수 있 는 부하 균형 알고리즘 을 살 펴 보 자.
흔 한 부하 균형 알고리즘
가중 폴 링 은 폴 링 을 바탕 으로 가중 된다. 모든 기계 의 하드웨어 상황 이 똑 같다 는 것 을 보장 할 수 없 기 때문에 하드웨어 설정 의 가중치 에 따라 모든 서버 에 요청 을 나 누 어 줄 것 이다.
최소 연결 은 각 서버 가 처리 하고 있 는 연결 수 를 기록 하고 새로 도착 한 요청 을 최소 연결 서버 에 배포 합 니 다.
원본 주소 산열 은 원본 주소 IP 를 hash 로 계산 하여 응용 서버 주 소 를 얻 습 니 다. 그러면 같은 IP 의 요청 이 같은 서버 에 영원히 떨 어 질 수 있 고 응용 시스템 이 세 션 을 유지 하 는 데 편리 합 니 다.
리본 도입
Ribbon 은 클 라 이언 트 부하 이기 때문에 Ribbon 은 서비스 소비 단 에서 자주 사용 해 야 합 니 다.
org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.cloud
spring-cloud-starter-config
org.springframework.cloud
spring-cloud-starter-ribbon
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka- 7001.com:7001/eureka,http://eureka-7002.com:7002/eureka,http://eureka-7003.com:7003/eureka
RestTemplate
대상 을 가 져 올 때 @LoadBalanced
주석 @Configuration
public class RestConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
http://127.0.0.1:8001/dept/get/
---->
http://dept-provider/dept/get/
Eureka 와 Ribbon 이 결 합 된 후에 서비스 소비 자 는 구체 적 인 서비스 제공 자의 구체 적 인 IP 와 포트 에 관심 을 가지 지 않 아 도 된다. 모든 정 보 는 Eureka 를 통 해 완성 되 고 Ribbon 을 통 해 부하 균형 을 이룬다.
사용자 정의 리본
부하 균형 정책 을 수정 하려 면 사용자 정의 LoadBalance 를 통 해 이 루어 질 수 있 습 니 다.
@Configuration
public class MyLoadBalanceConfig {
@Bean
public IRule ribbonRule(){ //IRule
return new RandomRule();
}
}
@RibbonClient
@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "ribbonClient",configuration = MyLoadBalanceConfig.class)
public class Consumer_80_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Consumer_80_StartSpringCloudApplication.class,args);
}
}
부하 균형 클 라 이언 트
LoadBalancerClient
를 통 해 서비스 제공 자의 관련 정 보 를 얻 을 수 있다. @Autowired
private LoadBalancerClient loadBalancerClient;
@RequestMapping(value = "/get")
public Dept get(long id) {
ServiceInstance serviceInstance = this.loadBalancerClient.choose("DEPT-PROVIDER") ;
System.out.println(
"【*** ServiceInstance ***】host = " + serviceInstance.getHost()
+ "、port = " + serviceInstance.getPort()
+ "、serviceId = " + serviceInstance.getServiceId());
//Dept dept = restTemplate.getForObject(DEPT_GET_URL + id, Dept.class);
Dept dept = restTemplate.exchange(DEPT_GET_URL+id, HttpMethod.GET,new HttpEntity
일반적으로 리본 은 유레카 와 결합 하여 사용 하지만 리본 도 독립 적 으로 사용 할 수 있 지만 일반적으로 이렇게 사용 하 는 것 을 권장 하지 않 는 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.