Ribbon、Feign、OpenFeign、spring-cloud-openfeign的区别
一、 Ribbon
隨著服務注冊中心的安裝完成后,客戶端的負載均衡和服務的調用又是我們關注的話題。Ribbon可以實現客戶端的負載均衡,
- 負載均衡LB
LoadBalance(負載均衡):簡單的說就是將用戶的請求平攤的分配到多個服務器上,從而達到系統的HA(高可用)。常見的負載均衡工具有nginx、LVS,硬件上F5等
- 集中式LB
即在服務的消費方和提供方之間使用獨立的LB設施,可以是硬件F5、也可以是軟件nginx、LVS等,提供該設施將請求通過某種策略發送給服務提供方
- 進程內LB
將LB邏輯集成到消費方,消費方從服務注冊中心查找服務列表,然后獲取服務地址根據某種規則選出合適的服務器。Ribbon就是進程內LB,它只是一個類庫,集成于消費方進程,消費者通過它來獲取到服務提供方的地址
SpringCloud Ribbon是基于Netflix Ribbon實現的一套客戶端的負載均衡工具,主要功能是提供了客戶端的軟件負載均衡算法和服務調用。Ribbon客戶端組件提供了一系列完善的配置項例如連接超時、重試等。Ribbon目前也進入了維護模式
Ribbon的使用需要代碼里手動調用目標服務,請參考官方示例:https://github.com/Netflix/ribbon
Nginx是服務器端的負載均衡,客戶端的所有請求都會交給nginx,由nginx分發到各個服務器上。即負載均衡是由服務端實現的
Ribbon是本地的負載均衡,在調用微服務接口的時候,會在注冊中心上獲取注冊服務信息列表之后緩存到JVM本地,從而在本地實現RPC遠程服務調用的技術
- 基于Ribbon的服務調用(必須結合RestTemplate)
- 使用discovery client 進行客戶端調用
- 使用loadBalanceClient 進行客戶端調用
- 使用@loadBalanced 進行客戶端調用
- 使用discovery Client形式調用
- 使用loadBalance Client形式調用
- 使用@loadBalanced
- RoundRobinRule 輪訓策略 按順序循環選擇 Server
- RandomRule 隨機策略 隨機選擇 Server
- AvailabilityFilteringRule 可用過濾策略
會先過濾由于多次訪問故障而處于斷路器跳閘狀態的服務,還有并發的連接數量超過閾值的服務,然后對剩余的服務列表按照輪詢策略進行 訪問 - WeightedResponseTimeRule 響應時間加權策略
根據平均響應的時間計算所有服務的權重,響應時間越快服務權重越大被選中的概率越高,剛啟動時如果統計信息不足,則使用
RoundRobinRule策略,等統計信息足夠會切換到 - RetryRule 重試策略
先按照RoundRobinRule的策略獲取服務,如果獲取失敗則在制定時間內進行重試,獲取可用的服務。 - BestAviableRule 最低并發策略
會先過濾掉由于多次訪問故障而處于斷路器跳閘狀態的服務,然后選擇一個并發量最小的服務
需要注意的是:目前ribbon已經停止了維護
二、Feign
Feign的使用方式是:使用Feign的注解定義接口,調用這個接口,就可以調用服務注冊中心的服務
Feign支持的注解和用法請參考官方文檔:https://github.com/OpenFeign/feign
Feign本身不支持Spring MVC的注解,它有一套自己的注解
Feign是Spring Cloud組件中的一個輕量級Restful的HTTP服務客戶端,Feign內置了Ribbon,用來做客戶端的負載均衡,去調用服務注冊中心的服務。Feign的使用方式是:使用Feign的注解接口,調用這個接口,就可以調用服務注冊中心的服務
三、OpenFeign
而OpenFeign則是可以讓我們像調用Dubbo接口一樣,實現面向接口編程OpenFeign是Spring Cloud 在Feign的基礎上支持了Spring MVC的注解,如@RequesMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通過動態代理的方式產生實現類,實現類中做負載均衡并調用其他服務。
OpenFeign是重點,會重寫一篇文章
四、feign、openfeign、spring-cloud-openfeign的區別聯系
為什么存在“com.netflix.feign:feign-core”和“io.github.openfeign:feign-core”? 區別?
一句話總結:由于 Netflix 公司不再維護feign,feign由社區維護,feign更名為 openfeign,并且項目遷移到新的倉庫。后續版本僅使用 “io.github.openfeign”,推薦使用該依賴。
spring-cloud-openfeign 和 openfeign 有什么關系?
spring-cloud-openfeign 是基于 openfeign 進行包裝,集成了 SpringMVC 的注解等方便SpringBoot項目開發的一個組件。
參考文章1
參考文章2
總結
以上是生活随笔為你收集整理的Ribbon、Feign、OpenFeign、spring-cloud-openfeign的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nacos 入门教程
- 下一篇: 面试了57位高级产品经理,我发现混得好的