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是從註冊中心服務器端上獲取服務註冊信息列表,緩存到本地,然後在本地實現輪訓負載均衡策略。既在客戶端實現負載均衡。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章