Categories
程式開發

一站式入口服務:愛奇藝微服務平台 API 網關實戰


寫在前面

在互聯網業務微服務化改造過程中,按照以往的服務治理體系,各服務需要單獨實現限流、鑑權、監控、日誌等通用功能,構建入口時資源申請、工單批复、多系統配置等一系列流程對精力消耗極大,學習成本較高,開發者也很難通過全局視角對各服務入口統一管理。愛奇藝微服務平台應運而生,通過組件化和服務化,助力業務解耦,不同微服務獨立部署、獨立擴展,保證各服務模塊邊界穩固,幫助業務實現微服務化改造。
作為微服務平台最重要的邊界組件,愛奇藝API 網關誕生於2016 年底,底層基於開源項目Kong 實現,旨在為開發者提供穩定、便捷、高性能、可擴展的服務入口功能,一站式管理API 配置和生命週期,對微服務治理具有重要意義。

關於愛奇藝微服務平台API網關

架構總覽

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

一站式入口服務:愛奇藝微服務平台 API 網關實戰 1

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

一站式入口服務:愛奇藝微服務平台 API 網關實戰 2

基礎功能

在API 網關控制流架構設計中,微服務平台API 網關模塊通過內部系統集成及服務化實現,為開發者提供全部所需入口配置及管理功能,且無需代碼侵入、工單申請等人工干涉,實現API 創建即可用。 API 網關支持認證、限流、訪問控制等通用功能,結構如下圖所示。

一站式入口服務:愛奇藝微服務平台 API 網關實戰 3

服務解析

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

一站式入口服務:愛奇藝微服務平台 API 網關實戰 4

定向路由

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

一站式入口服務:愛奇藝微服務平台 API 網關實戰 5

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

容災

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

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

API性能追踪

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

一站式入口服務:愛奇藝微服務平台 API 網關實戰 6

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

一站式入口服務:愛奇藝微服務平台 API 網關實戰 7

一站式入口服務:愛奇藝微服務平台 API 網關實戰 8

與愛奇藝號的故事

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

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

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

一站式入口服務:愛奇藝微服務平台 API 網關實戰 9

總結與展望

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

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

本文轉載自公眾號愛奇藝技術產品團隊(ID:iQIYI-TP)。

原文鏈接

https://mp.weixin.qq.com/s?__biz=MzI0MjczMjM2NA==&mid=2247485845&idx=1&sn=8ca94a01410d1fbf85cb1eaadca29c3e&chksm=e97695b6de011ca02c9f438ec5246faa06ed176526022308269a2e867743254bfab9572263e9&scene=27#wechat_redirect