rnacos是一个用rust实现的nacos服务。
rnacos是一个轻量、快速、稳定的服务,包含注册中心、配置中心、web管理控制台功能。
rnacos兼容nacos client sdk用到的协议(包含1.x的http OpenApi,和2.x的grpc协议),支持使用nacos服务的应用平迁到 rnacos。
一方面自己学习 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:latest
docker run --name mynacos -p 8848:8848 -p 9848:9848 -d qingpan/rnacos:latest
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
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
服务启动后,即可运行原有的 nacos 应用。
具体的用法参考 nacos.io 的用户指南。
启动服务后可以在浏览器通过 http://127.0.0.1:8848/
访问rnacos控制台。
主要包含命名空间管理、配置管理、服务管理、服务实例管理。
1、配置管理
配置列表管理
新建、编辑配置
2、服务列表管理
3、服务实例管理
这里把 nacos 服务的功能分为三块 1、面向 SDK 的功能 2、面向控制台的功能 3、面向部署、集群的功能
第一块做一个对nacos服务的对比说明。
访问认证:
配置中心:
注册中心:
访问认证: 暂时不开启认证
配置中心:
服务中心:
配置中心,不会频繁更新, qps能到2.4万,基本没有性能压力。 性能瓶颈主要在注册中心。
配置中心单机 qps 支持在2.4万左右,可以参考下面的压测数据。
rnacos版本:v0.1.1 压测环境:macos i7四核 /16G , 施压、受压机器是同一台机器(会拉低压测结果)。 压测工具: * wrk ,qps: 24450左右 * goose, qps 17000左右 (单进程加限流施压比 wrk低) * 单进程施压请求wrk比goose 输出高
压测环境: 施压、受压机器是同一台机器(可能会拉低压测结果)
rnacos版本:v0.1.1 压测环境:macos i7四核 /16G 。 压测工具: goose(用于处理动态压测数据) ,wrk(只做静态查询)
以下是前期一次通过 goose单进程 的混合压测记录,有图表可以参考。
在一万服务实例(1000个服务,每个服务10个实例)场景下对单个 rnacos服务做限流压测(110个用户,每个用户限流100) 。 qps 稳定在1.1万左右,95%的 rt 在13ms 内;服务进程内存稳定在50 M以内,服务进程cpu稳定在总体30%左右(施压进程 cpu在总体35%左右)
qps 稳定在1.1万左右
95%的 rt 在13ms 内(rt突刺和内部时间器检查有关,有优化空间,目前还可接受)
压测时的服务列表与实例