Nacos 2.0 正式发布,性能大幅提升 10 倍!

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: SpringCloud、SCA,还对接了一些云原生的组件比如 coreDNS 和 sentinel 等。客户端语言方面目前支持 Java,go python 等主流

Nacos 项目起源于阿里巴巴内部的五彩石项目,从 2008 年开始,就已经在内部孵化了。近年来受 Eureka、Consul 等项目的影响,Nacos 越来越受欢迎!

目前 Nacos 支持主流微服务开发语言&主流服务框架和配置管理框架,比如支持 Duboo、SpringCloud、SCA,还对接了一些云原生的组件比如 coreDNS 和 sentinel 等。

客户端语言方面目前支持 Java,go python 等主流语言,最近刚发布正式版本的还支持 C# 和 C++。

最近 Nacos 更新动作频频,Nacos 2.X 版本迎来了首秀,在 1.X 的架构基础上 新增了对长连接模型的支持。通信层目前通过 grpc 实现了长连接 RPC 调用和推送能力,使用长链接的好处大幅度减少了 1.x 轮询心跳频繁导致 JVM Full GC。

1.X架构存在的问题

接下来看一下 Nacos1.X 架构所面临的几个比较重要的问题。

一句话总结,心跳多,无效查询多,心跳续约感知变化慢,连接消耗大,资源空耗严重。

image.png

  1. 心跳数量多,导致 TPS 居高不下

通过心跳续约,当服务规模上升时,特别是类似 Dubbo 的接口级服务较多时,心跳及配置元数据的轮询数量众多,导致集群 TPS 很高,系统资源高度空耗。

  1. 通过心跳续约感知服务变化,时延长

心跳续约需要达到超时时间才会移除并通知订阅者,默认为 15 s,时延较长,时效性差。若改短超时时间,当网络抖动时,会频繁触发变更推送,对客户端服务端都有更大损耗。

  1. UDP 推送不可靠,导致 QPS 居高不下

由于 UDP 不可靠,因此客户端测需要每隔一段时间进行对账查询,保证客户端缓存的服务列表的状态正确,当订阅客户端规模上升时,集群 QPS 很高,但大多数服务列表其实不会频繁改变,造成无效查询,从而存在资源空耗。

  1. 基于 HTTP 短连接模型,TIME_WAIT 状态连接过多

HTTP 短连接模型,每次客户端请求都会创建和销毁 TCP 链接,TCP 协议销毁的链接状态是 WAIT_TIME,完全释放还需要一定时间,当 TPS 和 QPS 较高时,服务端和客户端可能有大量的 WAIT_TIME 状态链接,从而会导致 connect time out 错误或者 Cannot assign requested address 的问题。

  1. 配置模块的 30 秒长轮询引起的频繁 GC

配置模块使用 HTTP 短连接阻塞模型来模拟长连接通信,但是由于并非真实的长连接模型,因此每 30 秒需要进行一次请求和数据的上下文切换,每一次切换都有引起造成一次内存浪费,从而导致服务端频繁 GC。

Nacos 2.x 架构的优缺点

前面简要介绍了 Nacos 2.x 的架构和新模型的工作方式,接下来我们分析一下这样的改动有哪些优缺点。

image.gifimage.png

优点

  1. 客户端不再需要定时发送实例心跳,只需要有一个维持连接可用 keepalive 消息即可。重复 TPS 可以大幅降低。
  2. TCP 连接断开可以被快速感知到,提升反应速度。
  3. 长连接的流式推送,比 UDP 更加可靠;nio 的机制具有更高的吞吐量,而且由于可靠推送,可以加长客户端用于对账服务列表的时间,甚至删除相关的请求。重复的无效 QPS 可以大幅降低。
  4. 长连接避免频繁连接开销,可以大幅缓解 TIME_ WAIT 问题。
  5. 真实的长连接,解决配置模块 GC 问题。
  6. 更细粒度的同步内容,减少服务节点间的通信压力。

缺点

没有银弹的方案,新架构也会引入一些新问题

  1. 内部结构复杂度上升,管理连接状态,连接的负载均衡需要管理。
  2. 数据由原来的无状态,变为与连接绑定的有状态数据,流程链路更长。
  3. RPC 协议的观测性不如 HTTP。即使 gRPC 基于 HTTP2.0 Stream 实现,仍然不如直接使用 HTTP 协议来的直观。

性能提升

Nacos 2.x 服务发现性能测试都是针对重点功能,通过对 3 节点规模集群进行压测,可以看到接口性能负载和容量,以及对比相同/类似场景下 Nacos1.X 版本的提升。

  • 压测时服务及实例容量达到百万级,集群运行持续稳定,达到预期;(该场景没有计算频繁变更导致的频繁推送内容,仅单纯计算容量上线,附带推送的真实场景将在下轮压测报告中给出)
  • 注册/注销实例 TPS 达到 26000 以上,总体较 Nacos1.X 提升至少 2 倍,接口达到预期;
  • 查询实例 TPS 能够达到 30000 以上,总体较 Nacos1.X 提升 3 倍左右,接口达到预期;

兼容性

配置中心

  • 完全兼容 1.X 客户端所有 API 接口方法
  • 完全实现 2.X 客户端所有 API 接口方法
  • 完全兼容所有配置中心相关 openAPI

服务发现

由于服务发现的数据模型发生了比较重大的改变,因此以下功能暂时未支持。

  • 查看当前集群 leader(将废弃)
  • 批量更新实例元数据(Beta,不支持)
  • 批量删除实例元数据(Beta,不支持)

控制台

  • 完全兼容配置中心相关页面及功能
  • 完全兼容权限控制相关页面及功能
  • 完全兼容命名空间相关页面及功能
  • 完全兼容集群管理相关页面及功能
  • 完全兼容服务发现相关页面及功能

Spring Cloud Alibaba 适配

由于目前 Spring cloud alibaba 2.2.5 版本内置的 nacos-client 为 1.4.1,可通过指定 nacos-client 方式,提前使用 Nacos2.0 长连接功能。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.5.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.5.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>2.0.0</version>
</dependency>

最后,期待大家抢先体验,帮助发现修复 bug,改善社区,贡献智慧,参与 Nacos 开源社区建设!Nacos 项目起源于阿里巴巴内部的五彩石项目,从 2008 年开始,就已经在内部孵化了。近年来受 Eureka、Consul 等项目的影响,Nacos 越来越受欢迎!

目前 Nacos 支持主流微服务开发语言&主流服务框架和配置管理框架,比如支持 Duboo、SpringCloud、SCA,还对接了一些云原生的组件比如 coreDNS 和 sentinel 等。

客户端语言方面目前支持 Java,go python 等主流语言,最近刚发布正式版本的还支持 C# 和 C++。

最近 Nacos 更新动作频频,Nacos 2.X 版本迎来了首秀,在 1.X 的架构基础上 新增了对长连接模型的支持。通信层目前通过 grpc 实现了长连接 RPC 调用和推送能力,使用长链接的好处大幅度减少了 1.x 轮询心跳频繁导致 JVM Full GC。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
域名解析 Cloud Native Java
重磅官宣:Nacos2.0 发布,性能提升 10 倍
继 Nacos 1.0 发布以来,Nacos 迅速被成千上万家企业采用,并构建起强大的生态。但是随着用户深入使用,逐渐暴露一些性能问题,因此我们启动了 Nacos 2.0 的隔代产品设计,时隔半年我们终于将其全部实现,实测性能提升 10 倍,相信能满足所有用户的性能需求。下面由我代表社区为大家介绍一下这款跨代产品。
重磅官宣:Nacos2.0 发布,性能提升 10 倍
|
5月前
|
存储 监控 负载均衡
如何优化Nacos性能?
【6月更文挑战第29天】如何优化Nacos性能?
271 2
|
监控 安全 Cloud Native
Nacos 企业版如何提升读写性能和可观测性
微服务引擎 MSE 发布 2.0.4.0 版本,新版本主要在性能和可观测能力升大幅提升,也加固了安全性。性能方面,基于 Dragonwell 进行构建,服务发现和配置性能提升达 40%以上;可观测方面,提供了服务注册的轨迹推送能力及丰富的可观测指标;安全性方面,新增支持了 RAM 管控策略能力,进一步提高了安全性。
1007 0
Nacos 企业版如何提升读写性能和可观测性
|
Cloud Native Dubbo Java
Nacos 企业版如何提升读写性能和可观测性
微服务引擎MSE面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持Nacos/ZooKeeper/Eureka)、云原生网关(原生支持Ingress/Envoy)、微服务治理(原生支持Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。
Nacos 企业版如何提升读写性能和可观测性
|
Java 测试技术 API
Nacos2.0.0 Release正式发布,性能提升10倍
Nacos2.0.0 Release正式发布,性能提升10倍
510 0
Nacos2.0.0 Release正式发布,性能提升10倍
|
域名解析 Cloud Native 应用服务中间件
重磅官宣:Nacos2.0发布,性能提升10倍
​Nacos2.0 作为一个跨代版本,彻底解决了 Nacos1.X 的性能问题,将性能提升了 10 倍。
11849 7
|
存储 监控 Dubbo
Nacos 2.0 升级前后性能对比压测
Nacos 2.0 通过升级通信协议和框架、数据模型的方式将性能提升了约 10 倍,解决继 Nacos 1.0 发布逐步暴露的性能问题。本文通过压测 Nacos 1.0,Nacos 1.0 升级 Nacos 2.0 过程中,Nacos 2.0 进行全面性能对比,直观的展示 Nacos 2.0 所带来的性能提升。
Nacos 2.0 升级前后性能对比压测
|
负载均衡 Cloud Native Java
Nacos 2.0 正式发布,性能提升 10 倍!!
通俗点讲,Nacos 就是一把微服务双刃剑:注册中心 + 配置中心,由阿里巴巴于 2018 年开源。
Nacos 2.0 正式发布,性能提升 10 倍!!
|
自然语言处理 Cloud Native Dubbo
Nacos 2.0 性能提升十倍,贡献者 80% 以上来自阿里之外
3 月 20 日,Nacos 2.0 正式发布。Nacos 是阿里巴巴在 2018 年开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,也可以理解为微服务的注册中心 + 配置中心。
Nacos 2.0 性能提升十倍,贡献者 80% 以上来自阿里之外
|
14天前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
44 1
Nacos配置中心