Spring cloud alibaba 의 Ribbon 부하 균형 실현 방안

1.리본 이란 무엇 인가
현재 주류 의 부하 균형 방안 은 다음 과 같은 두 가지 로 나 뉜 다.
(1)집중 식 부하 균형:소비자 와 서비스 제공 자 사이 에서 독립 된 대리 방식 으로 부하 하고 하드웨어 가 있 는(F5),소프트웨어 의 Nginx
(2)클 라 이언 트 가 공급 자 에 게 연결 집합 을 요청 하고 자신의 요구 상황 에 따라 부하 균형 을 잡 으 면 Ribbon 은 클 라 이언 트 가 스스로 부하 균형 을 이룬다.
Spring cloud Ribbon 은 넷 플 릭 스 Ribbon 을 바탕 으로 실 현 된 클 라 이언 트 의 부하 균형 도구 로 Ribbon 클 라 이언 트 는 시간 초과,재 시도 등 일련의 완벽 한 설정 을 제공 합 니 다.Load Balancer 를 통 해 서버 가 제공 하 는 모든 기계 인 스 턴 스 를 가 져 옵 니 다.Ribbon 은 자동 으로 특정한 규칙(폴 링,랜 덤)을 바탕 으로 이 서 비 스 를 호출 합 니 다.리본 도 자신의 부하 균형 알고리즘 을 실현 할 수 있다.
1.1 클 라 이언 트 의 부하 균형
예 를 들 어 spring cloud 의 Ribbon 은 클 라 이언 트 에 서버 주소 목록 이 있 습 니 다.요청 을 보 내기 전에 부하 균형 알고리즘 을 통 해 서버 를 선택 한 다음 에 방문 합 니 다.이것 은 클 라 이언 트 부하 균형,즉 클 라 이언 트 에서 부하 균형 알고리즘 분 배 를 하 는 것 입 니 다.

1.2 서버 측의 부하 균형
예 를 들 어 Nginx 를 통 해 부하 균형 을 맞 추고 먼저 요청 을 보 낸 다음 부하 균형 알고리즘 을 통 해 여러 서버 사이 에 하 나 를 선택 하여 접근 합 니 다.서버 에서 부하 균형 알고리즘 분 배 를 하 는 것 이다.

1.3 흔 한 부하 균형 알고리즘
(1)랜 덤:랜 덤 으로 서 비 스 를 선택 하여 집행 하 는데 이런 방법 은 사용 이 비교적 적다.
(2)폴 링:부하 균형 기본 실현 방식,요청 후 줄 서기 처리
(3)가중 폴 링:서버 성능 에 대한 분 형 을 통 해 높 은 설정,낮은 부하 서버 에 더욱 높 은 가중치 를 분배 하고 각 서버 의 압력 을 균형 있 게 한다.
(4)주소 Hash,클 라 이언 트 주 소 를 통 해 주소 의 hash 값 을 모드 맵 으로 예약 합 니 다.
(5)최소 링크 수:요청 이 균형 을 이 루 더 라 도 압력 이 균형 을 이 루 는 것 은 아 닙 니 다.최소 링크 수 법 은 서버 의 상황,예 를 들 어 요청 적체 수의 매개 변 수 를 현재 압력 이 가장 적은 서버 에 할당 하 는 것 입 니 다.
2.Nacos 사용 리본
(1)Nacos disconvery 에서 기본적으로 Ribbon 이 도입 되 었 습 니 다.따로 도입 할 필요 가 없습니다.

(2)@LoadBalanced 주석 추가

(3)호출 할 때 ip+포트 대신 서버 이름 을 사용 합 니 다.즉,기본 폴 링 의 부하 균형 방식 을 사용 합 니 다.

3.Ribbon 부하 균형 전략

3.1 상용 부하 균형 설명
① RandomRule:서비스 인 스 턴 스 를 무 작위 로 선택 합 니 다.
② RoundRobinRule:폴 링 부하 균형 전략
③ Retry Tule:폴 링 을 바탕 으로 재 시도 하고 재 시도 하 는 횟수 는 서비스 연결 의 시간 초과 에 의 해 제 어 됩 니 다.
④ Weighted Response TimeRule:한 서비스의 평균 응답 시간 이 짧 을 수록 가중치 가 클 수록 인 스 턴 스 를 바 꾸 어 임 무 를 수행 할 확률 이 높다.
⑤ BestAvaliableRule:실 효 된 서비스 인 스 턴 스 를 걸 러 내 는 동시에 가장 작은 서비스 인 스 턴 스 를 찾 아 사용 합 니 다.
⑥ ZoneAvoidance Rule:소재 지역 을 판단 하고 가장 가 까 운 서비스 호출 을 선택 하 십시오.
⑦ NacosRule:랜 덤 과 설정 의 가중치 에 따라 서버 를 선택 합 니 다.
3.2 기본 부하 균형 정책 인 설정 클래스 를 수정 하 는 방식
① 소비 단 항목 OrderNacos 를 할당 하고 OrderRibbon 으로 이름 을 바 꿉 니 다.

OrderRibbon 의 원래 OrderNacos.iml 파일 삭제

OrderRibbon 의 pom.xml 의 ArtifactId 값 을 수정 합 니 다.

새로 추 가 된 OrderRibbon 을 부모 프로젝트 의 pom.xml 모듈 에 추가 합 니 다.

maven 항목 새로 고침

② RibbonConfig 설정 클래스 만 들 기
@Configuration 표 지 를 사용 하면 설정 클래스 입 니 다.@Bean 을 사용 하여 spring 용기 에 주입 합 니 다.방법 명 은 iRule 이 어야 합 니 다.그렇지 않 으 면 유효 하지 않 습 니 다.

/**
 *          
 */
@Configuration
public class RibbonConfig {
 
 
    //       iRule
    @Bean
    public IRule iRule(){
        return new RandomRule();
    }
}
***이 설정 류 는@SpringBootApplication 의 주석@CompentScan 에서 스 캔 한 곳 에 두 면 안 됩 니 다.그렇지 않 으 면 사용자 정의 설정 류 는 모든 RibbonClient 에 공 유 됩 니 다.
springboot 시작 클래스 입 니 다.스 캔 범 위 를 설정 하지 않 으 면 시작 클래스 OrderApplication 과 같은 디 렉 터 리 단계 의 파일 을 기본적으로 스 캔 합 니 다.여 기 는 qingyun 가방 에 있 는 파일 을 스 캔 합 니 다.

설정 한 디 렉 터 리 는 다음 과 같 습 니 다:

③ 시작 클래스 에서 주석@RibbonClient 를 사용 하여 설정 한 사용자 정의 부하 이퀄 라이저 를 추가 합 니 다.value 에 여러 개의 부하 이퀄 라이저 를 설정 할 수 있 고 배열 형식의 값 입 니 다.서비스 가 만 든 RestTemplate 를 호출 하여@LoadBalanced 로 수식 합 니 다.

소비 자 를 시작 하고 서로 다른 포트 의 서비스 제공 자 는 페이지 방문 을 통 해 부하 균형 체 제 를 이전 기본 에서 폴 링 방식 으로 바 꾸 는 것 을 볼 수 있 습 니 다.


3.3 기본 부하 균형 정책-파일 설정 방식 수정
설정 파일 을 사용 하여 부하 균형 방식 을 설정 합 니 다.특정한 서비스,형식:서비스 이름.ribbon.NFLoadBalancer RuleClassName=서비스 방식
stock-service.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule
nacos 관리 인터페이스 에서 서버 의 가중치 를 설정 합 니 다.가중치 가 클 수록 선 택 될 확률 이 높 습 니 다.

프로젝트 프로필 에 설정 할 수도 있 습 니 다.

#       
spring.cloud.nacos.discovery.weight=4
3.4 사용자 정의 부하 균형 정책
(1)클래스 계승 AbstractLoadBalancer Rule 을 정의 하고 choose 방법 을 다시 씁 니 다.

/**
 *          
 */
public class CustomRule extends AbstractLoadBalancerRule {
 
 
    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
 
    }
 
    @Override
    public Server choose(Object o) {
        ILoadBalancer loadBalancer = this.getLoadBalancer();
 
        //           
        List<Server> reachableServers = loadBalancer.getReachableServers();
 
        //             
        int i = ThreadLocalRandom.current().nextInt(reachableServers.size());
 
        //    
        Server server = reachableServers.get(i);
 
 
        return server;
    }
}
(2)application.properties 에 설정 정 보 를 추가 하여 사용자 정의 설정 류 를 가리킨다.

stock-service.ribbon.NFLoadBalancerRuleClassName=com.rule.CustomRule
(3)ribbon 배 고 픔 로 딩 오픈
설정 이 없 는 상태 에서 서 비 스 를 처음 요청 할 때 만 해당 하 는 서비스 인 스 턴 스 를 불 러 오 라 고 요청 합 니 다.

설정 파일 application.properties 에서 배 고 픈 로 딩 을 설정 할 수 있 습 니 다.

#  ribbon    
ribbon.eager-load.enabled=true
#       ,        
ribbon.eager-load.clients=stock-service
프로젝트 를 시작 할 때 설정 서비스 에 사용 할 부하 균형 정책 을 불 러 옵 니 다.

4.리본 대신 spring cloud loadbancer 사용
(1)pom.xml 에 nacos-discovery 를 도입 할 때 ribbon 을 제거 합 니 다.이 때 프로젝트 에 의존 하 는 가방 에서 ribbon 을 제거 하 였 습 니 다.

(2)pom.xml 에 loadbancer 의존 도 를 추가 합 니 다.전 제 는 프로젝트 에 spring cloud 의존 도가 도입 되 었 습 니 다(부모 maven 이 도입 되 었 습 니 다).

  <!--   loadbalancer  -->
  <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  </dependency>
(3)RestTemplate 를 만 들 때@LoadBalanced 를 추가 해 야 합 니 다.

//       RestTemplate
    //    LoadBalanced      ,       
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate build = builder.build();
        return build;
    }
(4)application.properties 에서 ribbon 을 사용 하지 않 습 니 다.

#  ribbon
spring.cloud.loadbalancer.ribbon.enabled=false
(5)loadbancer 를 사용자 정의 하려 면 ribbon 과 유사 한 방식 으로@LoadBalancer Client 를 사용 하여 springboot 시작 클래스 에 설정 하 십시오.

Spring cloud alibaba-Ribbon 부하 균형 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.Spring cloud alibaba--Ribbon 부하 균형 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기