rnacos——用rust重新实现的nacos开源配置、注册中心服务
1. 简介
rnacos 是一个用rust实现的nacos服务。
rnacos是一个轻量、快速、稳定的服务,包含注册中心、配置中心、web管理控制台功能。
rnacos兼容nacos client sdk用到的协议,支持使用nacos服务的应用平迁到 rnacos。
注:
nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它的功能实用,在微服务架构中有较广泛的应用。
2. 为什么用rust重新实现nacos ?
nacos是由 java 实现,对轻度使用用户来说占用资源较重。
- 依赖 jdk,对非 java应用来说要多依赖一个 jdk;
- 应用比较大,最新应用压缩包142M, docker压缩包577M
- 启动慢,启动后要10秒左右才可用
- 运行时占用资源比较大,启动后线程数270左右,初始内存531M左右。
- 200qps左右流量单核cpu利用率就有17%左右。
本人开发应用有用到 nacos,个人云服务部署一个nacos太重,本地开发测试开nacos也比较重。有使用更轻量服务的需求。
另一方面自己学习 rust 后,想写个中间件实践rust网络并发编程。
本人能读java源码又能写rust,分析确认开发可行性后,决定先写一个最小功能集给自己用。
rnacos由此而开发出来。
目前rnacos的资源占用情况
- rnacos 打包成原生应用,不依赖其它组件,支持多平台。
- 应用大小11M左右, 压缩包不到5M,docker 压缩包9.4M
- 秒启动,启动1秒内应用控制台、接口可用。
- 运行时占用资源很小。启动后线程数量在10左右,这个数量是固定的,后继不什变化;初始内存2M,一万个服务实例时,内存也在20M以内;
- 每秒200qps,单核cpu: 4.5% 左右。
具体性能可以看后面的压测对比数据
3. 适用场景
- 开发测试环境使用nacos,nacos服务可以换成rnacos。启动更快,秒启动。
- 个人资源云服务部署的 nacos,可以考虑换成rnacos。资源占用率低: 包10M 左右,不依赖 JDK;运行时 cpu 小于0.5% ,小于5M(具体和实例有关)。
- 其它非集群部署的 nacos ,理论上都支持迁移到 rnacos。
- 目前 rnacos 只支持单机部署,其支持容量在一万个服务实例以上。在一万服务实例场景下压测,qps 可以稳定在1.2左右,内存稳定在50 M以下,cpu稳定在30%左右(和压测环境有关)。
4. 快速开始
一、 安装运行 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、服务实例管理

5. rnacos对比nacos的功能说明
这里把 nacos 服务的功能分为三块
1、面向 SDK 的功能
2、面向控制台的功能
3、面向部署、集群的功能
第一块做一个对nacos服务的对比说明。
一、面向 SDK 的功能
访问认证:
- 有提供获取认证token的接口
- 实际请求暂不支持认证,都算认证通过。
配置中心:
- 支持配置中心的基础功能、支持维护配置历史记录
- 兼容配置中心的SDK协议
- 暂不支持灰度发布、暂不支持tag隔离
注册中心:
- 支持注册中心的基础功能
- 兼容配置中心的SDK协议
- 暂不支持1.x的 udp 实例变更实时通知,只支持 2.x 版本grpc实例变更实时通知 。最开始的版本也有支持过udp实例变更 通知,后面因支持 grpc 的两者不统一,就暂时去掉,后继可以考虑加回去。
二、面向控制台的功能
访问认证:
暂时不开启认证
配置中心:
- 暂不支持配置的导入、导出,后继计划支持导入、导出,其格式兼容 nacos 的导出格式
- 暂不支持tag 的高级查询
- 暂不支持配置历史记录查看与恢复
- 暂不支持查询配置监听记录
服务中心:
- 暂不支持路由类型的设置
- 暂不支持查询监听记录
三、面向部署、集群的功能
- 目前只支持单机部署,后继考虑支持集群部署。
- 配置中心的数据存放在本地 sqlite 中,后继考虑支持其它中心数据库。
6. rnacos与nacos性能比较
1. 压测环境与工具
压测环境:macos i7四核 /16G , 施压、受压机器是同一台机器(会拉低压测结果)。
压测工具:
* wrk ,qps: 24450左右
* goose, qps 17000左右 (单进程加限流施压比 wrk低)
* 单进程施压请求wrk比goose 输出高
rnacos server版本:v0.1.1
java nacos server版本: 2.1.0
2. 配置中心
配置中心,不会频繁更新,写入不做压测。
rust rnacos server:
- 配置中心单机查询 wrk 压测 qps 在2.4万左右.
java nacos server:
- 配置中心单机查询 wrk 压测, qps 在7700左右
3. 注册中心
rust rnacos server:
- naming 注册1000 x 1个实例,每秒200qps,单核cpu: 4.5% 左右
- naming 单查询1.5万 QPS 左右
- wrk 查询单个服务 ,1.65万 qps
- goose 查询1000个服务 ,1.5万 qps
- naming 单注册服务
- goose,5万到7万实例数 0.7万 qps左右。
- 查询与注册混合
- wrk 查询单个服务(1.5万 qps) + goose 注册(0.075 万qps) 【5千实例】
- goose 查询1000个服务(1.3万 qps) + goose 注册(0.07万 qps) 【5千实例】
- wrk 查询单个服务(1.5万 qps) + goose 注册(0.15万qps) 【1万实例】
- goose 查询1000个服务(1.3万 qps) + goose 注册(0.13万 qps) 【1万实例】
java nacos server:
- 配置中心查询 wrk 压测, 7700 qps 左右
- naming 注册1000 x 1个实例,每秒200qps,单核cpu: 17% 左右
- naming 单查询
- wrk 查询单个服务 ,1.35万 qps 。
- goose 查询1000个服务,1万 qps(前期应该还能上去一些)。前30秒能稳定在1万左右,30秒后,跌到200左右之后再上下浮动,可能受 GC 影响。
- naming 单注册
- goose,5万到7万实例数 0.45万 qps左右。
- 查询与注册混合
- wrk 查询单个服务(1.3万 qps) + goose 注册(0.07 万qps) 【5千实例】
- goose 查询1000个服务(1万 qps) + goose 注册(0.07万 qps) 【5千实例】; 前期能保持,后期 qps 上下浮动比较大,最低小于50。
- wrk 查询单个服务(0.9万 qps) + goose 注册(0.12万qps) 【1万实例】
- goose 查询1000个服务(0.6万 qps) + goose 注册(0.08万 qps) 【1万实例】
4. 性能压测总结
rnacos,除了服务服务注册不能稳定在1万以上,其它的接口qps都能稳定在1万以上。
java 的查询接口基本能压到1万以上,但不平稳,后继浮动比较大。如果降低压测流程,qps 可以相对平稳。
在多服务查询叠加上多服务注册场景,rnacos qps能稳定在1.3万左右, java nacos qps 下降明显在0.6万左右。
rnacos 综合 qps是 java版的2倍以上,因 java 有 GC,qps水位稳定性上 java较差(相同施压流量,qps 能从峰值1万能降到1百以下)。
rnacos 服务,线程数稳定在7,cpu 用例率最大200%左右(相当用个2核),内存在50M 以下
java nacos 服务,线程数最大300左右, cpu 用例率最大500%左右,内存600M到900M。
7. 后继计划
一、 对rnacos单机功能补全
- 配置中心
- 控制台支持导入导出
- 查询配置历史变更记录
- 支持历史记录回滚。
- 支持恢复发布,与 tag配置隔离
- 支持查询服务监听列表
- 注册中心
- 支持服务路由类型的设置
- 支持查询服务监听列表
二、rnacos支持集群部署
- 配置中心数据支持 mysql 存储
- 注册中心支持集群
- 写路由
- 集群间的数据同步
- 其它
- 集群用户认证同步
其它
目前项目已开源到 github, 欢迎共建PR。
希望用使用nacos场景的开发的同学可以试用 rnacos,如果过程中发现问题可以到 github 提Issues。
rnacos——用rust重新实现的nacos开源配置、注册中心服务的更多相关文章
- 阿里注册中心nacos使用整合Dubbo-原创
阿里注册中心nacos是今年开源的框架,一开始以为就是个zk.后面看了图才明白他对标的竟然是consul\eureka,最重要是完美支持dubbo.我想今年开源它也是别有用意 .(目前nacos0.7 ...
- Spring Cloud 系列之 Alibaba Nacos 注册中心(一)
前言 从本章节开始,我们学习 Spring Cloud Alibaba 相关微服务组件. Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 致力于提供微服务开发 ...
- 手动造轮子——为Ocelot集成Nacos注册中心
前言 近期在看博客的时候或者在群里看聊天的时候,发现很多都提到了Ocelot网关的问题.我之前也研究过一点,网关本身是一种通用的解决方案,主要的工作就是拦截请求统一处理,比如认证.授权.熔断. ...
- 微服务实战系列(四)-注册中心springcloud alibaba nacos
1.场景描述 因要用到微服务,关于注册中心这块,与同事在技术原型上做了讨论,初步定的方案是使用:阿里巴巴的nacos+springcloud gateway,下面表格是同事整理的注册中心对比,以前用的 ...
- 学习一下 SpringCloud (二)-- 服务注册中心 Eureka、Zookeeper、Consul、Nacos
(1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...
- 学习一下 SpringCloud (六)-- 注册中心与配置中心 Nacos、网关 Gateway
(1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...
- 注册中心ZooKeeper,Eureka,Consul,Nacos对比
简介 服务注册中心本质上是为了解耦服务提供者和服务消费者.对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的.更进一步,为了支持弹性扩缩容特性,一个微服务的提供者 ...
- SpringBoot项目使用Nacos作为配置中心
前置条件:jdk.SpringBoot项目.Nacos.Linux服务器(可无) 具体版本:jdk11.SpringBoot 2.3.5.RELEASE.Nacos 2.0.3.Centos 6 目标 ...
- 服务注册发现与注册中心对比-Eureka,Consul,Zookeeper,Nacos对比
服务注册发现与注册中心对比-Eureka,Consul,Zookeeper,Nacos对比 注册中心简介 流程和原理 基础流程 核心功能 1.Eureka.Consul.Zookeeper三者异同点 ...
- Spring Cloud Alibaba(4)---Nacos(注册中心)
Nacos(注册中心) 有关Spring Cloud Alibaba之前写过三篇文章. Spring Cloud Alibaba(1)---入门篇 Spring Cloud Alibaba(2)--- ...
随机推荐
- How to Apply WebLogic Server (WLS) Patches Using Smart Update
本文目的: 描述weblogic10.3.6及之前的版本,如何通过Smart Update打补丁 先决条件: You should download and apply the enhanced Sm ...
- 关于proTable设置列固定,始终没有固定的效果的原因
使用proTable设置操作列固定 const columns: ProColumns<IssueItem>[] = [ { title: '操作', valueType: 'option ...
- ImageUtils excel 中 emf 转图片(解决图片上部分显示不全问题)图片转文字
excel 中ActiveX 工具 中的textbox ,以及公式 解析后为emf 图片, emf 转图片(解决图片上部分显示不全问题) 图片转文字 /*********************** ...
- TCP通信聊天服务端和客户端(C/C++语言开发)附完整源码
距离上次学Python写的Python实现简单聊天室已经过去好久了,现在学c++又写了一遍,其实过程差不多,无非是语法的变化,目前仅实现最简单的一对一的通信,然后改就是了,接下来应该是多线程了,话不多 ...
- jdk8 stream部分排序方法
List<类> list; 代表某集合 //返回 对象集合以类属性一升序排序 list.stream().sorted(Comparator.comparing(类::属性一)); ...
- 基于TDesign风格的Blazor企业级UI组件库
作为一名Web开发人员,开发前端少不了使用JavaScript,而Blazor就是微软推出的基于.net平台交互式客户 Web UI 框架,可以使用C#替代JavaScript,减少我们的技术栈.降低 ...
- 使用OpenOffice将office文件转为pdf
0.参考博客:https://blog.csdn.net/weixin_39468112/article/details/89203815 1.首先安装openOffice4.1 2.添加依赖 < ...
- CTF show 信息收集篇
web1 f12查看网页源代码 web2 打开发现无法f12查看源代码 方法1:禁用js 方法2:打开空白网页提前f12查看源代码然后复制url打开 方法3:Ctrl+u查看 web3 burp抓包 ...
- 一文学会Flex布局
参考: <CSS权威指南>(第四版) flex布局教程-语法篇-阮一峰 1.Flex布局是什么 FlexBox,弹性盒布局,顾名思义,就是元素具有弹性,能根据可用空间大小增减尺寸. 2.基 ...
- 基于深度学习的智能PCB板缺陷检测系统(Python+清新界面+数据集)
摘要:智能PCB板缺陷检测系统用于智能检测工业印刷电路板(PCB)常见缺陷,自动化标注.记录和保存缺陷位置和类型,以辅助电路板的质检.本文详细介绍智能PCB板缺陷检测系统,在介绍算法原理的同时,给出P ...