微服務架構 | 4. 服務調用


前言

參考資料:
《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 服務客戶端變得非常容易,只需創建一個介面並在介面上添加註解即可;



最後

新人製作,如有錯誤,歡迎指出,感激不盡!
歡迎關注公眾號,會分享一些更日常的東西!
如需轉載,請標註出處!