圖片來源網(wǎng)絡(luò)
Netflix宣布開源其云網(wǎng)關(guān)Zuul 2,Netflix稱它為前門,所有流量請求必會經(jīng)過該服務(wù)。Zuul 2作為Netflix最重要的基礎(chǔ)建設(shè)之一,現(xiàn)在Netflix內(nèi)部運行超過80個Zuul 2叢集,向后端百項服務(wù)每秒發(fā)送一百萬次的請求,以服務(wù)1.25億會員的需求。
Zuul 2中,過濾器的前端與后端都設(shè)置了Netty處理程序,用來負責(zé)處理網(wǎng)絡(luò)協(xié)定、網(wǎng)頁服務(wù)器、連接管理以及代理工作。Netflix提到,Zuul的功能相當於在過濾器設(shè)置的邏輯。Netflix將Zuul 2不只使用在所有外部流量進入Netflix云端服務(wù)的入口,而同時也用於路由內(nèi)部流量。
負責(zé)處理入站流量的過濾器用於驗證、路由以及修飾請求。而端點過濾器用於回傳靜態(tài)回應(yīng)以及代理后端服務(wù)的請求。而出站流量的過濾器則用於壓縮、指標或是新增刪除自訂義標頭等內(nèi)容。
目前Zuul 2開源的核心功能包括HTTP/2與TLS服務(wù)器協(xié)定。在靈活性功能方面,適應(yīng)性重試功能(Adaptive Retries),是Netflix用來增加服務(wù)可用性以及靈活性的核心重試邏輯。后端服務(wù)并行保護功能,則可用來配置并行限制以避免后端服務(wù)過載。
另外,在運作的功能上,除了提供Request Passport以追蹤每一個請求的生命周期事件外,狀態(tài)類別(Status Categories)可以列舉請求的所有可能成功或失敗的狀態(tài),而Request Attempts用於追蹤代理狀態(tài),這個功能對於除錯重試以及路由特別有用。
還有一些功能這次未來得及開源,但將依計畫不久后釋出,其中包括Websocket/SSE,以及流量控管功能,防止來自惡意客戶端的DDoS攻擊,而Brownout filters則能禁用特定CPU資源密集的應(yīng)用,以防止Zuul過載。最后,可配置路由提供使用者以檔案設(shè)定路由規(guī)則。
有幾項Zuul 2功能尚未開源,但是在Netflix內(nèi)部服務(wù)是很重要的應(yīng)用,供欲使用Zuul 2的企業(yè)參考。Netflix提到,合作夥伴最常使用的功能就是自助路由(Self Service Routing),他們?yōu)橛脩籼峁⿷?yīng)用程式與API,根據(jù)請求的URL、路徑、查詢參數(shù)或是標頭等資訊創(chuàng)建路由規(guī)則,并將這些規(guī)則發(fā)布到各Zuul實體中。
另一個重要的功能便是靈活的負載平衡,Netflix致力於使負載平衡智慧化,當數(shù)量龐大的節(jié)點中,出現(xiàn)故障或是緩慢的節(jié)點,他們的演算法會自動繞過這些問題,維持服務(wù)的可用性以及品質(zhì)。
由於Netflix的彈性架構(gòu),允許任何人都可以啟動容器叢集并置於Zuul之后,因此Netflix發(fā)現(xiàn),他們需要一個自動檢測并查明后端錯誤的服務(wù)。透過Mantis即時事件串流,他們建立了異場☆態(tài)偵測,以匯總每項服務(wù)的錯誤率,并在服務(wù)出現(xiàn)問題時主動發(fā)出通知。