GitHub地址:https://github.com/leebingbin/SpringCloud.MovieTicketinghtml
不一樣的微服務通常會有不一樣的網絡地址,而外部客戶端(如,移動APP)可能須要調用多個服務的接口才能完成業務需求。這樣就會有如下的問題:git
* 客戶端會屢次請求不一樣的微服務,增長了客戶端的複雜性。 * 存在跨域請求,在必定場景下處理相對複雜 * 認證複雜,每一個服務都須要獨立的認證 * 難以重構,隨着項目的迭代,可能須要從新劃分微服務。(如,可能將一個微服務拆分多個或者多個微服務合併成一個) * 某些微服務可能使用了防火牆/瀏覽器不友好的協議,直接訪問會有必定的困難
以上問題可藉助微服務網關解決。微服務網關是介於客戶端和服務端之間的中間層,全部的外部請求都會先通過微服務網關。微服務網關封裝了應用程序的內部結構,客戶端只須要跟網關交互,而無須直接調用特定微服務的接口。不只開發能夠獲得簡化,使用微服務網關還有如下優勢:github
* 易於監控:可在微服務網關收集監控數據並將其推送到外部系統進行分析 * 易於認證:可在微服務網關上進行認證,而後再將請求轉發到後端的微服務,而無須在每一個微服務中進行認證 * 減小了客戶端與各個微服務之間的交互次數
Zuul 是 Netflix 開源的微服務網關,它能夠和 Eureka 、Ribbon、Hystrix 等組件配合使用。Zuul 的核心是一系列的過濾器,這些過濾器能夠完成如下功能。後端
* 身份認證與安全:識別每一個資源的驗證要求,並拒絕那些與要求不符的請求 * 審查與監控:在邊緣位置追蹤有意義的數據和統計結果,從而帶來精確的生產視圖 * 動態路由:動態地將請求路由到不一樣的後端集羣 * 壓力測試:逐漸增長指向集羣的流量,以瞭解性能 * 負載分配:爲每一種負載類型分配對應容量,並棄用超出限定值的請求 * 靜態響應處理:在邊緣位置直接創建部分響應,從而避免其轉發到內部集羣 * 多區域彈性:跨越 AWS Region 進行請求路由,旨在實現 ELB (Elastic Load Balancing) 使用的多樣化, 以及讓系統的邊緣更貼近系統的使用者
Spring Cloud 對 Zuul 進行了整合與加強。目前,Zuul 使用的默認 HTTP 客戶端是 Apache HTTP Client , 也可使用 RestClient 或者 okhttp3.OKHttpClient。若是想要使用 RestClient,能夠設置 ribbon.restclient.enabled=true ;想要使用 okhttp3.OKHttpClient,能夠設置 ribbon.okhttp.enabled=true 。跨域
參考資料:瀏覽器
Netflix 如何使用 Zuul : http://github.com/Netflix/zuul/wiki/How-We-Use-Zuul-At-Netflix安全
本文爲博主原創文章,轉載請註明出處!bash