>  기사  >  Java  >  Spring Cloud 클라이언트 로드 밸런싱 리본

Spring Cloud 클라이언트 로드 밸런싱 리본

巴扎黑
巴扎黑원래의
2017-06-26 09:31:341107검색

1. 로드 밸런싱

로드 밸런싱 : 기존 네트워크 구조를 기반으로 구축되어 네트워크 장치 및 서버의 대역폭을 확장하고 처리량을 늘리며 네트워크 데이터를 향상시키는 저렴하고 효과적이며 투명한 방법을 제공합니다. 처리 기능을 제공하고 네트워크 유연성과 가용성을 향상시킵니다. 이는 웹 서버, FTP 서버, 엔터프라이즈 핵심 애플리케이션 서버 및 기타 미션 크리티컬 서버 등과 같은 여러 운영 단위에 실행을 할당하여 작업 작업을 함께 완료하는 것을 의미합니다.

1. 서버 측 로드 밸런싱: 클라이언트가 로드 밸런싱 서버에 요청하고, 로드 밸런싱 서버는 자체 알고리즘에 따라 실제로 비즈니스를 제공하는 서버에 요청을 전달합니다. 로드 밸런싱 서버 및 로드 밸런싱 서버는 최종적으로 클라이언트에 데이터를 반환합니다. (nginx)

2. 클라이언트 측 로드 밸런싱: 클라이언트 기반 로드 밸런싱은 간단히 말해서 클라이언트 프로그램에서 스케줄링 알고리즘을 설정하고, 서버에 요청할 때 먼저 스케줄링 알고리즘 계산을 수행하는 것입니다. 어느 서버에 요청을 보낸 다음 해당 서버에 요청을 보낼지 결정합니다.

클라이언트 로드 밸런싱 기반 특성:

  • 클라이언트 내부 프로그램에 의해 구현되며 로드 밸런서 소프트웨어 및 하드웨어에 대한 추가 투자가 필요하지 않습니다.

  • 비즈니스 서버를 사용할 수 없는 문제는 프로그램 내에서 해결해야 합니다. 서버 장애는 애플리케이션에 투명성이 거의 없습니다.

  • 비즈니스 서버 압박 문제는 프로그램 내에서 해결해야 합니다.

2. 리본은 클라이언트 로드 밸런싱을 구현합니다

스프링 부트를 사용하여 테스트합니다.

pom 파일:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 ">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.jalja.org</groupId>
  <artifactId>spring-consumer-server-ribbon</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
   <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Camden.SR4</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

application.yml

stores:
  ribbon:
    listOfServers: www.baidu.com,www.jalja.org,www.163.com

Ribbon의 로드 밸런싱 전략

1 RoundRobinRule(폴링 모드) 공개 클래스 RoundRobinRule은 AbstractLoadBalancerRule을 확장합니다. 서버를 선택하기 위한 roundRobin 방식 폴링 인덱스를 폴링하고 인덱스의 해당 위치에 있는 서버를 선택하는 전략이기도 합니다. 2. Random Rule(무작위 전략) public class RandomRule은 AbstractLoadBalancerRule을 확장합니다. 서버를 무작위로 선택합니다.

인덱스에서 무작위로 인덱스에 해당하는 서버를 선택합니다
.




SpringCloudRibbonApplication.java에

SpringCloudRibbonApplication.java

   ="static"= loadBalancer.choose("stores"= URI.create(String.format("http://%s:%s" "static"
추가 RoundRobinRule

동시 접속이 가장 적은 서버를 선택하세요. 요청 서버를 하나씩 검사하면 무시하고 ActiveRequestsCount구성 파일 application.yml에 com.netflix.loadbalancer.BestAvailableRule을 NFLoadBalancerRuleClassName 추가하세요.

SpringCloudRibbonApplication.java에

NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

를 추가합니다. 6번 실행한 결과:

stores:
  ribbon:
    listOfServers: www.baidu.com,www.jalja.org,www.163.org
    #随机
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

4. AvailabilityFilteringRule(서버 상태) 공개 클래스 AvailabilityFilteringRule은 PredicateBasedRule을 확장합니다. 지속적인 연결 실패로 인해 회로 트립으로 표시된 백엔드 서버를 필터링하고 동시성이 높은 백엔드 서버를 필터링합니다(활성 연결이 구성된 임계값을 초과함). AvailabilityPredicate를 사용하여 서버를 필터링하는 로직을 포함합니다. 실제로는 응답 시간이 길수록 가중치가 부여되는 상태에 기록된 각 서버의 실행 상태를 확인하는 것입니다. 무게가 나가고 선택될 가능성이 낮아집니다. 백그라운드 스레드는 주기적으로 상태로부터 평가 응답 시간을 읽고 각 서버에 대한 가중치를 계산합니다. 가중치 계산도 상대적으로 간단합니다. 각 서버의 평균 응답 시간에서 해당 응답 시간을 뺀 값이 서버의 가중치입니다. 작업이 막 시작되어 상태가 형성되지 않은 경우 루틴 전략을 사용하여 서버를 선택합니다.

6. RetryRule(정책 + 재시도에 따름)

public 클래스 RetryRule은 AbstractLoadBalancerRule을 확장하여 선택한 로드 밸런싱 정책에 대한 온머신 재시도 메커니즘을 제공합니다. 구성 기간 내에 서버 선택이 실패하면 항상 subRule을 사용하여 사용 가능한 서버를 선택하려고 시도합니다

7. ZoneAvoidanceRule(영역 상태 + 서비스 상태)

공개 클래스 ZoneAvoidanceRule은 PredicateBasedRule이 있는 영역에 대한 복합 판단을 확장합니다. 서버를 찾을 때 성능과 서버 가용성을 사용합니다. ZoneAvoidancePredicate 및 AvailabilityPredicate는 서버 선택 여부를 결정하는 데 사용됩니다. 전자는 영역의 실행 성능이 사용 가능한지 여부를 결정하고 사용 불가능한 영역(모든 서버)을 제거합니다. 과도한 연결을 필터링하는 데 사용됩니다.


4, 5, 6, 7은 위와 같은 방식으로 사용되며 여기서는 설명하지 않겠습니다


위 내용은 Spring Cloud 클라이언트 로드 밸런싱 리본의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.