rnacos是一个用rust实现的nacos服务。
rnacos是一个轻量、快速、稳定的服务,包含注册中心、配置中心、web管理控制台功能。
rnacos兼容nacos client sdk用到的协议(包含1.x的http OpenApi,和2.x的grpc协议),支持使用nacos服务的应用平迁到 rnacos。
详细说明可以看 rnacos book
一方面自己学习 rust 后想,写个中间件实践rust网络并发编程。
另一方面,自己开发应用有用到 nacos,个人云服务部署一个nacos太重,本地开发测试开nacos也比较重。
本人能读java源码又能写rust,分析确认开发可行性后,决定先写一个最小功能集给自己用。
自己写完后用下来整体体验很顺畅,就想开源出来给有需要的人使用。
最开始只兼容sdk 协议,没有配置控制台,后面补上控制台发才放出来。
方式1:从 github release 下载对应系统的应用包,解压后即可运行。
linux 或 mac
```shell
tar -xvf rnacos-x86_64-apple-darwin.tar.gz
./rnacos ```
windows 解压后直接运行 rnacos.exe 即可。
方式2: 通过docker 运行
docker pull qingpan/rnacos:stable
docker run --name mynacos -p 8848:8848 -p 9848:9848 -d qingpan/rnacos:stable
docker 的容器运行目录是 /io,会从这个目录读写配置文件
方式3:通过 cargo 编译安装
```
cargo install rnacos
rnacos ```
方式4: 下载源码编译运行
git clone https://github.com/heqingpan/rnacos.git
cd rnacos
cargo build --release
cargo run
推荐使用第1、第2种方式。
运行参数
rnacos 运行时支持的环境变量,如果不设置则按默认配置运行。
RNACOS_CONFIG_DB_FILE: 配置中心的本地数据库文件地址,默认为运行目录下的 config.db 【标记废弃,0.1.x老版本数据文件配置】
RNACOS_CONFIG_DB_DIR: 配置中心的本地数据库sled文件夹,默认为运行目录下的nacos_db ,会在系统运行时自动创建
RNACOS_HTTP_PORT: rnacos监听http端口,默认是8848
RNACOS_GRPC_PORT: rnacos监听的grpc端口,默认是 HTTP端口+1000
RNACOS_HTTP_WORKERS: http工作线程数,默认是cpu核数
也支持从运行目录下的.env读取环境变量 .env 配置格式如下:
RNACOS_CONFIG_DB_FILE=config.db
RNACOS_HTTP_PORT=8848
集群部署由多个节点组成,单个节点的部署方式和单机部署基本一样,只需要额外增加集群的配置信息。
| 参数|内容描述|默认值|示例| |--|--|--|--| |RNACOSRAFTNODEID|节点id|1|1| |RNACOSRAFTNODEADDR|节点地址,Ip:GrpcPort|127.0.0.1:GrpcPort|127.0.0.1:9848| |RNACOSRAFTAUTOINIT|是否当做主节点初始化,(只在每一次启动时生效)|节点1时默认为true\n节点非1时为false|true| |RNACOSRAFTJOINADDR|是否当做节点加入对应的主节点,LeaderIp:GrpcPort(只在每一次启动时生效)|空|127.0.0.1:9848|
env01
```
RNACOSHTTPPORT=8848 RNACOSRAFTNODEADDR=127.0.0.1:9848 RNACOSCONFIGDBDIR=db01 RNACOSRAFTNODEID=1 RNACOSRAFTAUTOINIT=true ```
env02:
```
RNACOSHTTPPORT=8849 RNACOSRAFTNODEADDR=127.0.0.1:9849 RNACOSCONFIGDBDIR=db02 RNACOSRAFTNODEID=2 RNACOSRAFTJOINADDR=127.0.0.1:9848 ```
env03:
```
RNACOSHTTPPORT=8850 RNACOSRAFTNODEADDR=127.0.0.1:9850 RNACOSCONFIGDBDIR=db03 RNACOSRAFTNODEID=3 RNACOSRAFTJOINADDR=127.0.0.1:9848 ```
sh
nohup ./rnacos -e env01 > n01.log &
sleep 1
nohup ./rnacos -e env02 > n02.log &
sleep 1
nohup ./rnacos -e env03 > n03.log &
sleep 1
可以查询集群的状态
sh
curl "http://127.0.0.1:8848/nacos/v1/raft/metrics"
curl "http://127.0.0.1:8849/nacos/v1/raft/metrics"
curl "http://127.0.0.1:8850/nacos/v1/raft/metrics"
集群运行成功后,就可以开始提供集群服务(目前只支持配置中心,注册中心的集群功能计划开发中)。
具体的运行细节可参考 test_cluster.sh
服务启动后,即可运行原有的 nacos 应用。
具体的用法参考 nacos.io 的用户指南。
启动服务后可以在浏览器通过 http://127.0.0.1:8848/
访问rnacos控制台。
主要包含命名空间管理、配置管理、服务管理、服务实例管理。
1、配置管理
配置列表管理
新建、编辑配置
2、服务列表管理
3、服务实例管理
这里把 nacos 服务的功能分为三块 1、面向 SDK 的功能 2、面向控制台的功能 3、面向部署、集群的功能
第一块做一个对nacos服务的对比说明。
访问认证:
配置中心:
注册中心:
访问认证: 暂时不开启认证
配置中心:
服务中心:
压测环境:macos i7四核 /16G , 施压、受压机器是同一台机器(会拉低压测结果)。 压测工具: * wrk ,qps: 24450左右 * goose, qps 17000左右 (单进程加限流施压比 wrk低) * 单进程施压请求wrk比goose 输出高
rnacos server版本:v0.1.1 java nacos server版本: 2.1.0
因wrk,goose暂时不支持grpc协议,暂时只压测http协议接口
配置中心,不会频繁更新,写入不做压测。
rnacos,除了服务服务注册不能稳定在1万以上,其它的接口qps都能稳定在1万以上。
java 的查询接口基本能压到1万以上,但不平稳,后继浮动比较大。如果降低压测流程,qps 可以相对平稳。
前端应用因依赖nodejs,所以单独放到另一个项目 rnacos-console-web ,再通过cargo 把打包好的前端资源引入到本项目,避免开发rust时还要依赖nodejs。