日呼叫量超三十萬億,騰訊開源百萬級服務發現和治理中心北極星

語言: CN / TW / HK

導讀

今天,騰訊雲面向所有開發者,正式宣佈開源北極星(Polaris Mesh),開放了應用在大規模生產環境中的原始碼,推進以微服務為核心的開源生態建設,並希望幫助業界更好地進行分散式或者微服務架構轉型。

 

目前很多企業在微服務實施和演化過程中,都會面臨技術棧的多樣性問題。整個微服務領域逐漸沉澱出了無數個相關元件,大家在選擇上更加困難,也為企業的基礎設施建設不斷帶來挑戰。騰訊也曾面臨這樣的痛點,因此從 2019 年開始騰訊開創了統一的微服務解決方案“北極星”(Polaris Mesh),通過北極星對這些元件進行抽象和整合,打造公司標準化的服務發現和治理方案,幫助業務提升研發效率和運營質量。

經過兩年的發展,北極星在騰訊內部註冊服務數量超過百萬,服務例項數量超過五百萬,介面日呼叫量超過三十萬億,騰訊音樂、騰訊視訊、騰訊會議、騰訊文件、企業微信、微信支付和王者榮耀等重點產品均在使用。

9 月 8 日,騰訊雲面向所有開發者,正式宣佈開源北極星(Polaris Mesh),開放了應用在大規模生產環境中的原始碼,推進以微服務為核心的開源生態建設,並希望幫助業界更好地進行分散式或者微服務架構轉型。

 

一、從單體架構到微服務

 

 

最近十幾年,業務架構經歷了從單體到分散式再到微服務的演進。單體架構的所有程式碼都在一個應用中,適合小規模或者初創期的業務。如果應用模組和開發人員的數量很少,單體架構容易開發、測試、部署和伸縮。隨著應用模組和開發人員增加,單體架構面臨眾多問題,例如:

  • 任何修改都需要重新編譯和部署整個系統,變更風險大,測試成本高,編譯速度慢。

  • 如果某個業務模組存在缺陷,也會影響其他業務模組,降低整個系統的可用性。

  • 如果每個業務模組的請求量不均勻,無法針對某些熱點模組進行水平擴充套件。

為了解決這些問題,分散式和微服務架構將業務模組拆分成為獨立的服務,但是整個系統的複雜度也急劇上升,如果沒有配套的技術元件,分散式和微服務架構很難落地。作為微服務方向的開發人員,我們都知道服務發現和治理是分散式和微服務架構中的關鍵技術,可以很好的幫助大家解決服務定址、流量排程、故障容錯、訪問控制和可觀測性等問題,但這個關鍵技術目前在業界的開源解決方案卻各有利弊,並不完美。

二、服務發現和治理技術

目前,業界主要有三種服務發現和治理方案:

  • 第一種方案以 Spring Cloud 為代表,在開發框架中集成了一系列服務發現和治理元件。雖然在虛擬機器和容器環境中可以無差別地使用,但是需要在開發時引入多個零散的功能元件,缺少統一的資料面和控制面,不同的語言和框架無法統一管理。

  • 第二種是 Kubernetes  Service,將服務註冊到內建的 etcd,採用域名解析外掛實現服務發現,但有個缺點是無法提供服務治理功能。

  • 第三種是以 Istio 為代表的服務網格,通過劫持業務請求的方式實現服務發現和治理。這種方案對開發程式碼的侵入性低,具備統一的資料面和控制面,但是需要部署流量代理程序,同時還會增加運維成本,存在較大的資源和效能損耗。

我們認為上述三種方案各有優劣,不是誰取代誰的問題,而是互相融合,滿足不同的業務需求。騰訊內部絕大部分核心業務使用第一種方案,也有不少業務在 Kubernetes  上使用其他兩種方案,但是依然存在跨部門業務系統間資料無法打通、缺少標準化的服務治理的問題。

為了能夠融合上述三種解決方案的優點,同時規避它們的缺點,我們開創了統一的解決方案——北極星,致力於打造騰訊新一代服務發現和治理中心,解決原有平臺存在的問題,並且支援無縫遷移,實現公司服務的互聯互通和統一治理。目前,北極星的註冊服務數量超過百萬,服務例項數量超過五百萬,介面日呼叫量超過三十萬億,騰訊音樂、騰訊視訊、騰訊會議、騰訊文件、企業微信、微信支付和王者榮耀等重點業務均在使用。

 

三、北極星是什麼?

北極星(Polaris Mesh)是騰訊自研的服務發現和治理中心,以服務註冊中心為基礎,擴充套件了服務治理功能以及相應的控制面,提供多語言的客戶端實現,不同的開發框架可以整合使用。隨著容器化和雲原生的推進,北極星也支援了 Kubernetes  服務和網格 Sidecar 的自動接入,實現了它們之間互聯互通和統一治理。

3.1 功能效能

北極星主要有五大功能:
  • 註冊發現:北極星的基礎部分是一個大容量和高可用的服務註冊中心,除了支援多種協議的服務註冊和發現,還支援對註冊的服務例項進行健康檢查,避免主調方將請求傳送給異常例項。在圍繞服務構建的分散式應用架構中,服務註冊和發現至關重要,可以提高應用的擴充套件能力,降低應用的遷移成本。
  • 流量排程 :北極星提供動態路由和負載均衡兩種型別的流量排程功能。動態路由根據請求標籤、例項標籤和標籤匹配規則,可以實現按地域就近、單元化隔離和金絲雀釋出等多種路由策略。負載均衡將請求均衡地分配給不同的被調方例項,支援權重隨機、最小負載和權重一致性 Hash 等多種均衡演算法。
  • 熔斷降級 :北極星支援例項、介面和服務三種粒度的熔斷策略。如果被調方的部分例項發生熔斷,將請求分配給其他例項。如果被調方的某個介面或者服務發生熔斷,根據降級策略直接返回。網路抖動、機器故障和程式缺陷等因素都可能導致例項、介面或者服務出現異常,熔斷降級可以提高業務的請求成功率。
  • 訪問控制 :北極星提供鑑權和限流兩種訪問控制功能。被調方可以設定鑑權規則,允許哪些主調方訪問自己,不允許哪些主調方訪問自己。被調方也可以設定單機或者分散式限流規則,一方面防止突發流量壓垮自己,導致自己完全不可用,一方面防止部分主調方的請求量過多,消耗大量資源,影響其他主調方。
  • 服務網格 :對於上述服務發現和治理功能,北極星提供統一的控制面和資料面。資料面功能採用配置化的實現方式,控制面可以下發服務資料和治理規則到資料面,動態調整資料面的執行策略。資料面支援  多語言  SDK 和 Sidecar 兩種模式。
3.2 系統元件
 
   
北極星系統元件分為核心和生態兩個部分:
  • 核心元件:控制檯、控制面和資料面

  • 生態元件:用於框架、閘道器和 Kubernetes  對接

北極星控制面既包含服務註冊中心,也包含服務治理控制面,服務治理控制面相當於業界服務網格的控制面。資料面分為 SDK 和 Sidecar 兩種模式。SDK 模式提供多語言的實現,不需要劫持業務請求,和業務請求的協議無關,適合整合在開發框架裡使用。Sidecar 模式需要劫持業務請求,存在效能和資源損耗,部署和運維成本高,適合 無侵入的開發場景。

為了降低業務的使用成本,北極星提供三種類型的生態元件。第一類用於各種開發框架和北極星資料面的無縫整合,框架使用者不需要直接呼叫北極星資料面,減少開發的侵入性;第二類用於各種閘道器和北極星資料面的無縫整合,支援閘道器將請求直接轉發到北極星服務;第三類生態元件只有 polaris-controller,支援 Kubernetes  服務和網格 Sidecar 的自動接入。

3.3 最佳實踐

     

目前,騰訊常用的框架、閘道器和容器平臺已經整合北極星,形成了以北極星為核心的服務發現和治理體系。下面介紹北極星在騰訊的最佳實踐:

第一,作為公司統一的服務發現平臺,實現公司內網服務的互聯互通。北極星採用計算和儲存分離的架構,計算層可以隨著客戶端數量的增加平行擴充套件,輕鬆支援百萬級客戶端接入。同時服務端提供同城多中心或者跨城多中心等多種部署模式,滿足不同的容災要求。

第二,為不同的開發語言和框架提供統一的服務發現和治理功能。騰訊業務線眾多,開發語言和框架也眾多,北極星資料面支援多語言 SDK 和 Sidecar 兩種模式。框架可以直接整合相應語言的 SDK,不需要部署 Sidecar,不會增加運維成本,沒有效能和資源損耗。

第三,作為閘道器到內網服務的聯結器。閘道器可以整合北極星,將請求直接轉發到北極星服務,實現微服務閘道器的能力。

第四,現有的開源元件主要分為兩個體系,一個圍繞服務註冊中心和開發框架打造,一個圍繞 Kubernetes 服務和網格打造。兩個體系各自有各自的亮點和侷限,隨著容器化和雲原生的推進,越來越多企業同時使用兩個體系。但是兩個體系的實現存在割裂,給業務增加了不必要的使用成本。北極星對兩個體系進行了融合,為虛擬機器和容器環境、開發框架和網格提供一體化的服務發現和治理方案。

 

四、北極星和開源生態的關係

 
4.1 北極星和框架
 

北極星客戶端可以整合到各種框架中,讓裸的開發框架快速升級為分散式和微服務框架,具備完整的服務發現和治理功能。

騰訊業務常用的框架均已整合北極星,其中除了自研框架,還有 gRPC、Spring 和 Gin 等開源框架。如上所述,這些整合也會作為北極星的生態元件開源,框架使用者可以直接引入,邏輯程式碼不需要任何改動。

4.2 北極星和閘道器

閘道器和框架的情況類似,北極星也可以和常見的開源閘道器整合使用。

4.3 北極星和Kubernetes

隨著容器化和雲原生的推進,越來越多企業開始使用 Kubernetes 部署服務,騰訊也不例外。

在 Kubernetes 環境上,除了註冊中心和框架,還有兩種服務發現和治理方案:

  • Kubernetes 服務:通過 DNS 域名解析實現服務發現,採用 iptables 或者 IPVS 實現負載均衡。這種方案簡單易用,但是缺少其他服務治理能力,大規模服務存在效能瓶頸。

  • 網格:通過劫持業務請求實現服務發現和治理。這種方案功能全面,但是存在 CPU 和效能損耗,運維成本高。

在騰訊內部,絕大部分業務使用註冊中心和框架的方案,也有不少業務使用 Kubernetes 服務,網格還在小範圍嘗試階段。

北極星提供 polaris-controller,支援 Kubernetes 服務和網格 Sidecar 自動注入,實現三種方案的聯通和統一治理。

 

五、北極星開源規劃

 
北極星是在滿足騰訊業務需求的過程中,不斷演進和發展起來的,積累了騰訊超大規模服務發現和治理的經驗,沒有一個開源元件的形態和北極星完全類似。 騰訊的業務線眾多,包含即時通訊、音樂視訊、金融科技和企業服務等,北極星面臨的問題和相應的解決方案具有很強的通用性。 我們相信北極星也可以幫助其他企業更好地進行分散式或者微服務架構轉型,提高業務的研發效率和運營質量。

北極星開源版本直接來自騰訊的生產程式碼,我們已經將主體部分提交到社群。期待更多感興趣、有能力的開發者參與共建,後續計劃包括但不限於:

  • 完善服務發現和治理功能

  • 提供更多語言的資料面 SDK

  • 優化資料面 Sidecar 的效能

  • 加強北極星和相關開源元件的整合

  • 完善專案文件

  • 引入其他公司的開源愛好者

歡迎加入

截至目前,騰訊共對外開源超過 130 個優質專案,程式碼貢獻者超過 2000 人,開源專案 star 總數超過 37 萬個。北極星作為微服務領域新推出的開源專案,也非常歡迎感興趣的小夥伴在北極星 Github 上提交 issue 與 PR 進行討論和貢獻,或加入北極星社群群參與社群討論。

 

掃碼進群交流群,若群已滿員,

請新增“midwareQmei”微信,併發送進群暗號“polaris”

 

極星 GitHub:https://github.com/polarismesh/polaris

 

北極星官網地址:https://polarismesh.cn/

 

往期

推薦

 

玩轉 Kafka Raft 模式 - 入門寶典

《伺服器又崩了?深度解析高可用架構的挑戰和實踐》

《Kratos技術系列|從Kratos設計看Go微服務工程實踐》

 

 

 

掃描下方二維碼關注本公眾號,

瞭解更多微服務、訊息佇列的相關資訊!

解鎖超多鵝廠周邊!

 

戳原文,瞭解更多北極星(Polaris Mesh)的資訊
 
點亮在看,你最好看

本文分享自微信公眾號 - 騰訊雲中間件(gh_6ea1bc2dd5fd)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。