Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
rnacos
简介
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 协议,没有配置控制台,后面补上控制台发才放出来。
适用场景
- 开发测试环境使用nacos,nacos服务可以换成rnacos。启动更快,秒启动。
- 个人资源云服务部署的 nacos,可以考虑换成rnacos。资源占用率低: 包10M 左右,不依赖 JDK;运行时 cpu 小于0.5% ,小于5M(具体和实例有关)。
- 其它非集群部署的 nacos ,理论上都支持迁移到 rnacos。
- 目前 rnacos 只支持单机部署,其支持容量在一万个服务实例以上。在一万服务实例场景下压测,qps 可以稳定在1.2左右,内存稳定在50 M以下,cpu稳定在33%左右(和压测环境有关)。
快速开始
一、 安装运行 rnacos
方式1:从 github release 下载对应系统的应用包,解压后即可运行。
linux 或 mac
# 解压
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 应用。
具体的用法参考 nacos.io 的用户指南。
三、控制台管理
启动服务后可以在浏览器通过 http://127.0.0.1:8848/ 访问rnacos控制台。
主要包含命名空间管理、配置管理、服务管理、服务实例管理。
1、配置管理
配置列表管理

新建、编辑配置

2、服务列表管理

3、服务实例管理

功能说明
这里把 nacos 服务的功能分为三块 1、面向 SDK 的功能 2、面向控制台的功能 3、面向部署、集群的功能
第一块做一个对nacos服务的对比说明。
一、面向 SDK 的功能
访问认证:
- 有提供获取认证token的接口
- 实际请求暂不支持认证,都算认证通过。
配置中心:
- 支持配置中心的基础功能、支持维护配置历史记录
- 兼容配置中心的SDK协议
- 暂不支持灰度发布、暂不支持tag隔离
注册中心:
- 支持注册中心的基础功能
- 兼容配置中心的SDK协议
- 暂不支持1.x的 udp 实例变更实时通知,只支持 2.x 版本grpc实例变更实时通知 。最开始的版本也有支持过udp实例变更 通知,后面因支持 grpc 的两者不统一,就暂时去掉,后继可以考虑加回去。
二、面向控制台的功能
访问认证: 暂时不开启认证
配置中心:
- 暂不支持配置的导入、导出,后继计划支持导入、导出,其格式兼容 nacos 的导出格式
- 暂不支持tag 的高级查询
- 暂不支持配置历史记录查看与恢复
- 暂不支持查询配置监听记录
服务中心:
- 暂不支持路由类型的设置
- 暂不支持查询监听记录
三、面向部署、集群的功能
- 目前只支持单机部署,后继考虑支持集群部署。
- 配置中心的数据存放在本地 sqlite 中,后继考虑支持其它中心数据库。
性能
配置中心,不会频繁更新, qps能到2.4万,基本没有性能压力。 性能瓶颈主要在注册中心。
配置中心
配置中心单机 qps 支持在2.4万左右,可以参考下面的压测数据。
rnacos版本:v0.1.1 压测环境:macos i7四核 /16G , 施压、受压机器是同一台机器(会拉低压测结果)。 压测工具: * wrk ,qps: 24450左右 * goose, qps 17000左右 (单进程加限流施压比 wrk低) * 单进程施压请求wrk比goose 输出高
注册中心
- naming 注册1000 x 1个实例,每秒100qps,单核cpu: 6% 左右
- naming 单查询1.5万 QPS 左右
- wrk 1.65万 qps 左右
- goose 1.5万 qps 左右
- naming 单注册服务
- goose,5万到7万实例数,能稳定压到0.7万 qps左右;长时间超过上限会出现请求积压,qps慢慢降低。
- 查询与注册混合 (两个进程同时压测)
- wrk 查询(1.5万 qps) + goose 注册(0.075 万qps) 【5千实例】
- goose 查询(1.3万 qps) + goose 注册(0.07万 qps) 【5千实例】
-
- wrk 查询(1.5万 qps) + goose 注册(0.15万qps) 【1万实例】
- goose 查询(1.3万 qps) + goose 注册(0.13万 qps) 【1万实例】
压测环境: 施压、受压机器是同一台机器(可能会拉低压测结果)
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突刺和内部时间器检查有关,有优化空间,目前还可接受)

压测时的服务列表与实例

