SpringCloud学习第三篇:Ribbon负载均衡(Hoxton.SR4)
一、负载均衡是什么?
在以前,项目访问量非常大的时候,往往一台服务器无法承载这么大的压力。一般采用的是服务器集群来缓解服务器压力。但是多个服务器又这么连接那?这时候就可以通过负载均衡来实现。负载均衡:就是通过一个代理服务器,代理服务器在通过算法来访问服务器集群中的一台服务器。最初我们实现负载均衡的方式是使用Nginx,但是SpringCloud组件中提供了SpringCloud Netflix Ribbon来实现负载均衡
二、Riboon简介
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。如图。
三、Riboon学习
3.1Eureka的搭建
使用前面的搭建的项目
3.2Ribbon搭建
- maven
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
- 配置
server:
port: 1103
spring:
application:
name: ribbon
eureka:
client:
service-url:
defaultZone: http://localhost:1101/eureka/
instance:
hostname: localhost
prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
- 启动入口
@SpringBootApplication
@EnableDiscoveryClient
//@RibbonClient 单个定义
//多个定义
@RibbonClients({
@RibbonClient(name="ribbon")
})
public class StartApplication {
public static void main(String[] args) {
SpringApplication.run(StartApplication.class, args);
}
//声明RestTemplate
//开启负载均衡的功能
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
- 实现服务的调用
简单点就将调用的服务也写在本工程里面
@RestController
public class ClientController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("index")
public String index() {
User user = new User();
user.setId(1);
user.setName("张三");
return restTemplate.postForObject("http://ribbon/demo", user, String.class);
}
@Value("${server.port}")
private Integer port;
@PostMapping("demo")
public String demo(@RequestBody User user) {
return "hello来自哪个服务器:" + user.toString() + port;
}
}
@Data
class User {
private int id;
private String name;
}
3.2Demo演示
启动Eureka、ribbon(启动两个)
访问:http://IP:1103/index 即可看到效果
四、Ribbon和Nginx的区别
- Nginx:
属于服务器端的负载均衡。nginx是客户端所有请求统一交给nginx,由nginx进行实现负载均衡请求转发,属于服务器端负载均衡。既请求有nginx服务器端进行转发。 - Ribbon:
属于客户端的负载均衡。Ribbon是从注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮训负载均衡策略。既在客户端实现负载均衡。