1. 程式人生 > 其它 >從Eureka到Polaris,好未來AI中臺註冊中心是如何實現0程式碼遷移的

從Eureka到Polaris,好未來AI中臺註冊中心是如何實現0程式碼遷移的

導語:2021年,好未來的AI 中臺業務規模激增,日呼叫量超6億,總呼叫量上千億。業務的快速發展給中臺的現有技術架構帶來一定的衝擊。好未來AI中臺是微服務架構,完成一個業務請求涉及多個服務之間相互呼叫,可以說註冊中心的穩定性會直接決定業務呼叫的成功率。在技術升級過程中,騰訊雲和好未來工程師在註冊中心模組上,實現了零程式碼修改從Eureka遷移至北極星PolarisMesh的最佳實踐,樹立了國內企業在服務發現、服務治理領域的一個新標杆。

背景

作為國家新一代人工智慧開放創新平臺在教育行業的代表,好未來深耕教育場景,目前已積累15大類共計170餘種AI能力,覆蓋視覺、語音、自然語言處理等多個方向。

2021年好未來 AI 中臺業務規模激增,日呼叫量超6億,總呼叫量上千億。相比2020年增長約9倍,並呈現持續增長趨勢。業務規模井噴式增長,給平臺帶來的穩定性技術挑戰也越發強烈,對現有技術架構也提出了更高的要求。

第一代架構:使用K8S作為註冊中心

AI中臺是基於K8S構建的服務層,早期是單叢集架構,服務之間的呼叫是基於K8S域名定址到Cluster IP進行呼叫。

為了解決單K8S叢集所帶來的IaaS資源不足、沒有災備容災、升級困難等問題,AI中臺的服務層需要改造並支援跨叢集部署。為了實現服務層跨叢集,系統需要做以下改造:

(1)需要切換註冊中心:K8S域名無法跨叢集,服務要做跨叢集呼叫需要依賴全域性註冊中心。

(2)需要支援多語言技術棧:因歷史遺留問題,AI中臺的技術棧不統一,存在Java、Go、C++等多語言開發的服務。

第二代架構:使用Eureka作為註冊中心

第二代AI中臺改造使用完全的微服務架構,由於AI中臺大部分的應用都是Java應用,因此選型使用了業界最常用的Spring Cloud Netflix框架來作為微服務的底座。由於Spring Cloud Neflix預設對接了Eureka註冊中心,因此AI中臺也選用了Eureka作為全域性註冊中心。

(1)採用Eureka作為獨立的註冊中心:直接使用POD IP進行定址,解決原K8S ClusterIP無法跨叢集的問題。

(2)除Java語言外,其他語言服務使用第三方或自研的Eureka客戶端。

改造並使用Eureka作為註冊中心後,在現網運營過程中,遇到了以下問題:
穩定性問題

好未來有4000左右的服務數,平均每個服務3節點。將service(cluster ip)註冊改為pod ip註冊後,客戶端註冊量由4000+增長至超過10000+。

AI中臺Eureka服務採用的是多節點叢集部署,節點間通過請求複製的方式維持節點間資料的一致性。在正常情況下,每秒複製的請求數=(節點數*續約請求數)/續約間隔。按照5秒的續約間隔,每個節點大約每秒處理6000個續約請求。

當其中一個Eureka服務出現異常時(比如網路中斷等),續約失敗的請求會進行重試,出現重試風暴,剩餘的Eureka節點所需要處理的續約請求增加到原來的2倍,峰值到3倍。導致剩餘節點出現了高負載。

高負載會導致Eureka的計算邏輯出現延遲,續約請求處理不過來導致例項被異常下線,影響業務正常呼叫。

維護成本問題

Eureka官方只提供了Java版本的客戶端,其他語言客戶端則需要依賴第三方開源實現(Go)或者自研(C++)。非官方客戶端存在質量風險,需要額外投入成本進行優化和測試。

下一代架構:使用PolarisMesh作為註冊中心

為解決Eureka註冊中心所帶來的穩定性和成本問題,需要對註冊中心進行選型。

除了功能滿足度以外,效能、可擴充套件性與遷移成本是好未來在選型時重點考慮的因素。在對比了開源和業內其他廠商的註冊中心之後,決定選擇PolarisMesh(北極星)作為AI中臺的全域性註冊中心,替換原有的Eureka,主要基於以下考慮:

(1)北極星服務端採用計算儲存分離架構,資料一致性通過儲存層保證,無需計算層參與進行請求複製和資料同步。計算層可隨著接入節點的增加進行水平擴充套件。

在單節點效能方面,同等規格下,北極星的註冊發現效能是Eureka的10倍,能輕鬆解決Eureka在萬級節點下服務發現的效能問題。

(2)北極星社群官方提供了多語言SDK,以及多種主流框架(SpringCloud,Dubbo,gRPC)的整合外掛,無需通過第三方社群以及自研的方式解決客戶端接入的問題。

(3)北極星服務端基於外掛化開發,通過擴充套件API外掛的方式,實現了對Eureka介面的全相容,AI中臺的存量業務,無需修改程式碼即可直接接入,遷移成本低。

無縫遷移

遷移方案選型

AI中臺已經完成了微服務的改造,服務層程式碼已經與Eureka進行了深度整合,且現網節點已經全部註冊到Eureka,北極星註冊中心的切換需要做到業務無感的遷移。

業界註冊中心遷移一般有以下2種方案:

方案一:客戶端雙註冊雙發現

遷移後的應用,通過整合SDK或者JavaAgent的方式,同時往新老註冊中心進行雙註冊雙發現,以此保證遷移後的應用以及未遷移的應用,都可以獲取到全量的服務資料。

方案二:服務端資料同步

新老註冊中心服務端通過同步服務進行資料的雙向同步,客戶端無需感知即可獲取全量的服務資料。

兩種遷移方案的對比如下:

由於AI中臺業務存在多語言的場景,且服務已經在現網執行,因此選用服務端資料同步的方案來進行Eureka到北極星的遷移。

遷移過程實現

北極星對Eureka的API進行了全相容,因此,業務可以把北極星叢集作為一個Eureka節點,加入到Eureka原來的叢集中,基於Eureka原生的同步協議進行新老註冊中心的服務資料雙向同步。

基於上面的遷移方案,新的應用只需要修改一下注冊中心地址,即可實現遷移,無需任何程式碼修改。業務可以按自己的節奏將服務從Eureka註冊中心遷移到北極星,中途發現問題可隨時回滾。

AI中臺遷移後的業務結構如下:

總結與收益

好未來AI中臺零程式碼修改,將註冊中心由Eureka遷移至北極星,併發註冊服務數有極大的提升,吞吐量得到了10倍的提升,並解決了業務規模激增場景下開源註冊中心可靠性問題,有效避免線上再次故障。北極星計算儲存分離、控制面無狀態,可以隨著未來業務規模的繼續擴大,高效方便的繼續擴容。

除此之外,好未來還獲得了服務治理、視覺化控制檯、服務治理監控等方面的收益。

流量管理:北極星提供全方位的流量管理能力,可輕鬆滿足使用者針對應用的灰度釋出、多環境隔離、故障熔斷、訪問限流等訴求。

視覺化控制檯:北極星提供簡單易用的視覺化控制檯,使用者可通過控制檯介面簡化服務管理、配置管理、以及服務治理規則管理等相關的操作。

流量監控:北極星Polaris提供視覺化的監控能力,提供服務呼叫、故障熔斷、訪問限流等曲線監控以及告警的能力。

本文作者:
蘇珂:好未來AI中臺PaaS平臺負責人
李佳南:騰訊雲中間件團隊高階產品經理
單家駿:騰訊雲中間件團隊技術專家,北極星開源社群PMC成員