微服務架構 | 4. 服務調用
- 2022 年 1 月 25 日
- 筆記
- JAVA, 學習筆記, 分散式, Spring Cloud, Spring Cloud Alibaba, 微服務架構, 服務調用, Spring 微服務實踐學習筆記
目錄
前言
參考資料:
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服務原理與實戰》
《B站 尚矽谷 SpringCloud 框架開發教程 周陽》
服務調用是在註冊中心的基礎之上,解決應該調用哪個服務實例的問題;
1. 服務調用基礎知識
1.1 常見的負載均衡方案
- 正向代理:
- 正向代理是一個位於客戶端和原始伺服器 (origin server) 之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端;
- 客戶端必須要進行一些特別的設置才能使用正向代理;
- 常用於:訪問原來無法訪問的資源;做快取加速訪問資源;對客戶端訪問授權,上網進行認證;記錄用戶訪問記錄(上網行為管理),對外隱藏用戶資訊等;
- 反向代理:
- 反向代理實際運行方式是指以代理伺服器來接受 Internet 上的連接請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連接的客戶端,此時代理伺服器對外就表現為一個伺服器;
- 常用於:保證內網的安全,可以使用反向代理提供WAF功能,阻止 Web 攻擊; 大型網站,通常將反向代理作為公網訪問地址,Web 伺服器是內網;負載均衡,通過反向代理伺服器來優化網站的負載;
1.2 Spring Cloud的 Netflix Ribbon 和 Feign 的區別
- Ribbon 是一個基於 HTTP 和 TCP 客戶端的負載均衡器。它可以在客戶端配置 RibbonServerList(服務端列表),然後輪詢請求以實現均衡負載。它在聯合 Eureka 使用時 RibbonServerList 會被 DiscoveryEnabledNIWSServerList 重寫,擴展成從 Eureka 註冊中心獲取服務端列表同時,它也會用 NIWSDiscoveryPing 來取代 IPing,它將職責委託給 Eureka 來確定服務端是否已經啟動。 使用 HttpClient 或 RestTemplate 模擬 HTTP 請求,步驟相當繁瑣;
- Feign 是在 Ribbon 的基礎上進行了一次改進,是一個使用起來更加方便的 HTTP 客戶端。採用介面的方式, 只需要創建一個介面,面向介面,然後在上面添加註解即可 。將需要調用的其他服務的方法定義成抽象方法即可, 不需要自己構建 HTTP 請求。然後就像是調用自身工程的方法調用,而感覺不到是調用遠程方法,使得編寫客戶端變得非常容易。類似於 MyBatis 的 @Mapper 註解;
1.1 目前幾種流行的服務調用組件對比
| 名稱 | 廠商 | 特點(優點) | 缺點 |
|---|---|---|---|
| Ribbon | Netflix | 客戶端負載均衡 | 開發較為複雜 |
| Feign 與 OpenFeign | Spring Cloud | 對 Ribbon 進行封裝 |
2. Ribbon
Spring Cloud Ribbon 是基於 Netflix Ribbon 實現的一套客戶端負載均衡的工具;提供客戶端的軟體負載均衡演算法和服務調用;
3. Feign 與 OpenFeign
Feign 是一個聲明式的 Web 服務客戶端,讓編寫 Web 服務客戶端變得非常容易,只需創建一個介面並在介面上添加註解即可;
最後


