一站式入口服務|愛奇藝微服務平臺 API 閘道器實戰

愛奇藝技術產品團隊發表於2022-12-05

寫在前面


在網際網路業務微服務化改造過程中,按照以往的服務治理體系,各服務需要單獨實現限流、鑑權、監控、日誌等通用功能,構建入口時資源申請、工單批覆、多系統配置等一系列流程對精力消耗極大,學習成本較高,開發者也很難透過全域性視角對各服務入口統一管理。愛奇藝微服務平臺應運而生,透過元件化和服務化,助力業務解耦,不同微服務獨立部署、獨立擴充套件,保證各服務模組邊界穩固,幫助業務實現微服務化改造。

作為微服務平臺最重要的邊界元件,愛奇藝 API 閘道器誕生於2016 年底,底層基於開源專案 Kong 實現,旨在為開發者提供穩定、便捷、高效能、可擴充套件的服務入口功能,一站式管理API 配置和生命週期,對微服務治理具有重要意義。

關於愛奇藝微服務平臺API閘道器

▌架構總覽

類似 Nginx, API 閘道器透過域名、請求方法、路徑匹配規則等定義一個 API,API 轉發目標為開發者配置的一個唯一服務。Kong 基於 Nginx 實現,成熟穩定且效能可靠,並擁有靈活強大的外掛機制,提供了諸如訪問控制、限流、監控等功能。在此基礎上愛奇藝技術團隊結合內部系統開發了私有外掛,以適配內部特殊需求。

 

一站式入口服務|愛奇藝微服務平臺 API 閘道器實戰


API 閘道器採用靠近客戶端的分散式部署方案,在各地區部署獨立叢集並就近解析;單個 API 閘道器叢集透過負載均衡服務暴露。API 配置需要在多個叢集內維護,因此愛奇藝技術團隊開發了 API 閘道器控制器,統一負責叢集管理、域名建立、DNS 繫結等操作,整體架構如下圖所示。


一站式入口服務|愛奇藝微服務平臺 API 閘道器實戰

▌基礎功能

在 API 閘道器控制流架構設計中,微服務平臺 API 閘道器模組透過內部系統整合及服務化實現,為開發者提供全部所需入口配置及管理功能,且無需程式碼侵入、工單申請等人工干涉,實現API 建立即可用。API 閘道器支援認證、限流、訪問控制等通用功能,結構如下圖所示。

 

一站式入口服務|愛奇藝微服務平臺 API 閘道器實戰

▌服務解析

請求進入 API 閘道器時,Kong 透過 DNS 向 Service Registry 查詢服務例項列表,作為請求轉發的 upstream。由於 DNS 快取機制,需要在例項變更時及時清理快取,確保請求訪問至有效的例項。尤其是在私有容器平臺 QAE(iQIYIAPP Engine)環境中,訪問地址隨例項變更而變化,為儘可能保證服務解析成功,系統之間需要完成一些聯動。以QAE 縮減應用副本數操作為例,過程大致如下圖所示。


一站式入口服務|愛奇藝微服務平臺 API 閘道器實戰

▌定向路由

API 閘道器以地域(外網服務則為地域+運營商)為依據配置 DNS 就近解析規則,儘可能靠近客戶端;但在現實中,部分 API 考慮服務小運營商網路、靠近服務端等客觀條件,或在某些時間段希望對部分地區的服務進行網路隔離。針對此類自定義路由的需求,API 閘道器為業務域名生成了虛擬閘道器域名(uuid.domain),如果開發者希望根據運營商配置目標叢集,在將業務域名改綁至虛擬域名後即可實現定向路由,如下圖所示。

  

一站式入口服務|愛奇藝微服務平臺 API 閘道器實戰


此外,開發者可透過微服務平臺配置服務路由解析規則,進一步控制流量至服務例項間路由關係,滿足諸如藍綠部署、快取更新延遲低容忍等場景下,控制請求目標服務例項的需要。

▌容災

作為流量入口,API 閘道器必須具備足夠強大的容災能力以應對可能的網路故障。除每個 Kong 節點自身及相關依賴的高可用配置之外,API 閘道器還實現了不同地域、運營商、資料中心、叢集之間的多級互備,一旦出現網路故障,可以在最短時間內將流量切換到可用入口。此外,API 開發者認為某叢集流量處理異常時,也可以利用虛擬閘道器域名自助切走流量。

另外,API 閘道器叢集採用藍綠部署策略完成功能升級等常規運維操作,接入流量前充分實現叢集預熱,同時提供版本回退、故障現場保留能力。將運維操作帶給開發者的影響降至最低。

▌API效能追蹤

API 閘道器提供了監控、報警、日誌、呼叫分析等功能,可幫助開發者完成問題排查。透過接入日誌系統,方便開發者篩查日誌,以下圖排查 499 問題為例,透過篩選發現,短時間內該介面被某外網 IP 頻繁訪問且請求時間較短,鑑於 nginx 499 狀態碼錶示客戶端主動斷開連線,判斷為疑似外網攻擊。

一站式入口服務|愛奇藝微服務平臺 API 閘道器實戰

此外 API 閘道器在訊息轉發階段進行了埋點並接入了呼叫分析系統,開發者可透過分析訊息呼叫鏈,根據慢響應詳情進一步分析問題。以下圖為例,開發者排查慢請求過程中,透過呼叫鏈分析發現耗時較大處標記是網路延遲。在進一步檢視客戶、服務端區域後發現,該請求為跨機房呼叫,服務部署在單個機房導致了該請求時延較高,開發者以此為依據對服務部署進行了調整。

一站式入口服務|愛奇藝微服務平臺 API 閘道器實戰


一站式入口服務|愛奇藝微服務平臺 API 閘道器實戰

與愛奇藝號的故事

愛奇藝號作為愛奇藝開放平臺和內容體系裡最重要的載體,為自媒體、網路大電影、網劇、兒童、動漫、教育、文學、漫畫、直播等多種內容創作者提供服務。

為適應快速變化的應用場景,愛奇藝號在架構設計時選擇了微服務化,拆分出多種自媒體、基礎資訊等微服務。其中很多服務在認證、限流、追蹤、防黑產等方便有著一致的需求,如果單獨實現,將導致開發及運維成本大幅度的上升。

為幫助愛奇藝號順利完成微服務化改造,減輕開發和運維負擔,API 閘道器結合愛奇藝號實際需求,利用 Kong 的外掛機制開發或改進了帳號認證、限流、黑產攔截、資訊追蹤等一系列功能。目前,愛奇藝號使用 API 閘道器管理著數百個 API,並以此為統一入口連線數十個服務。此外利用API 閘道器和 QAE 容器平臺的容災特性,透過多資料中心服務互備,提升了服務整體的穩定性。

一站式入口服務|愛奇藝微服務平臺 API 閘道器實戰

總結與展望

API 閘道器為開發者提供了穩定的入口服務,現已維護超過 4000 個 API,持續吸引新舊業務接入。API 閘道器當前平均單日 API 訪問量超過 300 億、峰值QPS 近 100 萬。透過充分發揮外掛擴充套件能力,為開發者提供監控、日誌、呼叫鏈分析等高階功能,有效降低了維護及排障成本。

未來 API 閘道器面向混合雲環境,為開發者提供更加靈活、便捷、高效、穩定的入口服務。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945252/viewspace-2670111/,如需轉載,請註明出處,否則將追究法律責任。

相關文章