rnacos是一个用rust实现的nacos服务。
rnacos是一个轻量、 快速、稳定、高性能的服务;包含注册中心、配置中心、web管理控制台功能,支持单机、集群部署。
rnacos设计上完全兼容最新版本nacos面向client sdk 的协议(包含1.x的http OpenApi,和2.x的grpc协议), 支持使用nacos服务的应用平迁到 rnacos。
rnacos相较于java nacos来说,是一个提供相同功能,启动更快、占用系统资源更小、性能更高、运行更稳定的服务。
详细说明可以看 rnacos book
一方面自己学习 rust 后想,写个中间件实践rust网络并发编程。
另一方面,自己开发应用有用到 nacos,个人云服务部署一个nacos太重,本地开发测试开nacos也比较重。
本人能读java源码又能写rust,分析确认开发可行性后,决定先写一个最小功能集给自己用。
自己写完后用下来整体体验很顺畅,就想开源出来给有需要的人使用。
最开始只兼容v1.x sdk协议,没有配置控制台,后面补上v2.x协议和控制台发才放出来。
【单机部署】
方式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种方式,直接下载就可以使用。
在linux下第1、第2种方式默认是musl版本(性能比gnu版本差一些),在生产服务对性能有要求的可以考虑使用第3、第4种在对应环境编译gnu版本部署。
启动配置可以参考: 运行参数说明
【集群部署】
集群部署参考: 集群部署
服务启动后,即可运行原有的 nacos 应用。
```
curl -X POST 'http://127.0.0.1:8848/nacos/v1/cs/configs' -d 'dataId=t001&group=foo&content=contentTest'
curl 'http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=t001&group=foo'
```
```
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance' -d 'port=8000&healthy=true&ip=192.168.1.11&weight=1.0&serviceName=nacos.test.001&groupName=foo&metadata={"app":"foo","id":"001"}'
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance' -d 'port=8000&healthy=true&ip=192.168.1.12&weight=1.0&serviceName=nacos.test.001&groupName=foo&metadata={"app":"foo","id":"002"}'
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance' -d 'port=8000&healthy=true&ip=192.168.1.13&weight=1.0&serviceName=nacos.test.001&groupName=foo&metadata={"app":"foo","id":"003"}'
curl "http://127.0.0.1:8848/nacos/v1/ns/instance/list?&namespaceId=public&serviceName=foo%40%40nacos.test.001&groupName=foo&clusters=&healthyOnly=true"
```
具体的用法参考 nacos.io 的用户指南。
启动服务后可以在浏览器通过 http://127.0.0.1:8848/
访问rnacos控制台。
主要包含命名空间管理、配置管理、服务管理、服务实例管理。
1、配置管理
配置列表管理
新建、编辑配置
2、服务列表管理
3、服务实例管理
4、命名空间管理
这里把 nacos 服务的功能分为三块 1、面向 SDK 的功能 2、面向控制台的功能 3、面向部署、集群的功能
每一块做一个对nacos服务的对比说明。
访问认证:
配置中心:
注册中心:
访问认证: 暂时不开启认证
命名空间:
配置中心:
服务中心:
|模块|场景|单节点qps|集群qps|总结| |--|--|--|--|--| |配置中心|配置写入,单机模式|1.5万|1.5万|| |配置中心|配置写入,集群模式|1.8千|1.5千|接入raft后没有充分优化,待优化,理论上可接近单机模式| |配置中心|配置查询|8万|n8万|集群的查询总qps是节点的倍数| |注册中心|服务实例注册,http协议|1.2万|1.0万|注册中心单机模式与集群模式写入的性能一致| |注册中心|服务实例注册,grpc协议|1.2万|1.2万|grpc协议压测工具没有支持,目前没有实际压测,理论不会比http协议低| |注册中心|服务实例心跳,http协议|1.2万|1.0万|心跳是按实例计算和服务实例注册一致共享qps| |注册中心|服务实例心跳,grpc协议|8万以上|n8万|心跳是按请求链接计算,且不过注册中心处理线程,每个节点只需管理当前节点的心跳,集群总心跳qps是节点的倍数| |注册中心|查询服务实例|3万|n*3万|集群的查询总qps是节点的倍数|
注: 具体结果和压测环境有关
详细信息可以参考 性能与容量说明
单实例:
前端应用因依赖nodejs,所以单独放到另一个项目 rnacos-console-web ,再通过cargo 把打包好的前端资源引入到本项目,避免开发rust时还要依赖nodejs。
多实例的raft和distro分布式协议说明待补充