Spring Cloud負載均衡

提起負載均衡,我們在服務端肯定聽說過nginx負載均衡,但是nginx是針對於服務端的,什麼意思呢?就是服務端的請求按照往常一樣發送,將請求發送給nginx,由nginx參考自己項目的特點,選擇一些算法決定當前的客戶端請求到底由誰處理比較合適,服務端是什麼都不知道的。
但是在Spring Cloud負載均衡中,正好相反,也就是說將調度的任務放在請求發起端,即Rebbon,首先它會從註冊中心裏面拿到所有的註冊信息,然後客戶端請求出來之後,會看看到底有幾個服務能爲這個請求服務,然後再根據一些調度算法進行調用。

一、基礎準備

  • eureka註冊中心
  • 服務提供者
  • 服務消費者

二、添加依賴

其實不用添加依賴,只要在consumer上有eureka依賴即可

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

三、搭建一個簡單的集羣

將provider項目賦值一份即可,賦值的時候refactory項目名,在pom中修改artifactId即可,更重要的是修改端口號。
然後在provider1中寫一些標識:

@RestController
public class UserService {

    private Logger logger = LoggerFactory.getLogger(UserService.class);

    @PostMapping("/login")
    boolean login(@RequestBody UserLoginInfo userLoginInfo){
        logger.info("正在爲客戶端提供服務:provider:8071");
        return "amdin".equals(userLoginInfo.getUsername()) && "123456".equals(userLoginInfo.getPassword());
    }
}

在provider2中的標識:

logger.info("正在爲客戶端提供服務:provider2:8081");

四、測試

在consumer中調用五次login服務,可以看到在provide1r中調用了三次,在provider2中調用了兩次,可以大題看到rebbon默認選擇的是輪詢的方式去進行調度的。

五、調度規則

netflix的loadbalancer中我們可以看到各種的負載均衡調用的rule,他們其實都是事先了IRule接口

六、使用其他的輪詢規則

如果我們想要使用randomRule而不用輪詢,我們可以在consumer項目中的ylm添加:

#更換負載均衡策略
dm-user-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

其中,dm-user-provider是我們provider的註冊名,不同的服務註冊的名稱都不相同,(即provider1和provider2的註冊名都是一樣的,只是端口不一樣罷了)。然後指定想要的遵循的調度算法即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章