什麼是Spring Cloud Netflix Ribbon?html
實戰:整合Ribbon實現負載均衡git
Spring Cloud Netflix Ribbon 是一個客戶端負載均衡的組件.github
什麼是負載均衡?
負載均衡就是分發請求流量到不一樣的服務器,目前的實現有軟件(ngnix,apache,HA Proxy)和硬件(F5,NSX,BigIP).算法
負載均衡分爲兩種:spring
服務器端負載均衡
apache
如上圖所示.服務器端負載均衡是對客戶透明的,用戶請求到LB服務器,真正的Application服務器是由LB服務器分發控制的.服務器
客戶端負載均衡
app
如圖所示,它是客戶端軟件的一部分,客戶端獲知到可用的服務器列表按必定的均衡策略,分發請求.負載均衡
Ribbon的特色
Ribbon就是這樣一種客戶端負載均衡的實現.dom
和Eureka完美整合
支持多種協議-HTTP,TCP,UDP
caching/batching
built in failure resiliency
目標:基於以前的例子,在sentence app中添加Ribbon負載均衡,啓動兩個noun app,使用不一樣的words數據,以驗證Ribbon的效果.具體步驟以下:
sentence服務添加依賴 spring-cloud-starter-ribbon (pom.xml)
替換DiscoveryClient爲LoadBalancerClient及其使用的方法(getWord)
public String getWord(String service) { ServiceInstance instance = loadBalancer.choose(service); return (new RestTemplate()).getForObject(instance.getUri(),String.class); }
查看http://localhost:8020/sentence,看其是否能正常啓動
停掉量詞服務,爲了Eureka能夠區分兩個相同host的相同服務,在bootstramp.yml中添加實例號.
# Allow Eureka to recognize two apps of the same type on the same host as separate instances: eureka: instance: instanceId: ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${random.value}}
5.先啓動一個noun服務,再把noun服務中的words換爲英文
String words = 「picture,movie,building,aninmal」;
6.查看http://localhost:8010,看其造句是否會一次中文一次英文(默認ribbon是輪訓算法)
7.停掉其中一個noun服務,看其是否會一次成功一次失敗
特別感謝 kennyk65
Spring Cloud 中文用戶組 31777218
Spring-Cloud-Config 官方文檔-中文譯本 (本人有參與,哈哈)
Spring Cloud Netflix 官網文檔-中文譯本
本文實例github地址