Spring Cloud Ribbon 클 라 이언 트 부하 균형 구현 예시
대형 응용 시스템 부하 균형(LB:Load Balancing)이 가장 먼저 해결 되 는 문제 다.마이크로 서비스 이전에 LB 방안 은 주로 집중 식 부하 균형 방안 으로 서비스 소비자 와 서비스 제공 자 사이 에 또 하나의 독립 된 LB 이다.LB 는 보통 전문 적 인 하드웨어,예 를 들 어 F5 또는 소프트웨어 를 바탕 으로 하 는 VS,HAproxy 등 이다.LB 에는 모든 서비스의 주소 매 핑 표 가 있 습 니 다.서비스 소비자 가 특정한 목표 서 비 스 를 호출 할 때 LB 에 먼저 요청 하고 LB 가 특정한 전략(예 를 들 어 Round-Robin)으로 부하 균형 을 이 룬 후에 목표 서비스 로 전송 할 것 을 요청 합 니 다.
한편,마이크로 서비스의 등장 은 LB 의 실현 에 또 다른 방향 을 제공 했다.LB 의 기능 을 집중 적 인 장치 나 서버 가 제공 하 는 것 이 아니 라 라 라 이브 러 리 방식 으로 서비스 소비자 의 프로 세 스 에 통합 시 켰 다.이런 방안 을 소프트 부하 균형(Soft Load Balancing)또는 클 라 이언 트 부하 균형 이 라 고 한다.Spring Cloud 에서 Eureka 의 서비스 등록 기능 에 맞 춰 리본 서브 프로젝트 는 REST 클 라 이언 트 에 부하 균형 을 이 루 었 다.
Spring Cloud Ribbon 을 사용 하여 서비스 소비자 실현
새 spring-cloud-sample-tutorial-consumer 프로젝트
spring-cloud-sample-tutorial 에서 spring-cloud-sample-tutorial-consumer 하위 프로젝트 를 새로 만 듭 니 다.
ribbon 과 eureka 의존 추가
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<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>
applicationoin.properties,등록 센터 주소 설정
spring.application.name=consumer
server.port=30001
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/,http://localhost:10002/eureka/
UserController 를 작성 하고@LoadBalanced 주 해 를 추가 하 며 Ribbon 부하 균형 을 사용 합 니 다.
@Controller
@RequestMapping("user")
public class UserController {
@Bean
@LoadBalanced
RestTemplate initRestTemplate(){
return new RestTemplate();
}
@Autowired
private RestTemplate restTemplate;
@RequestMapping("add")
@ResponseBody
public String add(String userName, String age){
return restTemplate.getForEntity("http://PRODUCER/user/add",String.class,userName,age).getBody();
}
}
ConsumerApplication 을 작성 하고@EnableEurekaClient 를 추가 하 며 서비스 등록 을 사용 합 니 다.
@EnableEurekaClient
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}
클 러 스 터 배포 프로듀서클 러 스 터 의 Producer 를 모 의 하기 위해 producer 프로젝트 에 application-profile 1.properties 와 application-profile 2.properties 를 새로 만 듭 니 다.
application-profile1.properties
spring.application.name=producer
server.port=20001
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/,http://localhost:10002/eureka/
application-profile2.properties
spring.application.name=producer
server.port=20002
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/,http://localhost:10002/eureka/
부하 효 과 를 측정 하기 위해 서,우 리 는 호출 된 서비스의 포트 를 꺼 냈 다.
@Controller
@RequestMapping("user")
public class UserController {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private DiscoveryClient client;
@RequestMapping("add")
@ResponseBody
public String addUser(String userName, String age) {
return "Success from " + client.getLocalServiceInstance().getHost() + ":" + client.getLocalServiceInstance().getPort() ;
}
}
시작 테스트등록 센터 시작
각각 Active Profiles 를 profile 1 과 profile 2 로 설정 하고 두 번 시작 하여 등록 센터 클 러 스 터 의 서비스 시작 을 완료 합 니 다.
시작 서비스 공급 자
위 와 같은 방법 으로 서비스 제공 자 를 시작 합 니 다.
서비스 소비자 시작
서비스 제공 자 는 단일 기기 로 하면 되 고 Consumer Application 을 정상적으로 시작 하면 됩 니 다.
검증 하 다.
브 라 우 저 에서 입력http://localhost:30001/user/add
재 방문:
이 를 통 해 알 수 있 듯 이 우리 의 부하 균형 호출 서 비 스 는 이미 성공 적 이 고 기본적으로 교대 훈련 방식 에 따라 부하 균형 을 이룬다.
총결산
본 고 는 Spring Cloud Ribbon 을 사용 하여 클 라 이언 트 부하 균형 호출 을 소개 하고 완성 했다.
다음은 스프링 클 라 우 드 를 어떻게 사용 하여 서비스 모니터링 을 하 는 지 계속 소개 하 겠 습 니 다.
원본 코드 다운로드
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.