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是从注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮训负载均衡策略。既在客户端实现负载均衡。
posted @ 2020-04-08 22:36  无话可说丶  阅读(413)  评论(0编辑  收藏  举报