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