rnacos——用rust重新实现的nacos开源配置、注册中心服务

这篇具有很好参考价值的文章主要介绍了rnacos——用rust重新实现的nacos开源配置、注册中心服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 简介

rnacos 是一个用rust实现的nacos服务。

rnacos是一个轻量、快速、稳定的服务,包含注册中心、配置中心、web管理控制台功能。
rnacos兼容nacos client sdk用到的协议,支持使用nacos服务的应用平迁到 rnacos。

注:
nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它的功能实用,在微服务架构中有较广泛的应用。

rnacos架构图

rnacos——用rust重新实现的nacos开源配置、注册中心服务

2. 为什么用rust重新实现nacos ?

nacos是由 java 实现,对轻度使用用户来说占用资源较重。

  1. 依赖 jdk,对非 java应用来说要多依赖一个 jdk;
  2. 应用比较大,最新应用压缩包142M, docker压缩包577M
  3. 启动慢,启动后要10秒左右才可用
  4. 运行时占用资源比较大,启动后线程数270左右,初始内存531M左右。
  5. 200qps左右流量时,单核cpu利用率就有17%左右。

本人开发应用有用到 nacos,个人云服务部署一个nacos太重,本地开发测试开nacos也比较重。有使用更轻量服务的需求。

另一方面自己学习 rust 后,想写个中间件实践rust网络并发编程。

本人能读java源码又能写rust,分析确认开发可行性后,决定先写一个最小功能集给自己用。

rnacos由此而开发出来。

目前rnacos的资源占用情况

  1. rnacos 打包成原生应用,不依赖其它组件,支持多平台。
  2. 应用大小11M左右, 压缩包不到5M,docker 压缩包9.4M
  3. 秒启动,启动1秒内应用控制台、接口可用。
  4. 运行时占用资源很小。启动后线程数量在10左右,这个数量是固定的,后继不什变化;初始内存2M,一万个服务实例时,内存也在20M以内;
  5. 每秒200qps流量时,单核cpu: 4.5% 左右。

具体性能可以看后面的压测对比数据

3. 适用场景

  1. 开发测试环境使用nacos,nacos服务可以换成rnacos。启动更快,秒启动。
  2. 个人资源云服务部署的 nacos,可以考虑换成rnacos。资源占用率低: 包10M 左右,不依赖 JDK;运行时 cpu 小于0.5% ,小于5M(具体和实例有关)。
  3. 其它非集群部署的 nacos ,理论上都支持迁移到 rnacos。
  4. 目前 rnacos 只支持单机部署,其支持容量在一万个服务实例以上。在一万服务实例场景下压测,qps 可以稳定在1.2万左右,内存稳定在50 M以下,cpu稳定在30%左右(和压测环境有关)。

4. 快速开始

一、 安装运行 rnacos

方式1:从 github release gitee release 下载对应系统的应用包,解压后即可运行。

linux 或 mac

# 解压
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 --release

推荐使用第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 的用户指南。

JAVA-SDK

其它语言

open-api

三、控制台管理

启动服务后可以在浏览器通过 http://127.0.0.1:8848/ 访问rnacos控制台。

主要包含命名空间管理、配置管理、服务管理、服务实例管理。

1、配置管理

配置列表管理

rnacos——用rust重新实现的nacos开源配置、注册中心服务

新建、编辑配置

rnacos——用rust重新实现的nacos开源配置、注册中心服务

2、服务列表管理

rnacos——用rust重新实现的nacos开源配置、注册中心服务

3、服务实例管理

rnacos——用rust重新实现的nacos开源配置、注册中心服务

5. rnacos对比nacos的功能说明

这里把 nacos 服务的功能分为三块
1、面向 SDK 的功能
2、面向控制台的功能
3、面向部署、集群的功能

每一块做一个对nacos服务的对比说明。

一、面向 SDK 的功能

访问认证:

  1. 有提供获取认证token的接口
  2. 实际请求暂不启用认证,都算认证通过

配置中心:

  1. 支持配置中心的基础功能、支持维护配置历史记录
  2. 兼容配置中心的SDK协议
  3. 暂不支持灰度发布、暂不支持tag隔离

注册中心:

  1. 支持注册中心的基础功能
  2. 兼容配置中心的SDK协议
  3. 暂不支持1.x的 udp 实例变更实时通知,只支持 2.x 版本grpc实例变更实时通知 。最开始的版本也有支持过udp实例变更通知,后面因支持 grpc 的两者不统一,就暂时去掉,后继可以考虑加回去。

二、面向控制台的功能

访问认证:
暂时不开启认证

配置中心:

  1. 暂不支持配置的导入、导出,后继计划支持导入、导出,其格式兼容 nacos 的导出格式
  2. 暂不支持tag 的高级查询
  3. 暂不支持配置历史记录查看与恢复
  4. 暂不支持查询配置监听记录

服务中心:

  1. 暂不支持路由类型的设置
  2. 暂不支持查询监听记录

三、面向部署、集群的功能

  1. 目前只支持单机部署,后继考虑支持集群部署。
  2. 配置中心的数据存放在本地 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:

  1. 配置中心单机查询 wrk 压测 qps 在2.4万左右.

java nacos server:

  1. 配置中心单机查询 wrk 压测, qps 在7700左右

3. 注册中心

rust rnacos server:

  1. naming 注册1000 x 1个实例,每秒200qps,单核cpu: 4.5% 左右
  2. naming 单查询1.5万 QPS 左右
    1. wrk 查询单个服务 ,1.65万 qps
    2. goose 查询1000个服务 ,1.5万 qps
  3. naming 单注册服务
    1. goose,5万到7万实例数 0.7万 qps左右。
  4. 查询与注册混合
    1. wrk 查询单个服务(1.5万 qps) + goose 注册(0.075 万qps) 【5千实例】
    2. goose 查询1000个服务(1.3万 qps) + goose 注册(0.07万 qps) 【5千实例】
    3. wrk 查询单个服务(1.5万 qps) + goose 注册(0.15万qps) 【1万实例】
    4. goose 查询1000个服务(1.3万 qps) + goose 注册(0.13万 qps) 【1万实例】

java nacos server:

  1. naming 注册1000 x 1个实例,每秒200qps,单核cpu: 17% 左右
  2. naming 单查询
    1. wrk 查询单个服务 ,1.35万 qps 。
    2. goose 查询1000个服务,1万 qps(前期应该还能上去一些)。前30秒能稳定在1万左右,30秒后,跌到200左右之后再上下浮动,可能受 GC 影响。
  3. naming 单注册
    1. goose,5万到7万实例数 0.45万 qps左右。
  4. 查询与注册混合
    1. wrk 查询单个服务(1.3万 qps) + goose 注册(0.07 万qps) 【5千实例】
    2. goose 查询1000个服务(1万 qps) + goose 注册(0.07万 qps) 【5千实例】; 前期能保持,后期 qps 上下浮动比较大,最低小于50。
    3. wrk 查询单个服务(0.9万 qps) + goose 注册(0.12万qps) 【1万实例】
    4. goose 查询1000个服务(0.6万 qps) + goose 注册(0.08万 qps) 【1万实例】

4. 性能压测总结

  1. rnacos,除了服务服务注册不能稳定在1万以上,其它的接口qps都能稳定在1万以上。
  2. java 的查询接口基本能压到1万以上,但不平稳,后继浮动比较大。如果降低压测流程,qps 可以相对平稳。
  3. 在多服务查询叠加上多服务注册场景,rnacos qps能稳定在1.3万左右, java nacos qps 下降明显在0.6万左右。
  4. rnacos 综合 qps是 java版的2倍以上,因 java 有 GC,qps水位稳定性上 java较差(相同施压流量,qps 能从峰值1万能降到1百以下)。
  5. rnacos 服务,线程数稳定在7,cpu 用例率最大200%左右(相当用个2核),内存在50M 以下
  6. java nacos 服务,线程数最大300左右, cpu 用例率最大500%左右,内存600M到900M。

7. 后继计划

一、 对rnacos单机功能补全

  1. 配置中心
    1. 控制台支持导入导出
    2. 查询配置历史变更记录
    3. 支持历史记录回滚。
    4. 支持恢复发布,与 tag配置隔离
    5. 支持查询服务监听列表
  2. 注册中心
    1. 支持服务路由类型的设置
    2. 支持查询服务监听列表

二、rnacos支持集群部署

  1. 配置中心数据支持 mysql 存储
  2. 注册中心支持集群
    1. 写路由
    2. 集群间的数据同步
  3. 其它
    1. 集群用户认证同步

邀请共建与使用

目前项目已开源到 github gitee, 欢迎共建PR。

希望用使用nacos场景的开发的同学可以试用 rnacos,如果过程中发现问题可以到 github 提Issues。

如果对你有帮助就给个star鼓励鼓励

20230512补充 rnacos 版本更新为 v0.1.4

发布 rnacos 后,有收到部分对2.0版本兼容问题的反馈。

主要是nacos2.0版本的注册心跳与1.0不同,rnacos之前没对2.0版本的注册实例心跳机制做兼容。

发现问题后快速更新一个版本,以保证rnacos 功能上达到可用条件。文章来源地址https://www.toymoban.com/news/detail-436231.html

v0.1.4版本更新内容

  1. 修复2.0版本注册心跳的问题,注册中心支持grpc统一维持心跳。
  2. 配置中心支持导入配置文件,配置文件兼容 nacos 格式。(导出计划后继版本支持)

到了这里,关于rnacos——用rust重新实现的nacos开源配置、注册中心服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微服务】Nacos注册中心(3):配置管理

    给微服务配置namespace 给微服务配置namespace只能通过修改配置来实现。 重启order-service后,访问控制台,可以看到下面的结果 此时访问order-service,因为namespace不同,会导致找不到userservice,控制台会报错 Nacos的服务实例分为两种l类型: 临时实例:如果实例宕机超过一定时间,

    2024年02月05日
    浏览(49)
  • 注册中心/配置管理 —— SpringCloud Alibaba Nacos

    Nacos 是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生的应用程序 Nacos 的关键特性包括以下几项: 服务发现和服务健康监测:服务提供者使用原生 SDK、OpenAPI 等注册服务后,服务消费者可以使用 HTTPAPI 查找和发现服务。Nacos 提供对服务的实时健康检查

    2024年02月14日
    浏览(62)
  • Spring Cloud Gateway集成Nacos作为注册中心和配置中心

    本篇文章将介绍Spring Cloud Alibaba体系下Spring Cloud Gateway的搭建,服务注册中心和分布式配置中心使用Nacos,后续将会持续更新,介绍集成Sentinel,如何做日志链路追踪,如何做全链路灰度发布设计,以及Spring Cloud Gateway的扩展等。 ​ Spring Boot,Spring Cloud,Discovery,Config等基础依

    2024年02月11日
    浏览(113)
  • SpringCloud(17~21章):Alibaba入门简介、Nacos服务注册和配置中心、Sentinel实现熔断与限流、Seata处理分布式事务

    Spring Cloud Netflix项目进入维护模式 https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-now 说明 Spring Cloud Netflix Projects Entering Maintenance Mode 什么是维护模式 将模块置于维护模式,意味着 Spring Cloud 团队将不会再向模块添加新功能。我们将修复 block 级别的 bug 以及安全问题,我

    2024年01月19日
    浏览(61)
  • 基于Dubbo和Nacos搭建微服务的配置中心和服务注册中心

    1.添加nacos依赖 2.配置application.properties PS:nacos2.0除了需要8848的端口之外,还新增了端口+1000的新端口用于客户端和服务端GRPC通信的端口,所以如果是自己部署的nacos需要放开这俩个端口,服务才可以启动成功。 3.配置类 3.1 添加Spring Cloud原生注解 @EnableDiscoveryClient 3.2 客户端服

    2024年02月16日
    浏览(58)
  • SpringCloud + Gateway(网关) + Nacos(注册中心+配置中心)+ Dubbo(内部服务调用)

    Apache Dubbo是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力 1、协议支持方面 Feign更加优雅简单。Feign是通过REST API实现的远程调用,基于Http传输协议,服务提供者需要对外暴露Http接口供消费者调用,服务粒度是http接口级的。通过短连接的方式进行通信,

    2024年02月06日
    浏览(226)
  • springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析

    Spring Cloud 是一系列框架的有序集合如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等。 SpringCloud 将多个服务框架组合起来,通过Spring Boot进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者提供了一套简单易懂、易部署和易维护的分布式系统开

    2024年02月08日
    浏览(67)
  • nacos2.1.1版本,作为注册中心,配置中心如何使用,nacos服务端启动,微服务搭建,nacos集群化部署

    关于nacos 相信大多数人一样,在接触微服务的时候知道有Netflix系列和alibaba系列 但是Netflix这一套如今由于部分组件不在开源,又有alibaba这一套的出现,市面上,alibaba系列微服务架构已经是最火热的了,而nacos则是alibaba系列组件充当服务注册发现和配置中心的角色 说白了,就是将每个

    2024年02月03日
    浏览(49)
  • Spring Cloud Alibaba--Nacos服务注册和配置中心

    Nacos 是Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos的特性,官网解释如下: 服务发现和服务健康监测 Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Age

    2024年02月05日
    浏览(62)
  • Spring Cloud Alibaba Nacos(服务注册及配置中心)

    Nacos是由阿里巴巴提供的一款专门构建云本地应用的 动态服务发现、配置中心和服务管理平台 。 在Spring Cloud Alibaba中常使用Nacos作为注册中心和分布式配置中心。  (1)服务发现和管理 动态服务发现是以服务为中心(例如微服务或云原生)体系结构的关键。Nacos支持基于DN

    2024年02月16日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包