天天看點

Spring Cloud Ribbon

Spring Cloud Ribbon是基于Netflix Ribbon實作的一套用戶端       負載均衡的工具。(負載均衡+RestTemplate調用)

簡單的說,Ribbon是Netflix釋出的開源項目,主要功能是提供用戶端的軟體負載均衡算法和服務調用。Ribbon用戶端元件提供一系列完善的配置項如連接配接逾時,重試等。簡單的說,就是在配置檔案中列出Load Balancer(簡稱LB)後面所有的機器,Ribbon會自動的幫助你基于某種規則(如簡單輪詢,随機連接配接等)去連接配接這些機器。我們很容易使用Ribbon實作自定義的負載均衡算法。

官網位址 

https://github.com/Netflix/ribbon/wiki/Getting-Started      

LB負載均衡(Load Balance)是什麼

簡單的說就是将使用者的請求平攤的配置設定到多個服務上,進而達到系統的HA(高可用)。

常見的負載均衡有軟體Nginx,LVS,硬體 F5等。

Ribbon本地負載均衡用戶端 VS Nginx服務端負載均衡差別

 Nginx是伺服器負載均衡,用戶端所有請求都會交給nginx,然後由nginx實作轉發請求。即負載均衡是由服務端實作的。

 Ribbon本地負載均衡,在調用微服務接口時候,會在注冊中心上擷取注冊資訊服務清單之後緩存到JVM本地,進而在本地實作RPC遠端服務調用技術。 

集中式LB-->

即在服務的消費方和提供方之間使用獨立的LB設施(可以是硬體,如F5, 也可以是軟體,如nginx), 由該設施負責把通路請求通過某種政策轉發至服務的提供方; 

程序内LB-->

将LB邏輯內建到消費方,消費方從服務注冊中心獲知有哪些位址可用,然後自己再從這些位址中選擇出一個合适的伺服器。

Ribbon就屬于程序内LB,它隻是一個類庫,內建于消費方程序,消費方通過它來擷取到服務提供方的位址。 

Ribbon核心元件IRule 

IRule:根據特定算法中從服務清單中選取一個要通路的服務 

Spring Cloud Ribbon

如何替換 

 官方文檔明确給出了警告:

這個自定義配置類不能放在@ComponentScan所掃描的目前包下以及子包下,

否則我們自定義的這個配置類就會被所有的Ribbon用戶端所共享,達不到特殊化定制的目的了。

Spring Cloud Ribbon

修改為随機 

@Configuration
public class MySelfRule
{
    @Bean
    public IRule myRule()
    {
        return new RandomRule();//定義為随機
    }
}      
@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration=MySelfRule.class)
public class OrderMain80
{
    public static void main(String[] args)
    {
        SpringApplication.run(OrderMain80.class,args);
    }
}