SpringCloud - ribbon 부하 균형

4265 단어
Ribbon 은 SpringCloud 가 제공 하 는 클 라 이언 트 부하 균형 구성 요소 입 니 다.
부하 균형
부하 균형 설 비 는 하드웨어 부하 와 소프트웨어 부하 로 나 눌 수 있 는데 흔히 볼 수 있 는 하드웨어 부하 균형 설 비 는?
  • F5
  • NetScaler

  • 흔히 볼 수 있 는 소프트웨어 부하 균형 응용
  • Nginx
  • LVS
  • HAProxy

  • 일반적으로 하드웨어 부하 균형 가격 은 비교적 비 싸 지만 성능 은 소프트웨어 부하 보다 훨씬 우수 하 다.위 에 열거 한 소프트웨어 부하 Nginx, LVS 는 모두 서버 의 부하 에 속한다.오늘 우 리 는 Ribbon 이 클 라 이언 트 부하 라 는 것 을 토론 할 것 이다.부하 균형 장치 의 실현 은 두 부분 으로 나 눌 수 있다. 1. 부하 균형 알고리즘 에 따라 클 러 스 터 의 기계 주소 에서 방문 할 주 소 를 선택 할 수 있다.2. 해당 주소 에 해당 하 는 기기 에 전송 을 요청 합 니 다.흔히 볼 수 있 는 부하 균형 알고리즘 을 살 펴 보 자.
    흔 한 부하 균형 알고리즘
  • 폴 링 (라운드 로 빈)
  • 가중 폴 링 (Weighted Round Robin)
  • 랜 덤 (랜 덤)
  • 최소 연결 (최소 연결)
  • 원본 주소 해시 (Source Hashing)
  • 폴 링 요청 은 각 서버 에 순서대로 전송 되 고 모든 서버 의 하드웨어 가 같은 장면 에 사 용 됩 니 다.
    가중 폴 링 은 폴 링 을 바탕 으로 가중 된다. 모든 기계 의 하드웨어 상황 이 똑 같다 는 것 을 보장 할 수 없 기 때문에 하드웨어 설정 의 가중치 에 따라 모든 서버 에 요청 을 나 누 어 줄 것 이다.
    최소 연결 은 각 서버 가 처리 하고 있 는 연결 수 를 기록 하고 새로 도착 한 요청 을 최소 연결 서버 에 배포 합 니 다.
    원본 주소 산열 은 원본 주소 IP 를 hash 로 계산 하여 응용 서버 주 소 를 얻 습 니 다. 그러면 같은 IP 의 요청 이 같은 서버 에 영원히 떨 어 질 수 있 고 응용 시스템 이 세 션 을 유지 하 는 데 편리 합 니 다.
    리본 도입
    Ribbon 은 클 라 이언 트 부하 이기 때문에 Ribbon 은 서비스 소비 단 에서 자주 사용 해 야 합 니 다.
  • POM 파일 에 리본 관련 의존 도입
  • 
        org.springframework.cloud
        spring-cloud-starter-eureka
    
    
        org.springframework.cloud
        spring-cloud-starter-config
    
    
        org.springframework.cloud
        spring-cloud-starter-ribbon
    
    
  • application. yml 파일 을 수정 하고 유레카 서비스 등록 센터 의 주소 설정 을 추가 합 니 다
  • 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();
        }
    }
    
  • 클 라 이언 트 에서 서비스 URL 주 소 를 호출 하고 서비스 제공 자의 IP 를 서비스 제공 자가 Eureka 등록 센터 에 등 록 된 서비스 이름 으로 교체 합 니 다.
  • 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(this.httpHeaders),Dept.class).getBody();
            return dept;
        }
    

    일반적으로 리본 은 유레카 와 결합 하여 사용 하지만 리본 도 독립 적 으로 사용 할 수 있 지만 일반적으로 이렇게 사용 하 는 것 을 권장 하지 않 는 다.
  • 좋은 웹페이지 즐겨찾기