騰訊開源云原生服務發(fā)現(xiàn)和治理中心 - 北極星
北極星是騰訊開源的服務發(fā)現(xiàn)和治理中心,致力于解決分布式或者微服務架構中的服務可見、故障容錯、流量控制和安全問題。雖然,業(yè)界已經(jīng)有些組件可以解決其中一部分問題,但是缺少一個標準的、多語言的、框架無關的實現(xiàn)。
騰訊具有海量的分布式服務,加上業(yè)務線和技術棧的多樣性,沉淀了大大小小數(shù)十個相關組件。從 2019 年開始,我們通過北極星對這些組件進行抽象和整合,打造公司統(tǒng)一的服務發(fā)現(xiàn)和治理方案,幫助業(yè)務提升研發(fā)效率和運營質量。
目前,北極星在騰訊內部的服務注冊數(shù)量超過百萬,日接口調用量超過十萬億,通用性和穩(wěn)定性都得到了大規(guī)模的驗證。因此,我們將其貢獻到開源社區(qū),希望對其他企業(yè)有所幫助,也希望吸引更多開發(fā)者參與共建。
特色
- 北極星的功能采用插件化的形式實現(xiàn),業(yè)務可以根據(jù)需求選擇使用,也非常容易實現(xiàn)擴展
- 提供SDK和Sidecar兩種接入方式,SDK適用于高性能的業(yè)務場景,Sidecar適用于無侵入的開發(fā)模式
- 對于SDK的接入方式,提供Java、Go、C++和NodeJS等多種語言的客戶端,功能實現(xiàn)相同
- 北極星SDK可以集成到常用的框架和網(wǎng)關中,例如Spring Cloud、gRPC和Nginx
- 適用于Kubernetes,支持K8s service和Polaris sidecar的自動注入
- 騰訊百萬級服務治理中心的開源版本,沉淀了騰訊多年的分布式服務治理經(jīng)驗
控制面
北極星控制面的實現(xiàn)具有三個特點:
- 計算存儲分離,計算層節(jié)點可以隨著客戶端節(jié)點的增加平行擴展,輕松支持百萬級節(jié)點接入
- 控制面只有一個進程,分為接入層、邏輯層、存儲層和緩存層,結構清晰,易于維護
- 接入層、存儲層和緩存層采用插件化設計,方便擴展,適用于不同的應用場景
北極星和k8s
k8sservice
k8s 通過 service 提供服務發(fā)現(xiàn)和負載均衡功能:
- 用戶創(chuàng)建 service,service 通過標簽綁定相應的 pod,每個 service 關聯(lián)一個 cluster ip
- k8s 先依賴 kubedns、coredns 或者其他 dns 插件,將 service 解析成 cluster ip
- 再通過 iptables 或者 IPVS,將 cluster ip 的請求轉發(fā)給相應的 pod
k8s service 當前的實現(xiàn)存在不足之處:
- 當 service 超過一定數(shù)量時,iptables 和 IPVS 存在性能問題,不適合大體量的業(yè)務
- iptables 和 IPVS 支持的負載均衡算法有限,在內核里實現(xiàn),無法在應用層擴展
- 不提供動態(tài)路由、熔斷降級、訪問限流、訪問鑒權等常用的服務治理功能
- 不兼容 spring cloud 等微服務框架的服務注冊和發(fā)現(xiàn)方式,無法打通
在k8s上使用北極星
使用北極星補充 k8s 的服務發(fā)現(xiàn)和治理功能:
- 既支持 k8s service 自動注冊,也支持使用 SDK 和框架進行注冊,兩者統(tǒng)一管理
- 除了 k8s 原有的 DNS 訪問方式,還支持高性能和無侵入兩種服務網(wǎng)格方案
- 高性能服務網(wǎng)格提供多語言 SDK,以及常用框架和北極星 SDK 的集成
- 無侵入服務網(wǎng)格提供 Sidecar,業(yè)務不需要依賴 SDK 或者框架
快速入門
前置準備
準備數(shù)據(jù)庫
需要下載并安裝MySQL,版本號要求>=5.7,可以在這里進行下載:https://dev.mysql.com/downloads/mysql/5.7.html
導入數(shù)據(jù)庫建表腳本
建表腳本為 ./store/defaultStore/polaris_server.sql,可通過mysql命令或者admin客戶端進行導入
準備golang編譯環(huán)境
北極星服務端編譯需要golang編譯環(huán)境,版本號要求>=1.12,可以在這里進行下載:https://golang.org/dl/#featured
編譯構建
- chmod +x build.sh
- ./build.sh
構建完后,可以在當前目錄看到 polaris-server-release_${version}.tar.gz 的軟件包。
安裝
解壓軟件包
獲取polaris-server-release_${version}.tar.gz,并解壓
修改數(shù)據(jù)庫配置
進入解壓后的目錄,打開polaris-server.yaml,替換DB配置相關的幾個變量為實際的數(shù)據(jù)庫參數(shù);##DB_USER##(數(shù)據(jù)庫用戶名),##DB_PWD##(數(shù)據(jù)庫密碼),##DB_ADDR##(數(shù)據(jù)庫地址),##DB_NAME##(數(shù)據(jù)庫名稱)
執(zhí)行安裝腳本
- chmod +x ./tool/*.sh
- #進行安裝
- ./tool/install.sh
- #測試進程是否啟動成功
- ./tool/p.sh
最后一步運行p.sh后,返回Polaris Server,證明啟動成功。
驗證安裝
- curl http://127.0.0.1:8080
返回 Polaris Server,證明功能正常
體驗
官網(wǎng)地址:https://polarismesh.cn/,官方也提供了一個在線體驗版,地址:http://159.75.195.18/
倉庫地址:https://github.com/polarismesh/polaris