1. 簡(jiǎn)介
rnacos 是一個(gè)用rust實(shí)現(xiàn)的nacos服務(wù)。
rnacos是一個(gè)輕量、快速、穩(wěn)定的服務(wù),包含注冊(cè)中心、配置中心、web管理控制臺(tái)功能。
rnacos兼容nacos client sdk用到的協(xié)議,支持使用nacos服務(wù)的應(yīng)用平遷到 rnacos。
注:
nacos 是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。它的功能實(shí)用,在微服務(wù)架構(gòu)中有較廣泛的應(yīng)用。
rnacos架構(gòu)圖
2. 為什么用rust重新實(shí)現(xiàn)nacos ?
nacos是由 java 實(shí)現(xiàn),對(duì)輕度使用用戶(hù)來(lái)說(shuō)占用資源較重。
- 依賴(lài) jdk,對(duì)非 java應(yīng)用來(lái)說(shuō)要多依賴(lài)一個(gè) jdk;
- 應(yīng)用比較大,最新應(yīng)用壓縮包142M, docker壓縮包577M
- 啟動(dòng)慢,啟動(dòng)后要10秒左右才可用
- 運(yùn)行時(shí)占用資源比較大,啟動(dòng)后線(xiàn)程數(shù)270左右,初始內(nèi)存531M左右。
- 200qps左右流量時(shí),單核cpu利用率就有17%左右。
本人開(kāi)發(fā)應(yīng)用有用到 nacos,個(gè)人云服務(wù)部署一個(gè)nacos太重,本地開(kāi)發(fā)測(cè)試開(kāi)nacos也比較重。有使用更輕量服務(wù)的需求。
另一方面自己學(xué)習(xí) rust 后,想寫(xiě)個(gè)中間件實(shí)踐rust網(wǎng)絡(luò)并發(fā)編程。
本人能讀java源碼又能寫(xiě)rust,分析確認(rèn)開(kāi)發(fā)可行性后,決定先寫(xiě)一個(gè)最小功能集給自己用。
rnacos由此而開(kāi)發(fā)出來(lái)。
目前rnacos的資源占用情況
- rnacos 打包成原生應(yīng)用,不依賴(lài)其它組件,支持多平臺(tái)。
- 應(yīng)用大小11M左右, 壓縮包不到5M,docker 壓縮包9.4M
- 秒啟動(dòng),啟動(dòng)1秒內(nèi)應(yīng)用控制臺(tái)、接口可用。
- 運(yùn)行時(shí)占用資源很小。啟動(dòng)后線(xiàn)程數(shù)量在10左右,這個(gè)數(shù)量是固定的,后繼不什變化;初始內(nèi)存2M,一萬(wàn)個(gè)服務(wù)實(shí)例時(shí),內(nèi)存也在20M以?xún)?nèi);
- 每秒200qps流量時(shí),單核cpu: 4.5% 左右。
具體性能可以看后面的壓測(cè)對(duì)比數(shù)據(jù)
3. 適用場(chǎng)景
- 開(kāi)發(fā)測(cè)試環(huán)境使用nacos,nacos服務(wù)可以換成rnacos。啟動(dòng)更快,秒啟動(dòng)。
- 個(gè)人資源云服務(wù)部署的 nacos,可以考慮換成rnacos。資源占用率低: 包10M 左右,不依賴(lài) JDK;運(yùn)行時(shí) cpu 小于0.5% ,小于5M(具體和實(shí)例有關(guān))。
- 其它非集群部署的 nacos ,理論上都支持遷移到 rnacos。
- 目前 rnacos 只支持單機(jī)部署,其支持容量在一萬(wàn)個(gè)服務(wù)實(shí)例以上。在一萬(wàn)服務(wù)實(shí)例場(chǎng)景下壓測(cè),qps 可以穩(wěn)定在1.2萬(wàn)左右,內(nèi)存穩(wěn)定在50 M以下,cpu穩(wěn)定在30%左右(和壓測(cè)環(huán)境有關(guān))。
4. 快速開(kāi)始
一、 安裝運(yùn)行 rnacos
方式1:從 github release gitee release 下載對(duì)應(yīng)系統(tǒng)的應(yīng)用包,解壓后即可運(yùn)行。
linux 或 mac
# 解壓
tar -xvf rnacos-x86_64-apple-darwin.tar.gz
# 運(yùn)行
./rnacos
windows 解壓后直接運(yùn)行 rnacos.exe 即可。
方式2: 通過(guò)docker 運(yùn)行
docker pull qingpan/rnacos:stable
docker run --name mynacos -p 8848:8848 -p 9848:9848 -d qingpan/rnacos:stable
docker 的容器運(yùn)行目錄是 /io,會(huì)從這個(gè)目錄讀寫(xiě)配置文件
方式3:通過(guò) cargo 編譯安裝
# 安裝
cargo install rnacos
# 運(yùn)行
rnacos
方式4: 下載源碼編譯運(yùn)行
git clone https://github.com/heqingpan/rnacos.git
cd rnacos
cargo build --release
cargo run --release
推薦使用第1、第2種方式。
運(yùn)行參數(shù)
rnacos 運(yùn)行時(shí)支持的環(huán)境變量,如果不設(shè)置則按默認(rèn)配置運(yùn)行。
RNACOS_CONFIG_DB_FILE: 配置中心的本地?cái)?shù)據(jù)庫(kù)文件地址,默認(rèn)為運(yùn)行目錄下的 config.db
RNACOS_HTTP_PORT: rnacos監(jiān)聽(tīng)http端口,默認(rèn)是8848
RNACOS_GRPC_PORT: rnacos監(jiān)聽(tīng)的grpc端口,默認(rèn)是 HTTP端口+1000
RNACOS_HTTP_WORKERS: http工作線(xiàn)程數(shù),默認(rèn)是cpu核數(shù)
也支持從運(yùn)行目錄下的.env讀取環(huán)境變量
.env 配置格式如下:
RNACOS_CONFIG_DB_FILE=config.db
RNACOS_HTTP_PORT=8848
二、運(yùn)行nacos 應(yīng)用
服務(wù)啟動(dòng)后,即可運(yùn)行原有的 nacos 應(yīng)用。
具體的用法參考 nacos.io 的用戶(hù)指南。
JAVA-SDK
其它語(yǔ)言
open-api
三、控制臺(tái)管理
啟動(dòng)服務(wù)后可以在瀏覽器通過(guò) http://127.0.0.1:8848/
訪問(wèn)rnacos控制臺(tái)。
主要包含命名空間管理、配置管理、服務(wù)管理、服務(wù)實(shí)例管理。
1、配置管理
配置列表管理
新建、編輯配置
2、服務(wù)列表管理
3、服務(wù)實(shí)例管理
5. rnacos對(duì)比nacos的功能說(shuō)明
這里把 nacos 服務(wù)的功能分為三塊
1、面向 SDK 的功能
2、面向控制臺(tái)的功能
3、面向部署、集群的功能
每一塊做一個(gè)對(duì)nacos服務(wù)的對(duì)比說(shuō)明。
一、面向 SDK 的功能
訪問(wèn)認(rèn)證:
- 有提供獲取認(rèn)證token的接口
- 實(shí)際請(qǐng)求暫不啟用認(rèn)證,都算認(rèn)證通過(guò)
配置中心:
- 支持配置中心的基礎(chǔ)功能、支持維護(hù)配置歷史記錄
- 兼容配置中心的SDK協(xié)議
- 暫不支持灰度發(fā)布、暫不支持tag隔離
注冊(cè)中心:
- 支持注冊(cè)中心的基礎(chǔ)功能
- 兼容配置中心的SDK協(xié)議
- 暫不支持1.x的 udp 實(shí)例變更實(shí)時(shí)通知,只支持 2.x 版本grpc實(shí)例變更實(shí)時(shí)通知 。最開(kāi)始的版本也有支持過(guò)udp實(shí)例變更通知,后面因支持 grpc 的兩者不統(tǒng)一,就暫時(shí)去掉,后繼可以考慮加回去。
二、面向控制臺(tái)的功能
訪問(wèn)認(rèn)證:
暫時(shí)不開(kāi)啟認(rèn)證
配置中心:
- 暫不支持配置的導(dǎo)入、導(dǎo)出,后繼計(jì)劃支持導(dǎo)入、導(dǎo)出,其格式兼容 nacos 的導(dǎo)出格式
- 暫不支持tag 的高級(jí)查詢(xún)
- 暫不支持配置歷史記錄查看與恢復(fù)
- 暫不支持查詢(xún)配置監(jiān)聽(tīng)記錄
服務(wù)中心:
- 暫不支持路由類(lèi)型的設(shè)置
- 暫不支持查詢(xún)監(jiān)聽(tīng)記錄
三、面向部署、集群的功能
- 目前只支持單機(jī)部署,后繼考慮支持集群部署。
- 配置中心的數(shù)據(jù)存放在本地 sqlite 中,后繼考慮支持其它中心數(shù)據(jù)庫(kù)。
6. rnacos與nacos性能比較
1. 壓測(cè)環(huán)境與工具
壓測(cè)環(huán)境:macos i7四核 /16G , 施壓、受壓機(jī)器是同一臺(tái)機(jī)器(一定程序會(huì)拉低壓測(cè)結(jié)果值)。
壓測(cè)工具:
* wrk ,qps能輸出到24450左右
* goose, qps能輸出到17000左右 (單進(jìn)程加限流施壓比 wrk低)
* 單進(jìn)程施壓請(qǐng)求wrk比goose 輸出高
rnacos server版本:v0.1.1
java nacos server版本: 2.1.0
2. 配置中心
配置中心,不會(huì)頻繁更新,寫(xiě)入不做壓測(cè)。
rust rnacos server:
- 配置中心單機(jī)查詢(xún) wrk 壓測(cè) qps 在2.4萬(wàn)左右.
java nacos server:
- 配置中心單機(jī)查詢(xún) wrk 壓測(cè), qps 在7700左右
3. 注冊(cè)中心
rust rnacos server:
- naming 注冊(cè)1000 x 1個(gè)實(shí)例,每秒200qps,單核cpu: 4.5% 左右
- naming 單查詢(xún)1.5萬(wàn) QPS 左右
- wrk 查詢(xún)單個(gè)服務(wù) ,1.65萬(wàn) qps
- goose 查詢(xún)1000個(gè)服務(wù) ,1.5萬(wàn) qps
- naming 單注冊(cè)服務(wù)
- goose,5萬(wàn)到7萬(wàn)實(shí)例數(shù) 0.7萬(wàn) qps左右。
- 查詢(xún)與注冊(cè)混合
- wrk 查詢(xún)單個(gè)服務(wù)(1.5萬(wàn) qps) + goose 注冊(cè)(0.075 萬(wàn)qps) 【5千實(shí)例】
- goose 查詢(xún)1000個(gè)服務(wù)(1.3萬(wàn) qps) + goose 注冊(cè)(0.07萬(wàn) qps) 【5千實(shí)例】
- wrk 查詢(xún)單個(gè)服務(wù)(1.5萬(wàn) qps) + goose 注冊(cè)(0.15萬(wàn)qps) 【1萬(wàn)實(shí)例】
- goose 查詢(xún)1000個(gè)服務(wù)(1.3萬(wàn) qps) + goose 注冊(cè)(0.13萬(wàn) qps) 【1萬(wàn)實(shí)例】
java nacos server:
- naming 注冊(cè)1000 x 1個(gè)實(shí)例,每秒200qps,單核cpu: 17% 左右
- naming 單查詢(xún)
- wrk 查詢(xún)單個(gè)服務(wù) ,1.35萬(wàn) qps 。
- goose 查詢(xún)1000個(gè)服務(wù),1萬(wàn) qps(前期應(yīng)該還能上去一些)。前30秒能穩(wěn)定在1萬(wàn)左右,30秒后,跌到200左右之后再上下浮動(dòng),可能受 GC 影響。
- naming 單注冊(cè)
- goose,5萬(wàn)到7萬(wàn)實(shí)例數(shù) 0.45萬(wàn) qps左右。
- 查詢(xún)與注冊(cè)混合
- wrk 查詢(xún)單個(gè)服務(wù)(1.3萬(wàn) qps) + goose 注冊(cè)(0.07 萬(wàn)qps) 【5千實(shí)例】
- goose 查詢(xún)1000個(gè)服務(wù)(1萬(wàn) qps) + goose 注冊(cè)(0.07萬(wàn) qps) 【5千實(shí)例】; 前期能保持,后期 qps 上下浮動(dòng)比較大,最低小于50。
- wrk 查詢(xún)單個(gè)服務(wù)(0.9萬(wàn) qps) + goose 注冊(cè)(0.12萬(wàn)qps) 【1萬(wàn)實(shí)例】
- goose 查詢(xún)1000個(gè)服務(wù)(0.6萬(wàn) qps) + goose 注冊(cè)(0.08萬(wàn) qps) 【1萬(wàn)實(shí)例】
4. 性能壓測(cè)總結(jié)
- rnacos,除了服務(wù)服務(wù)注冊(cè)不能穩(wěn)定在1萬(wàn)以上,其它的接口qps都能穩(wěn)定在1萬(wàn)以上。
- java 的查詢(xún)接口基本能壓到1萬(wàn)以上,但不平穩(wěn),后繼浮動(dòng)比較大。如果降低壓測(cè)流程,qps 可以相對(duì)平穩(wěn)。
- 在多服務(wù)查詢(xún)疊加上多服務(wù)注冊(cè)場(chǎng)景,rnacos qps能穩(wěn)定在1.3萬(wàn)左右, java nacos qps 下降明顯在0.6萬(wàn)左右。
- rnacos 綜合 qps是 java版的2倍以上,因 java 有 GC,qps水位穩(wěn)定性上 java較差(相同施壓流量,qps 能從峰值1萬(wàn)能降到1百以下)。
- rnacos 服務(wù),線(xiàn)程數(shù)穩(wěn)定在7,cpu 用例率最大200%左右(相當(dāng)用個(gè)2核),內(nèi)存在50M 以下
- java nacos 服務(wù),線(xiàn)程數(shù)最大300左右, cpu 用例率最大500%左右,內(nèi)存600M到900M。
7. 后繼計(jì)劃
一、 對(duì)rnacos單機(jī)功能補(bǔ)全
- 配置中心
- 控制臺(tái)支持導(dǎo)入導(dǎo)出
- 查詢(xún)配置歷史變更記錄
- 支持歷史記錄回滾。
- 支持恢復(fù)發(fā)布,與 tag配置隔離
- 支持查詢(xún)服務(wù)監(jiān)聽(tīng)列表
- 注冊(cè)中心
- 支持服務(wù)路由類(lèi)型的設(shè)置
- 支持查詢(xún)服務(wù)監(jiān)聽(tīng)列表
二、rnacos支持集群部署
- 配置中心數(shù)據(jù)支持 mysql 存儲(chǔ)
- 注冊(cè)中心支持集群
- 寫(xiě)路由
- 集群間的數(shù)據(jù)同步
- 其它
- 集群用戶(hù)認(rèn)證同步
邀請(qǐng)共建與使用
目前項(xiàng)目已開(kāi)源到 github gitee, 歡迎共建PR。
希望用使用nacos場(chǎng)景的開(kāi)發(fā)的同學(xué)可以試用 rnacos,如果過(guò)程中發(fā)現(xiàn)問(wèn)題可以到 github 提Issues。
如果對(duì)你有幫助就給個(gè)star鼓勵(lì)鼓勵(lì)
20230512補(bǔ)充 rnacos 版本更新為 v0.1.4
發(fā)布 rnacos 后,有收到部分對(duì)2.0版本兼容問(wèn)題的反饋。
主要是nacos2.0版本的注冊(cè)心跳與1.0不同,rnacos之前沒(méi)對(duì)2.0版本的注冊(cè)實(shí)例心跳機(jī)制做兼容。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-436231.html
發(fā)現(xiàn)問(wèn)題后快速更新一個(gè)版本,以保證rnacos 功能上達(dá)到可用條件。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-436231.html
v0.1.4版本更新內(nèi)容
- 修復(fù)2.0版本注冊(cè)心跳的問(wèn)題,注冊(cè)中心支持grpc統(tǒng)一維持心跳。
- 配置中心支持導(dǎo)入配置文件,配置文件兼容 nacos 格式。(導(dǎo)出計(jì)劃后繼版本支持)
到了這里,關(guān)于rnacos——用rust重新實(shí)現(xiàn)的nacos開(kāi)源配置、注冊(cè)中心服務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!