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