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