springCloud(13):使用Zuul構建微服務網關-簡介

一、爲什麼要使用微服務網關

不同的微服務一般會有不同的網絡地址,而外部客戶端可能需要調用多個服務的接口才能完成一個業務需求。如:一個電影購票的手機APP,可能會調用多個微服務,才能完成一次購票的業務流程。如果讓客戶端直接與各個微服務通信,會有以下的問題:

 1、客戶端會多次請求不同的微服務,增加了客戶端的複雜性;

 2、存在跨域請求,在一定場景下處理相對複雜;

 3、認證複雜,每個服務都需要獨立認證;

 4、難以重構,隨着項目的迭代,可能需要重新劃分微服務,如果客戶端直接與微服務通信,那麼重構將會很難實施;

 5、某些微服務可能使用了防火牆/瀏覽器不友好的協議,直接訪問會有一定的困難。

以上問題可藉助微服務網關解決,微服務網關是介於客戶端和服務端之間的中間層,所有的外部請求都會先經過微服務網關,然後由微服務網關請求各個微服務。


微服務網關封裝了應用程序的內部結構,客戶端只須跟網關交互,而無須直接調用特定微服務的接口,這樣,開發就可以得到簡化。不僅如此,使用微服務網關還有以下優點:

 1、易於監控。可在微服務網關收集監控數據並將其推送到外部系統進行分析;

 2、易於認證。可在微服務網關上進行認證,然後再將請求轉發到後端的微服務,而無須再每個微服務中進行認證;

 3、減少了客戶端與各個微服務之間的交互次數。

二、Zuul簡介

Zuul是Netflix開源的微服務網關,它可以和Eureka、Ribbon、Hystrix等組件配合使用。

Zuul的核心是一系列的過濾器,這些過濾器可以完成以下功能:

 1、身份認證與安全:識別每個資源的驗證要求,並拒絕那些與要求不符的請求;

 2、審查與監控:在邊緣位置追蹤有意義的數據和統計結果,從而帶來精確的生產視圖;

 3、動態路由:動態地將請求路由到不同的後端集羣;

 4、壓力測試:逐漸增加指向集羣的流量,以瞭解性能;

 5、負載分配:爲每一種負載類型分配對應容量,並棄用超出限定值的請求;

 6、靜態響應處理:在邊緣位置直接建立部分響應,從而避免其轉發到內部集羣;

 7、多區域彈性:跨域AWS Region進行請求路由。


Spring Cloud對Zuul進行了整合與增強。目前,Zuul使用的默認HTTP客戶端是Apache HTTP Client。


三、編寫一個Zuul微服務網關

1、添加依賴

<!-- zuul -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>

2、在啓動類上添加@EnableZuulProxy註解,聲明一個Zuul代理,改代理使用Ribbon來定位註冊在Eureka Server中的微服務;同時,改代理還整合了hystrix,所有經過Zuul的請求都會在Hystrix命令中執行。

3、編寫application.yml

spring:
  profiles:
    active:
    - dev
  application:
    name: microservice-gateway-zuul
eureka:
  client:
    service-url:
      defaultZone: http://liuy2:5010/eureka/ # 設置與Eureka Server交互的地址,查詢服務和註冊服務都需要依賴這個地址,多個用逗號分隔
  instance:
    prefer-ip-address: true
---
spring:
  profiles:
    active: dev
server:
  port: 5016

這樣,一個簡單的微服務網關就編寫完成了。這裏僅是添加了Zuul的依賴,並將Zuul註冊到Eureka Server上。

四、測試

4.1、測試路由規則

1、依次啓動eureka-server(4010)、provide-user(4011)、hystrix-consumer-movie(5012)、microservice-gateway-zuul(5016)

2、訪問http://localhost:5016/hystrix-consumer-movie/user/1,請求會被轉發到http://localhost:5012/user/1

3、訪問http://localhost:5016/provide-user/1,請求會被轉發到http://localhost:4011/1

總結:

 說明默認情況下,Zuul會代理所有註冊到Eureka Server的微服務,並且Zuul的路由規則如下:http://ZUUL_HOST:ZUUL_PORT/微服務在Eureka上的serviceId/**會被轉發到serviceId對應的微服務。

4.2、測試Hystrix容錯與監控

1、依次啓動eureka-server(4010)、provide-user(4011)、hystrix-consumer-movie(5012)、microservice-gateway-zuul(5016)、hystrix-dashboard(5013)

2、訪問http://localhost:5016/hystrix-consumer-movie/user/1,可以獲取正常用戶數據

   wKioL1mb41jhrr5fAAAq_NvotDs241.png

3、關閉provide-user微服務,再訪問http://localhost:5016/hystrix-consumer-movie/user/1

 wKioL1mb4sPgMmL1AAArgLGNT7I035.png

4、訪問http://localhost:5013/hystrix.stream進入Hystrix Dashboard頁面,在URL欄輸入http://localhost:5016/hystrix.stream,隨意指定一個title,點擊monitor Stream按鈕。

wKiom1mb5NKC9UYqAACVfogWGZA230.png

總結:說明Zuul已經整合了Hystrix。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章