【On Nacos】聊聊 Nacos

简介: Nacos 在阿里巴巴起源于 2008 年五彩石项目,该项目完成了微服务拆分和业务中台建设,随着云计算和开源环境的兴起,2018 年,将 Nacos 开源,输出阿里十年关于服务发现和配管管理的沉淀,推动微服务行业发展,加速企业数字化转型。

Nacos 是什么

Nacos 在阿里巴巴起源于 2008 年五彩石项目,该项目完成了微服务拆分和业务中台建设,随着云计算和开源环境的兴起,2018 年,将 Nacos 开源,输出阿里十年关于服务发现和配管管理的沉淀,推动微服务行业发展,加速企业数字化转型。

Nacos 是集配置中心和服务注册与发现于一身的微服务基础设施。致力于解决微服务架构中的配置中心、服务注册与发现等问题,它提供了一套简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据、流量管理及统一配置。

现在服务注册发现的技术已经非常成熟,配置中心和服务注册与发现的一站式解决方案貌似也成为了行业的主流,包括比较成熟的 etcd、consul 等也都是即可以当做配置心中使用,又可以当做服务注册与发现使用。

特性

  • 易于使用

    • 动态配置管理、服务注册与发现的一站式解决方案
    • 20多种开箱即用的以服务为中心的架构特性
    • 基本符合生产要求的轻量级易用控制台
  • 更适应云架构

    • 无缝支持Kubernetes和Spring Cloud
    • 在主流公共云上更容易部署和运行(例如阿里云和AWS)
    • 多租户和多环境支持
  • 生产等级

    • 脱胎于历经阿里巴巴10年生产验证的内部产品
    • 支持具有数百万服务的大规模场景
    • 具备企业级SLA的开源产品
  • 丰富的应用场景

    • 支持限流、大促销预案和异地多活
    • 直接支持或稍作扩展即可支持大量有用的互联网应用场景
    • 流量调度和服务治理

配置中心

Nacos 配置中心可以通过 client SDK 或 控制台来发布配置,将配置的信息交由 Nacos 来保存。可以为用户提供外部化配置文件、动态修改、即时生效。解决因配置变更要重启服务带来的风险与困扰。Nacos 的配置中心包含以下特性:

  • 提供对配置信息的生命周期管理,增删改查。
  • 支持多种格式的配置信息配置,例如:text、json、xml、yaml、html、properties。
  • 支持配置版本管理,可以进行版本恢复。
  • 支持配置灰度功能,可以针对指定 ip 进行灰度测试。
  • 支持配置监听,变更实时推送。

服务注册与发现

Nacos 服务注册与发现基于内存进行服务实例信息及元数据的声明周期管理,服务在启动的时候将服务实例注册到 Nacos 中,并在关闭的时候注销服务实例。Nacos 的服务注册与发现包含一下特性:

  • 支持对服务信息及元数据的生命周期管理,增删改查。
  • 支持负载均衡策略。
  • 支持对服务实例的健康状态检查、服务权重管理。

Nacos 架构

下面的架构图是 Nacos 2.x 的架构图,在 1.x 的基础上增加了 gRPC、Rsocket 实现了长链接和 RPC 调用和推送能力。解决 1.x 下的 http 短连接模型的性能问题。

接入层:Nacos 提供了 client SDK 和 OpenAPI 来提供和 Nacos 交互的能力。

协议层:目前支持 gRPC、Rsocket、HTTP、UDP 协议。

链接层:主要负责处理请求、流量控制、负载均衡等操作。

功能层:面有服务注册与发现、配置管理。这块就是的核心业务层。

数据一致性层:Nacos 提供了两种协议。分别是 AP 模式的 Distro 和 CP 模式的 Raft。

  • Distro:非持久化服务的同步模式。
  • Raft:持久化服务的同步模式、以及使用 Derby 作为配置的存储时同步配置操作。

持久化层:Nacos 使用 MySQL 、Derby 和 本地文件来做持久化。配置信息、用户信息、权限等存储在 MySQL 和 Derby 中。服务实例以及服务元数据等信息存储在内存和本地文件中。

https://tva1.sinaimg.cn/large/e6c9d24ely1h2341s74hrj21h40u0grn.jpg

Nacos 解决了什么问题

从分布式系统的角度来看,Nacos主要解决了两个问题,统一配置管理,变更即时生效的问题、分布式服务实例列表管理问题。

如果只有一台计算机,那么程序运行要么是成功的,要么是失败的。服务采用的是单体架构,所有的服务、配置都是在一台计算机上。这种架构的缺点就是:

  • 复杂性高
  • 容易积累技术债务
  • 开发部署效率低
  • 扩展能力受限
  • 阻断技术创新

如果有台计算机,可能是成百上千台。这个时候每个服务分别部署在不同的计算机上,这个时候就要考虑计算机与计算机之间怎么通信?采用什么通信协议。要考虑多台计算机访问一台计算机的并发问题。计算机 A 调用计算机 B,计算机 B 出错了,怎么保证计算机 A 不受影响,或者降低影响。这里就要考虑计算机A的容错性问题。例如单体架构向微服务架构的转变。

构建一个分布式系统是很难的,需要考虑非常多的问题。而为了解决这些问题产生了很多技术,有传输层面的、存储层面的、计算层面的等等。不过分布式也带来了很多优点:

  • 降低系统之间的耦合度
  • 增加了可扩展性
  • 开发部署更灵活、更方便
  • 提高代码的复用性

统一配置管理问题

在单体架构的时候我们可以将配置写在配置文件中,但有一个缺点就是每次修改配置都需要重启服 务才能生效。
当应用程序实例比较少的时候还可以维护。如果转向微服务架构有成百上千个实例,每修改一次配 置要将全部实例重启,不仅增加了系统的不稳定性,也提高了维护的成本。

https://tva1.sinaimg.cn/large/e6c9d24ely1h2340ckdsjj218a0rqdh7.jpg

那么如何能够做到服务不重启就可以修改配置?所有就产生了四个基础诉求:

  • 需要支持动态修改配置
  • 需要变更实时推送
  • 变更后的风险控制,如版本管理、灰度、权限控制等
  • 敏感信息的安全配置

Nacos 配置中心分为服务端、客户端、控制台三部分,用户可以通过客户端和控制台进行配置的发布,将配置放到 Nacos服务端进行统一的管理。也可以通过客户端进行配置的监听,当在控制台修改配置时,客户端会实时监听到并做出响应。这样就解决了微服务架构中的配置多、配置难、配置变更等问题。

https://tva1.sinaimg.cn/large/e6c9d24ely1h23431pvtuj216d0u0q4i.jpg

分布式服务列表管理问题

当我们谈论起服务的实例管理,总要提到注册中心。那么什么是注册中心?注册中心总共有三种角色:

  • 服务提供者
  • 服务消费者
  • 注册中心

注册中心提供服务注册、注销能力。可以让服务提供者将自身或其他服务注册上来,由注册中心进行服务信息的维护,包括服务探活能力、路由功能等。服务提供者可以通过注册中心获取到自身或其他服务的服务信息。

比如有两个服务,服务 A、服务 B,当服务B的服务实例比较少的时候,那么在服务 A 调用服务 B 的时候,我们可以直接在服务 A 中写死 服务 B 的 ip+port。这种方式在服务实例比较少的情况下还能够管理,当服务实例数多了以后,这种方式就没有办法管理了。还要考虑众多 ip 之间的负载、路由问题,当其中的 ip 不可用了,怎么做生命周期管理等。

https://tva1.sinaimg.cn/large/e6c9d24ely1h231u4rtw7j20og0drjri.jpg

Nacos 通过自身的注册中心能力解决了服务实例列表管理的问题,提供了如高可用、高性能、水平扩展能力、服务探活能力、路由功能等。

提供了 Springboot、springcloud 项目的接入方式,在服务启动的时候自动将服务实例注册到 Nacos 注册中心,由 Nacos 来管理服务实例,进行服务探活。

https://tva1.sinaimg.cn/large/e6c9d24ely1h2327zegdrj20pb0i2dg9.jpg

Nacos 生态

多语言

Nacos 支持 Java、go、nodejs、c#、c++、python 等多种语言的接入。

https://tva1.sinaimg.cn/large/e6c9d24ely1h233yx9613j21rh0u0788.jpg

Spring 生态

Nacos 无缝支持 Spring 全栈,包括 Spring Cloud、Spring Boot、Spring Framework。

https://tva1.sinaimg.cn/large/e6c9d24ely1h233xs5dzaj21du0qudjy.jpg

Docker & Kubernetes 生态

nacos-docker 和 nacos-k8s 是 Nacos 开发团队为支持用户容器化衍生的项目。其本质是为了帮助用户方便快捷的通过官方镜像在 Docker 或者 Kubernetes 进行部署。

Service Mesh 生态

Nacos 目前支持 MCP、XDS 两种协议,Istio 可以通过 MCP 协议从 Naocs 获取全量的服务信息列表,在转化成 XDS 协议下发到 envoy。这样就支持了 mesh 化应用内的服务发现。

MCP 协议是 Istio 社区提出的组件之间配置同步协议,这个协议在 1.8 之后就废弃了,替代方案是 MCP over XDS 协议,Nacos 两个协议都兼容。

Nacos 工具

nacos-sync

nacos-sync 是一个支持多种注册中心的同步组件,基于 Spring boot 开发框架,数据层采用 Spring Data JPA ,遵循了标准的 JPA 访问规范,支持多种数据源存储,默认使用 Hibernate 实现。

nacos-ctl

nacos-ctl 是用 Java 开发的命令行工具,包含对命名空间、配置命令、服务命令、实例命令等。

nacosctl

nacosctl 这个项目是我使用 go 语言进行开发的一个命令行工具,纯属造轮子😄。基于 Nacos OpenApi 封装的命令行工具。提供一些对配置、服务注册与发现、命名空间等命令操作 。借助 go 语言的跨平台交叉编译,将编译好的二进制文件直接放到指定系统下就可以直接运行, 无需环境部署。

如果大家想要了解更多的 Nacos 教程,欢迎 star 《On Nacos》开源项目。基于 Nacos 2.x 的入门、原理、源码、实战介绍,帮助开发者快速上手 Nacos。
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
SQL 机器学习/深度学习 分布式计算
大数据-81 Spark 安装配置环境 集群环境配置 超详细 三台云服务器
大数据-81 Spark 安装配置环境 集群环境配置 超详细 三台云服务器
696 1
|
监控 持续交付 调度
Nacos支持哪些应用场景
Nacos支持哪些应用场景
|
域名解析 Cloud Native 应用服务中间件
重磅官宣:Nacos2.0发布,性能提升10倍
​Nacos2.0 作为一个跨代版本,彻底解决了 Nacos1.X 的性能问题,将性能提升了 10 倍。
12206 89
|
存储 Prometheus 监控
监控堆外内存使用情况
监控堆外内存使用情况
645 4
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
25876 7
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
XML 前端开发 Java
Spring Boot中怎么使用BPMN
在Spring Boot中集成BPMN工作流,如Camunda,能实现业务流程自动化。以请假流程为例,步骤包括:创建Spring Boot项目并添加Camunda依赖;使用Camunda Modeler设计请假流程,涵盖提交申请、经理审批、HR记录及流程完成阶段;保存BPMN文件至`src/main/resources`目录,以便Camunda自动部署;实现流程逻辑,如通过REST API启动流程实例,并传递请假请求数据。整个过程展示了BPMN流程从设计到部署的完整周期,使业务流程自动化变得高效且直接。 **注意:**摘要已压缩至240字符内,部分内容被省略。
1015 2
Spring Boot中怎么使用BPMN
|
关系型数据库 MySQL 数据库
在 MySQL 中使用 Alter Table
【8月更文挑战第11天】
1929 0
在 MySQL 中使用 Alter Table
|
SQL 安全 网络安全
网络安全的守护之盾:漏洞防护与加密技术解析
【8月更文挑战第31天】 在数字化时代的浪潮中,网络安全已成为保障信息资产安全的基石。本文将深入探讨网络安全中的漏洞防御策略、加密技术的运用,以及提升个人和企业安全意识的重要性。通过具体案例分析,揭示网络攻击的常见手段和防范措施,同时提供实用的代码示例,旨在为读者构建一道坚固的网络安全防线。
|
JavaScript API 索引
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
441 0
|
安全 Linux 测试技术
Linux命令setpriv详解
`setpriv` 是Linux下的命令行工具,用于调整进程权限以增强安全性,尤其适用于自动化和非交互式权限切换。它不使用PAM,支持管理能力集、GID/UID及SELinux上下文。例如,`setpriv --reuid=1000 script.sh` 可以以低权限用户运行脚本,而`--selinux-label`可设定SELinux标签。在使用时,应最小化权限、充分测试、保持与其他安全机制的兼容性,并定期审核权限设置。