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