Home 실습 with spring boot Netflix OSS 4 - Ribbon
Post
Cancel

실습 with spring boot Netflix OSS 4 - Ribbon

순서상 리본을 먼저하고 유레카를 했어야하는 것 같은데 어쩌다보니까 유레카를 먼저하고 유레카 없이 리본을 해보게됐다. 실습도 실습인데 블로그에 정리하는게 정말 어렵다 ㅎㅎ 제대로 이해해야 쓸 수 있는데 어렴풋하게만 이해하고 음~되네~ 하니까 정리가 잘 안된다.

Ribbon이란? 👩‍🔧

클라이언트 사이드에서 로드밸런싱을 할 수 있도록 해주는 넷플릭스 OSS 중 하나다.
리본과 관련된 컨셉들 👇🏻👇🏻👇🏻👇🏻

  • List of servers: 특정 서비스를 수행하는 서버의 리스트들이다. 예를 들어서 서비스1을 호출하는 클라이언트가 있다면 서비스1을 수행하는 서버들의 리스트를 말한다.
  • Filtered list of servers : 위에서처럼 같은 서비스를 수행하는 여러 서버들이 있지만, 서버의 상태나 물리적으로 너무 멀어서 지연시간이 생기는 경우 이 서버들을 리스트에서 제거한다.
  • Ping : 서버가 active 상태인지 아닌지 체크하는 것이다. 기본은 유레카가 체크하도록 하지만 커스텀 할 수 있다.

간단하게 Ribbon 적용해보기 🤗

서비스 호출 부분

1) Ribbon 디펜던시 가져오기

1
2
3
4
<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

pom.xml 에 ribbon 디펜던시를 가져오도록 작성한다. 나는 메이븐 사용해서 위와 같은 형태로 작성하였다.

2) 서버리스트 추가하기

위에서 말했듯이 특정 서비스를 수행하는데에는 여러 서버들이 있을 수 있고 얘네들한테 부하가 몰리지 않고 골고루 퍼지도록 하는게 부하분산(loadbalancing) 이다.
그러니까 리본이 잘 알 수 있도록 이런 서비스는 이런 서버들이 할거야 하고 알려줘야한다.
로드밸런싱을 하고자 하는 서비스를 호출하는 쪽에 서버리스트를 정의한다.

1
2
ribbon:
  listOfServers: 127.0.0.1:8093, 127.0.0.1:8094

나는 서비스 하는 어플맄이션 두 개 놓을거라 리스트에 두개 추가해줬다.
앞에 해당 서비스 이름을 붙이면 서비스 별로 세팅이 가능하다는데, 일단 서비스가 하나밖에 없으니까 전체 적용되도록 서비스 이름을 안 붙였다.

3)로드밸런싱 적용하기

아주 간단하게 RestTemplate 사용해서 로드밸런싱 적용할 수 있다.
스프링에서 제공하는 로드밸런싱기능을 사용하기 위해 @LoadBalanced 어노테이션을 붙인다.

1
2
3
4
5
@LoadBalanced
	@Bean
	RestTemplate getRestTemplate() {
		return new RestTemplate();
	}

이렇게 하면 간단히 서비스에 적용할 이름으로 로드밸런싱 가능하다.

1
2
3
4
5
6
public String callService() {
		String url = UriComponentsBuilder.fromHttpUrl("http://simpleRibbon/simpleRibbonEX")
                .build()
                .toUriString();
		String response = restTemplate.getForObject(url, String.class);

여기서 simpleRibbon 이 리본이 인식할 서비스 이름이다.
원래대로라면 127.0.0.1:8094 이런식으로 지정해주어야하지만, 리본의 로드밸런싱 룰에 따라서 서버리스트들에 있는 서버들에 알아서 로드밸런싱 해준다.

서비스

1) 서비스 이름 정하기 리본이 인식할 서비스의 이름을 정해주어야한다. 위에서 simpleRibbon으로 부르기로 했으니 이 이름을 서비스를 올릴 어플리케이션에 지정해주어야한다.

1
@RibbonClient(name = "simpleRibbon")

이렇게 리본이 클라이언트로 인식할 이름을 지정해준다. 같은 서비스를 하는 서버리스트들에 모두 이렇게 지정해준다.


이렇게 아주 간단히 리본을 적용해보았다. 이건 그냥 아무런 설정도 안 건들이고 정말 리본이 되는지 확인만 해보는 것이다.
이렇게 적용하면 기본으로는 Roundrobin으로 돌아간다.
다음은 리본의 세부 설정 조정을 해보겠다.

This post is licensed under CC BY 4.0 by the author.

CDN (Contents delivery network)

부하 테스트 The Grinder