一站式入口服務|愛奇藝微服務平臺 API 閘道器實戰
在網際網路業務微服務化改造過程中,按照以往的服務治理體系,各服務需要單獨實現限流、鑑權、監控、日誌等通用功能,構建入口時資源申請、工單批覆、多系統配置等一系列流程對精力消耗極大,學習成本較高,開發者也很難透過全域性視角對各服務入口統一管理。愛奇藝微服務平臺應運而生,透過元件化和服務化,助力業務解耦,不同微服務獨立部署、獨立擴充套件,保證各服務模組邊界穩固,幫助業務實現微服務化改造。
作為微服務平臺最重要的邊界元件,愛奇藝 API 閘道器誕生於2016 年底,底層基於開源專案 Kong 實現,旨在為開發者提供穩定、便捷、高效能、可擴充套件的服務入口功能,一站式管理API 配置和生命週期,對微服務治理具有重要意義。
關於愛奇藝微服務平臺API閘道器
▌架構總覽
▌基礎功能
在 API 閘道器控制流架構設計中,微服務平臺 API 閘道器模組透過內部系統整合及服務化實現,為開發者提供全部所需入口配置及管理功能,且無需程式碼侵入、工單申請等人工干涉,實現API 建立即可用。API 閘道器支援認證、限流、訪問控制等通用功能,結構如下圖所示。
▌服務解析
請求進入 API 閘道器時,Kong 透過 DNS 向 Service Registry 查詢服務例項列表,作為請求轉發的 upstream。由於 DNS 快取機制,需要在例項變更時及時清理快取,確保請求訪問至有效的例項。尤其是在私有容器平臺 QAE(iQIYIAPP Engine)環境中,訪問地址隨例項變更而變化,為儘可能保證服務解析成功,系統之間需要完成一些聯動。以QAE 縮減應用副本數操作為例,過程大致如下圖所示。
▌定向路由
API 閘道器以地域(外網服務則為地域+運營商)為依據配置 DNS 就近解析規則,儘可能靠近客戶端;但在現實中,部分 API 考慮服務小運營商網路、靠近服務端等客觀條件,或在某些時間段希望對部分地區的服務進行網路隔離。針對此類自定義路由的需求,API 閘道器為業務域名生成了虛擬閘道器域名(uuid.domain),如果開發者希望根據運營商配置目標叢集,在將業務域名改綁至虛擬域名後即可實現定向路由,如下圖所示。
▌容災
作為流量入口,API 閘道器必須具備足夠強大的容災能力以應對可能的網路故障。除每個 Kong 節點自身及相關依賴的高可用配置之外,API 閘道器還實現了不同地域、運營商、資料中心、叢集之間的多級互備,一旦出現網路故障,可以在最短時間內將流量切換到可用入口。此外,API 開發者認為某叢集流量處理異常時,也可以利用虛擬閘道器域名自助切走流量。
▌API效能追蹤
API 閘道器提供了監控、報警、日誌、呼叫分析等功能,可幫助開發者完成問題排查。透過接入日誌系統,方便開發者篩查日誌,以下圖排查 499 問題為例,透過篩選發現,短時間內該介面被某外網 IP 頻繁訪問且請求時間較短,鑑於 nginx 499 狀態碼錶示客戶端主動斷開連線,判斷為疑似外網攻擊。
此外 API 閘道器在訊息轉發階段進行了埋點並接入了呼叫分析系統,開發者可透過分析訊息呼叫鏈,根據慢響應詳情進一步分析問題。以下圖為例,開發者排查慢請求過程中,透過呼叫鏈分析發現耗時較大處標記是網路延遲。在進一步檢視客戶、服務端區域後發現,該請求為跨機房呼叫,服務部署在單個機房導致了該請求時延較高,開發者以此為依據對服務部署進行了調整。
與愛奇藝號的故事
愛奇藝號作為愛奇藝開放平臺和內容體系裡最重要的載體,為自媒體、網路大電影、網劇、兒童、動漫、教育、文學、漫畫、直播等多種內容創作者提供服務。
為適應快速變化的應用場景,愛奇藝號在架構設計時選擇了微服務化,拆分出多種自媒體、基礎資訊等微服務。其中很多服務在認證、限流、追蹤、防黑產等方便有著一致的需求,如果單獨實現,將導致開發及運維成本大幅度的上升。
總結與展望
API 閘道器為開發者提供了穩定的入口服務,現已維護超過 4000 個 API,持續吸引新舊業務接入。API 閘道器當前平均單日 API 訪問量超過 300 億、峰值QPS 近 100 萬。透過充分發揮外掛擴充套件能力,為開發者提供監控、日誌、呼叫鏈分析等高階功能,有效降低了維護及排障成本。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945252/viewspace-2670111/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 微服務實踐分享(2)api閘道器微服務API
- 微服務閘道器實戰——Spring Cloud Gateway微服務SpringCloudGateway
- SpringCloud微服務專案實戰 - API閘道器Gateway詳解實現SpringGCCloud微服務APIGateway
- 微服務閘道器微服務
- 微服務基礎——厲害了!API閘道器微服務API
- 高效能API閘道器(1)、微服務API閘道器架構設計API微服務架構
- 微服務閘道器- Nginx微服務Nginx
- 微服務架構基礎之API閘道器微服務架構API
- .NET Core 微服務—API閘道器(Ocelot) 教程 [四]微服務API
- 微服務設計中的API閘道器模式微服務API模式
- .NET Core 微服務—API閘道器(Ocelot) 教程 [一]微服務API
- 愛奇藝微服務監控的探索與實踐微服務
- 微服務閘道器Spring Cloud Gateway的應用實戰微服務SpringCloudGateway
- 微服務技術棧:API閘道器中心,落地實現方案微服務API
- 微服務(七)Gateway服務閘道器微服務Gateway
- 微服務中的閘道器微服務
- SpringCloud Gateway微服務閘道器實戰與原始碼分析-上SpringGCCloudGateway微服務原始碼
- 微服務閘道器Gateway實踐總結微服務Gateway
- RestCloud API閘道器,無縫與原微服務框架整合RESTCloudAPI微服務框架
- 微服務閘道器 Spring Cloud Gateway微服務SpringCloudGateway
- SpringCloud 微服務閘道器 Gateway 元件SpringGCCloud微服務Gateway元件
- 微服務實戰(八)整合Sentinel閘道器服務限流功能 SpringCloud GateWay + Sentinel + Nacos微服務SpringGCCloudGateway
- 《springcloud 二》微服務動態閘道器,閘道器叢集SpringGCCloud微服務
- 個推微服務閘道器架構實踐微服務架構
- .Net Core微服務入門全紀錄(五)——Ocelot-API閘道器(下)微服務API
- .Net Core微服務入門全紀錄(四)——Ocelot-API閘道器(上)微服務API
- 愛奇藝直播 - 春晚直播業務API架構API架構
- go-kit微服務:一個簡單的API閘道器Go微服務API
- .NETCore微服務探尋(一) - 閘道器NetCore微服務
- SpringCloud微服務治理三(Zuul閘道器)SpringGCCloud微服務Zuul
- 微服務6:通訊之閘道器微服務
- 利用Spring Boot實現微服務的API閘道器統一日誌Spring Boot微服務API
- 愛奇藝在 Dubbo 生態下的微服務架構實踐微服務架構
- spring cloud構建網際網路分散式微服務雲平臺-服務閘道器zuulSpringCloud分散式微服務Zuul
- spring cloud構建網際網路分散式微服務雲平臺-服務閘道器過濾器SpringCloud分散式微服務過濾器
- SpringCloud微服務系列- 分散式能力建設之微服務閘道器SpringGCCloud微服務分散式
- 微服務實戰系列(十)-閘道器高可用之中介軟體Keepalived微服務
- 利用Spring Boot實現微服務的API閘道器統一限流與熔斷Spring Boot微服務API