目前很多企業在微服務實施和演化過程中,都會面臨技術棧的多樣性問題。整個微服務領域逐漸沉淀出了無數個相關組件,大家在選擇上更加困難,也為企業的基礎設施建設不斷帶來挑戰。騰訊也曾面臨這樣的痛點,因此從 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 進行討論和貢獻,或加入北極星社區群參與社區討論。
北極星 GitHub:github.com/polarismesh…
北極星官網地址:polarismesh.cn/
交流群:由于群成員已達300+,請加中間件小Q妹微信(微信號:midwareQmei),并發送入群暗號“polaris”,等待驗證回復。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121160.html