微服務架構學習與思考(11):開源 API 網關02-以 Java 為基礎的 API 網關詳細介紹
上一篇關于網關的文章:
微服務架構學習與思考(10):微服務網關和開源 API 網關01-以 Nginx 為基礎的 API 網關詳細介紹,介紹了為什么會有網關及以 Nginx 為基礎的網關 。
一、網關 zuulzuul 網關使用 java 語言開發,是 Netflix 公司出品的開源網關 。它是 SpringCloud 的組件之一 。zuul 有 2 個大的版本:
- zuul1:zuul1 wiki
- zuul2:zuul2 wiki

文章插圖
(netflix blog: https://netflixtechblog.com/zuul-2-the-netflix-journey-to-asynchronous-non-blocking-systems-45947377fb5c)
這種處理線程模型,當后端API延遲增加或錯誤導致重試,線程數也會隨之增加 。這種情況發生時,就會給節點服務器帶來麻煩,使服務器負載激增,為了消除這種麻煩,構建了限流機制(比如hystrix)保持系統的穩定 。
zuul1 中網關功能怎么實現,在請求周期通過 Filter 實現,如下圖:

文章插圖
?(from:https://github.com/Netflix/zuul/wiki/How-it-Works)
1.2 zuul2 架構zuul2 對 zuul1 進行了重大的重構,采用異步和事件驅動模式處理程序 。請求和響應的生命周期通過事件和回調機制來處理 。沒有像 zuul1 那樣針對每個請求使用一個線程,不需要大量的線程成本,只需要一個文件描述符和一個監聽器 。而且像 zuul1 發生后端延遲和“重試風暴”,不是增加線程,zuul2 中是在隊列中增加事件,這個開銷比多個線程開銷小得多 。

文章插圖
(netflix blog: https://netflixtechblog.com/zuul-2-the-netflix-journey-to-asynchronous-non-blocking-systems-45947377fb5c)
關于高性能網絡IO編程模型,可以看我之前的文章,點擊這里看文章zuul2 網關中那么多功能是怎么實現的呢?是在請求周期(request cycle)中,通過 Filter 來處理實現 。

文章插圖
?(from:https://github.com/Netflix/zuul/wiki/How-It-Works-2.0)
Filter:
Filter 過濾器是 zuul2 業務邏輯處理的核心,它可以在請求-響應周期的不同部分運行 。分為 3 個 Filter:更多 zuul2 Filter 用法請查看 Filter wiki 。
- Inbound Filters:Inbound 過濾器,在請求到源之前執行,可用于身份驗證、路由和裝飾請求等處理操作
- Endpoint Filters:Endpoint 過濾器,可用于返回靜態響應,否則內置的 ProxyEndpoint 過濾器會將請求路由到源 。
- Outbound Filters:Outbound 過濾器,請求處理之后執行,可用于度量、裝飾處理之后的請求或增加自定義 header 。
說明:在 zuul2 中編寫 Filter,使用的是 groovy 語言,它可以動態更新,不需要重啟服務器 。1.3 zuul2 特性
- Core Features
- Service Discovery
- Load Balancing
- Connection Pooling
- Status Categories
- Retries
- Request Passport
- Request Attempts
經驗總結擴展閱讀
- 微信如何一鍵轉發(朋友圈一鍵轉發功能)
- 怎么把別人的微信轉發給別人(微信怎么轉發別人的朋友圈)
- 天涯明月刀9月28日微信每日一題答案是什么
- 黑色沙漠手游9月28日微信每日一題答案是什么
- 新劍俠情緣9月28日微信每日一題答案分享
- 火影忍者9月28日微信每日一題答案是什么
- TCL電視安裝注意事項 TCL電視售后服務
- 微信公眾號怎么轉發(微信上面的公眾號如何轉發)
- 怎樣轉發微信內容到朋友圈(如何將微信中的內容轉發到朋友圈)
- 微信如何轉發(微信朋友圈一鍵轉發)
