一、負載均衡是什麼?
在以前,項目訪問量非常大的時候,往往一臺服務器無法承載這麼大的壓力。一般採用的是服務器集羣來緩解服務器壓力。但是多個服務器又這麼連接那?這時候就可以通過負載均衡來實現。負載均衡:就是通過一個代理服務器,代理服務器在通過算法來訪問服務器集羣中的一臺服務器。最初我們實現負載均衡的方式是使用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是從註冊中心服務器端上獲取服務註冊信息列表,緩存到本地,然後在本地實現輪訓負載均衡策略。既在客戶端實現負載均衡。