Spring Cloud 부하 균형 및 원 격 호출 상세 설명
마이크로 서 비 스 를 사용 한 후에 높 은 병행 압력 을 감당 하기 위해 같은 서 비 스 는 여러 개의 인 스 턴 스 를 시작 할 수 있 습 니 다.이때 소비 자 는 부하 균형 을 맞 춰 요 구 를 각 사례 로 분산 시 켜 야 한다.부하 균형 은 주로 두 가지 디자인 이 있다.
서버 부하 균형 클 라 이언 트 부하 균형
전통 적 인 분포 식 서비스 에 있어 서 대부분 서버 부하 균형 을 사용한다.보통 Nginx 나 ELB 등 도 구 를 부하 이퀄 라이저 로 사용 합 니 다.다음 그림 과 같 습 니 다.
전통 부하 균형
한편,Spring Cloud 에서'클 라 이언 트 부하 균형'방식 을 사용 하고'Ribbon'구성 요 소 를 사용 하여 클 라 이언 트 의 부하 균형 을 실현 합 니 다.마이크로 서비스 등록 센터 의존 도 를 도입 하면 자동 으로 리본 의존 도 를 도입 한다.클 라 이언 트 부하 균형 원 리 는 다음 과 같다.
클 라 이언 트 부하 균형
Ribbon 의 원리
Ribbon 은 RestTemplate 의 차단기(인 터 페 이 스 는 Client HttpRequestInterceptor)메커니즘 을 이용 하여 차단기 에서 이 루어 진 부하 균형 을 이용 했다.부하 균형 의 기본 적 인 실현 은'서비스 등록 센터'에서 사용 가능 한 서비스 주소 목록 을 얻 은 다음 에 일정한 알고리즘 을 통 해 부하 하여 어떤 서비스 주 소 를 사용 하여 HTTP 호출 을 할 지 결정 하 는 것 이다.
자세 한 내용 은 LoadBalancer Interceptor 클래스 를 볼 수 있 습 니 다.org.spring framework.cloud.client.loadbancer 패키지 에 있 습 니 다.
리본 사용 하기
먼저 생산자'service-user'를 정의 합 니 다.저 는 용기 로 여러 개의 생산자 인 스 턴 스 를 시 작 했 습 니 다.모든 인 스 턴 스 는 서로 다른 id 를 가지 고 있 습 니 다.제 예제 코드 에서 두 개의 인 스 턴 스 를 시 작 했 습 니 다.
service-user-1
service-user-2
코드:
@RestController
@RequestMapping
public class HelloController {
@Value("${spring.cloud.consul.discovery.instanceId}")
private String instanceId;
@GetMapping("hello")
public String hello() {
return String.format("hello, this is %s", instanceId);
}
}
그리고 소비자'서비스-order'에 대해 서 는 자바 성명 식 주해 방식 으로 리본 을 사용 할 수 있 습 니 다.소비자 가 RestTemplate 유형의 Bean 에@LoadBalanced 를 붙 이면 됩 니 다.그리고 부하 균형 정책 을 설정 합 니 다:
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced
public RestTemplate ribbonRestTemplate(){
return new RestTemplate();
}
@Bean
public IRule ribbonRule() {
return new RandomRule(); //
}
}
그리고 자동 으로 주입 되 는 RestTemplate 형식의 Bean 을 직접 사용 할 수 있 습 니 다.
@RestController
@RequestMapping
public class HelloController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/ribbon/service-user")
public String ribbonService(){
return restTemplate.getForObject("http://service-user/hello", String.class);
}
}
이때 소비자 의/libbon/service-user 를 방문 하여 몇 번 새로 고침 하면 다음 두 개의 무 작위 응답 을 볼 수 있 습 니 다.hello, this is service-user-2
hello, this is service-user-1
부하 균형 정책
IRule 인터페이스의 실현 클래스 를 보면 Ribbon 의 모든 부하 균형 전략 을 볼 수 있 습 니 다.각 실현 클래스 상단 의 설명 을 보면 구체 적 인 전략 을 볼 수 있 습 니 다.
부하 이퀄 라이저
Spring Cloud 는 원 격 HTTP 호출 을 위해 OpenFeign 구성 요소(이전 에는 Feign)를 제공 합 니 다.그것 은 RestTemplate 에 대한 패키지 입 니 다.
Feign 은 성명 식 웹 서비스 클 라 이언 트 입 니 다.Feign 을 사용 하면 웹 서비스 클 라 이언 트 를 작성 하 는 것 이 더욱 간단 합 니 다.Spring Cloud 는 Feign 을 봉인 하여 Spring MVC 표준 주해 와 HttpMessageConverters 를 지원 하도록 했다.Feign 은 부하 균형 을 지원 하기 위해 마이크로 서비스 등록 센터 와 Ribbon 을 조합 해서 사용 할 수 있다.
OpenFeign 사용 하기
첫 번 째,의존 도입:
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
두 번 째 단계,시작 설정,시작 클래스 에@EnableFeignClient 설명 추가:
@SpringBootApplicationbr/>@EnableFeignClients
public class ServiceOrderApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceOrderApplication.class, args);
}
}
세 번 째 단계:호출 인 터 페 이 스 를 설명 합 니 다.제 사례 는 service-order 가 service-user 의/hello 인 터 페 이 스 를 호출 하 는 것 입 니 다.여기 의 주 해 는 Spring MVC 의 주해 와 일치 합 니 다.Feign 이 POST 요청 을 할 때 작은 구덩이 가 있 습 니 다.자세 한 내용 은 SpringCloud Feign Post 폼 요청 을 참고 하 십시오.
@FeignClient("service-user")
public interface UserClient {
@GetMapping("hello")
String getUserHello();
}
4 단계:사용,주 해 는@Autowired 주 해 를 사용 하여 주입 하면 됩 니 다.
@RestController
@RequestMapping
public class HelloController {
@Autowired
UserClient userClient;
@GetMapping("hello")
public String hello() {
return "hello, this is order service";
}
@GetMapping("userHello")
public String user() {
return userClient.getUserHello() + ", this is order-service";
}
}
너무 쉬 워 보이 지 않 아 요?OpenFeign 통합 리본
앞에서 언급 한 바 와 같이 OpenFeign 밑바닥 은 RestTemplate 에 대한 패키지 이 고,Ribbon 은 RestTemplate 에 필 터 를 추가 함으로써 이 루어 지기 때문에 OpenFeign 은 천성적으로 자동 으로 Ribbon 을 집적 하기 때문에 우 리 는 어떠한 추가 설정 도 필요 하지 않다.
상기 코드 에서 시작 하면 서비스-order 의/userHello 포트 를 방문 하여 끊임없이 갱신 할 수 있 으 며 부하 균형 이 이 루어 진 것 을 발견 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.