Ribbon
Ribbon 是 Netflix開源的基於HTTP和TCP等協議負載均衡組件
Ribbon 可以用來做客戶端負載均衡,調用注冊中心的服務
Ribbon的使用需要代碼里手動調用目標服務,請參考官方示例:https://github.com/Netflix/ribbon
Feign
Feign是Spring Cloud組件中的一個輕量級RESTful的HTTP服務客戶端
Feign內置了Ribbon,用來做客戶端負載均衡,去調用服務注冊中心的服務。
Feign的使用方式是:使用Feign的注解定義接口,調用這個接口,就可以調用服務注冊中心的服務。
Feign支持的注解和用法請參考官方文檔:https://github.com/OpenFeign/feign
Feign本身不支持Spring MVC的注解,它有一套自己的注解
1、什么是OpenFeign
OpenFeign與Feign的共同點:
Feigin和OpenFeign都提供了聲明式調用,下面拿OpenFeign來說一下聲明式調用吧,OpenFeign是一種聲明式、模板化的HTTP客戶端(僅在Application Client中使用)(稱OpenFeign作用:聲明式服務調用)。聲明式調用是指,就像調用本地方法一樣調用遠程方法,無需感知操作遠程http請求。學習完OpenFeign后可以不使用RestTemplate進行調用。Spring Cloud的聲明式調用, 可以做到使用 HTTP請求遠程服務時能就像調用本地方法一樣的體驗,開發者完全感知不到這是遠程方法,更感知不到這是個HTTP請求。Feign的應用,讓Spring Cloud微服務調用像Dubbo一樣,Application Client直接通過接口方法調用Application Service,而不需要通過常規的RestTemplate構造請求再解析返回數據。它解決了讓開發者調用遠程接口就跟調用本地方法一樣,無需關注與遠程的交互細節,更無需關注分布式環境開發。 使用OpenFeign時就好像在寫控制器方法,OpenFeign都是寫在接口中,在聲明的方法上添加SpringMVC注解或聲明的參數上添加SpringMVC注解就可以完成調用遠程的控制器方法。
與Feign的區別:
- OpenFeign目前是Spring Cloud 二級子項目。平時說的Feign指的是Netflix下的Feign,現在我們學習的是OpenFeign,是Spring出品。
- OpenFeign是Spring Cloud 在Feign的基礎上支持了Spring MVC的注解,如@RequesMapping等,OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,並通過動態代理的方式產生實現類,實現類中做負載均衡並調用其他服務。
二、 OpenFeign通訊優化
1、GZIP簡介
(1)gzip介紹:gzip是一種數據格式,采用用deflate算法壓縮數據;gzip是一種流行的數據壓縮算法,應用十分廣泛,尤其是在Linux平台。
(2)gzip能力:當Gzip壓縮到一個純文本數據時,效果是非常明顯的,大約可以減少70%以上的數據大小。
(3)gzip作用:網絡數據經過壓縮后實際上降低了網絡傳輸的字節數,最明顯的好處就是可以加快網頁加載的速度。網頁加載速度加快的好處不言而喻,除了節省流量,改善用戶的瀏覽體驗外,另一個潛在的好處是Gzip與搜索引擎的抓取工具有着更好的關系。例如 Google就可以通過直接讀取gzip文件來比普通手工抓取更快地檢索網頁。
2、HTTP協議中關於壓縮傳輸的規定(原理)
第一:客戶端向服務器請求頭中帶有:Accept-Encoding:gzip, deflate 字段,向服務器表示,客戶端支持的壓縮格式(gzip或者deflate),如果不發送該消息頭,服務器是不會壓縮的。
第二:服務端在收到請求之后,如果發現請求頭中含有Accept-Encoding字段,並且支持該類型的壓縮,就對響應報文壓縮之后返回給客戶端,並且攜帶Content-Encoding:gzip消息頭,表示響應報文是根據該格式壓縮過的。
第三:客戶端接收到響應之后,先判斷是否有Content-Encoding消息頭,如果有,按該格式解壓報文。否則按正常報文處理。
3、在OpenFeign技術中應用GZIP壓縮
在Spring Cloud微服務體系中,一次請求的完整流程如下:
在整體流程中,如果使用GZIP壓縮來傳輸數據,涉及到兩次請求-應答。而這兩次請求-應答的連接點是Application Client,那么我們需要在Application Client中配置開啟GZIP壓縮,來實現壓縮數據傳輸。
4、只配置OpenFeign請求-應答的GZIP壓縮
在交互數據量級不夠的時候,看不到壓縮內容。
這里只開啟Feign請求-應答過程中的GZIP,也就是瀏覽器-Application Client之間的請求應答不開啟GZIP壓縮。
在全局配置文件中,使用下述配置來實現OpenFeign請求-應答的GZIP壓縮
參考:https://www.bilibili.com/read/cv11226358/