Nacos

Nacos是一个开源的分布式服务发现和配置管理平台。它提供了服务注册、发现、配置,管理,命名空间和分组、高可用和负载均衡、安全认证等功能。帮助开发者构建微服务架构。
官网:https://nacos.io/

一.Nacos的基本概念

1. 服务注册与发现

Nacos可以作为服务注册中心,服务提供者在启动时将自己的信息注册到Nacos中心。服务消费者可以通过查询Nacos中心获取可用的服务列表,并选择其中的一个服务进行调用。Nacos提供了REST API和Java SDK来实现服务注册与发现的功能。

REST API:

REST API 是一种通过 HTTP 协议进行通信的接口,它允许开发者使用 HTTP 请求(GET、POST、PUT、DELETE 等)来访问和操作 Nacos 的功能。
功能范围: REST API 提供了对 Nacos 的各种操作接口,包括服务注册、服务发现、配置管理等。
使用方式: 开发者可以通过发送 HTTP 请求到 Nacos 的特定 URL 地址来实现所需的功能。比如,注册服务实例可以通过 POST 请求发送服务信息到指定的注册接口,查询服务实例可以通过 GET 请求获取服务列表等。
Java SDK:

Java SDK 是针对 Java 开发者提供的软件开发工具包,它封装了对 Nacos 的 REST API

的调用,并提供了更加便捷和高级的功能接口。
功能封装: Java SDK 将 REST API 的调用封装成了 Java 类和方法,提供了更加面向对象的方式来操作 Nacos。
简化开发: 使用 Java SDK 可以减少开发者对 HTTP 请求和响应的处理,直接调用 SDK 中的方法即可完成相应的功能,如服务注册、服务发现等。
集成支持: Java SDK 通常会处理和管理与 Nacos 服务器的连接,包括连接的创建、维护和错误处理,简化了开发者的工作。
REST API 和 Java SDK区别:

是两种用于与 Nacos 进行交互的不同方式
REST API 使用场景: 适合于需要直接使用 HTTP 请求进行交互的情况,或者在非 Java 开发环境下使用 Nacos 的场景。
Java SDK 使用场景: 适合于 Java 开发者,在 Java 应用程序中直接引入 SDK,并通过 SDK 提供的方法调用 Nacos 的功能,以更高效和便捷地管理服务注册、发现和配置。

综上所述,REST API 和 Java SDK 是 Nacos 提供的两种不同的接口,用于实现与 Nacos 的交互和功能操作,开发者可以根据具体需求选择合适的方式进行集成和开发。

2. 配置管理

Nacos可以作为配置中心,将应用的配置信息统一管理起来。应用启动时,可以从Nacos中心获取最新的配置信息。Nacos支持多种类型的配置数据,包括文本、XML、JSON等。Nacos还提供了配置的动态刷新功能,当配置发生变化时,应用可以实时获取到最新的配置信息。

3. 命名空间和分组

Nacos支持多个命名空间和分组的配置。命名空间可以用于隔离不同环境(如开发、测试、生产)的配置,分组可以用于隔离不同应用的配置。通过命名空间和分组,可以实现配置的细粒度管理。

4. 高可用和负载均衡

Nacos支持集群部署,可以实现高可用和负载均衡。Nacos的集群部署方式有多种,可以根据实际需求选择合适的部署方式。

集群部署:

集群部署是指将多台服务器(节点)联合起来,共同承担系统服务的运行和负载。在 Nacos 的情境下,集群部署指的是将多个 Nacos 服务器实例连接在一起,形成一个逻辑上的整体,共同提供服务注册、发现、配置管理等功能。

在 Nacos 中,集群部署通常会采用主从复制或者一致性哈希等技术来管理数据的一致性和同步,确保集群中的每个节点都能够获取到最新的服务实例信息和配置数据。无论是服务注册、服务发现,还是配置管理,都能够在整个集群中实现统一和一致的状态。
集群部署好处:
高可用性: 集群部署可以提升系统的可用性和稳定性。即使某一台服务器出现故障,整个系统仍然可以继续运行,不影响服务的正常使用。
负载均衡: 集群可以将请求分发到不同的服务器节点上,以平衡每台服务器的负载,提高系统整体的性能和响应速度。
扩展性: 当系统的负载增加时,可以向集群中添加更多的服务器节点,以扩展系统的处理能力,而无需对现有系统进行大规模的改动或停机。
容错性: 集群部署可以通过复制数据和备份节点来提高系统的容错能力,确保数据不会因为单点故障而丢失。

5. 安全认证

Nacos支持基于角色的访问控制和安全认证。可以通过配置文件或者API进行安全认证的配置,保证只有授权的用户才能访问Nacos的功能。

6. 服务治理:

通过nacos实现服务的健康检查,故障转移,服务限流,熔断降级等治理能力,从而提高服务的可靠性和稳定性。

7. 事件监听和推送:

通过nacos实现配置变更,服务注册和注销等事件的监听和推送,从而实现应用程序的自动化部署和管理。

二. Nacos支持AP和CP两种模式

nacos默认情况下是AP模式,通过修改配置文件来切换AP或CP。

AP模式(可用性与分区容忍性):

保证高可用性和可伸缩性,但是不保证一致性。

在线游戏,普通网站场景使用;Nocos会优先保证服务的可用性,发生网络分区或故障时,会在保证可用性前提下尽可能保持数据的一致性。

CP模式(一致性与分区容忍性):

保证了强一致性,但是可能降低可用性可可伸缩性。

金融,支付场景使用;发生网络分区或故障时,为了保证数据一致性,Nacos会对服务进行自动隔离和回复,但是这会导致部分服务不可用。

三. Nacos如何在分布式系统中保证配置变化的实时性和可感知性

Nacos 能够在分布式系统中保证配置变化的实时性和可感知性,从而帮助客户端及时响应配置的变更,保证系统的稳定性和灵活性。有以下几种方法:

客户端与服务端建立TCP 长连接 :

客户端与服务端建立TCP长连接,在服务器数据发生变化时,立即通过这个已经建立好的长连接将数据推送到客户端。

长连接:长连接是一种保持持久连接的通信方式,通常通过TCP或WebSocket实现。在长连接中,客户端和服务器之间建立一次连接后,保持这个连接的打开状态,不会立即关闭,这使得服务器可以在需要时主动向客户端推送数据,而不必等待客户端发起请求。长连接通常用于需要实时性的数据推送场景,如即时通讯、实时监控等。长连接是由服务器主动维护连接,客户端被动接收服务端的消息。协议层面基于TCP实现。

优点:数据一变动,客户端就马上可以感知到。

缺点:服务端需要大量的TCP连接,会占用大量的内存和CPU资源,容易受网络抖动等因素的影响。

客户端 轮询 ,客户端定期向 Nacos 服务器发起请求:

客户端通过不断的轮询方式检查数据是否发生变化,变化的话就把数据拉回来。轮询可以是指客户端定期向 Nacos 服务器发起请求,查询特定的配置信息是否有更新。这种方式称为定时轮询。客户端会在固定的时间间隔内,向服务器发送请求,询问某个配置的最新状态或数值。

轮询:用于客户端(如应用程序或设备)定期查询或检查某个状态或信息是否发生变化。它通常用于实现实时性要求不高、但需要周期性获取状态或信息的场景。

优点:实现比较简单

缺点:无法保证数据的实时性,轮询方式会对服务器产生压力。

客户端通过向 Nacos 服务器发送 长轮询 请求来获取配置信息:

客户端发起轮询请求,但是不立即返回结果,而是将请求挂起,保持一个有效的连接,超时或配置有变化时,Nacos服务器会把变化后的配置详细响应给客户端,然后客户端再发起一次新轮询。

长轮询:把长连接和轮询综合。是一种实现异步消息通信机制,客户端主动发起请求,服务端被动响应请求。协议层面基于HTTP实现。

优点:避免客户端对服务端的不断轮询造成压力,也避免了长时间保持连接造成的占用大量内存和CPU资源,也保证了配置的实时性。

缺点:需要频繁地发起HTTP请求,会增加网络开销,而且也可能会受到网络延迟等影响,导致配置的实时性不如长连接。

基于监听器的通知机制:

Nacos 客户端可以注册监听器(Listener)来监视特定配置的变化。当所监听的配置发生变更时,Nacos 服务器会主动推送通知给客户端。客户端接收到通知后,可以及时获取最新的配置信息,并进行相应的更新或操作。

监听器:

监听器是一种更高效的方式,客户端注册监听器后,服务器在配置发生变更时会主动推送通知,客户端无需频繁轮询,从而实现更即时的配置变更感知。

四.nacos作用

Nacos是一个功能强大的服务发现和配置管理平台,可以帮助开发者构建微服务架构。它提供了服务注册和发现、配置管理、命名空间和分组、高可用和负载均衡、安全认证等功能。通过使用Nacos,开发者可以更方便地管理和调用各种微服务以及它们的配置信息。

五.Nacos的下载使用

下载地址:https://nacos.io/download/nacos-server/、

选择下载:

下载成功后的目录如下:

在bin目录下,cmd执行 startup.cmd -m standalone,如下表示成功:

相关推荐
菜到极致就是渣2 小时前
如何使用SpringCloudAliBaba技术栈搭建微服务环境
java·微服务·架构
开发爱好者er2 小时前
服务保护方案Sentinel
微服务·sentinel
虫小宝4 小时前
利用Spring Boot实现微服务的链路追踪
spring boot·后端·微服务
金牌服务刘4 小时前
KPaaS:微服务架构下的持续集成与部署(CI/CD)应用实践
spring boot·ci/cd·微服务·云原生·容器·sass·devops
OldGj_13 小时前
限流策略探讨
java·微服务·限流
花开富贵..19 小时前
Sentinel微服务保护
微服务·架构·sentinel
顾以沫21 小时前
微服务--认识微服务
微服务·云原生·架构
努力尝试!1 天前
使用实例:xxl-job应用在spring cloud微服务下
spring·spring cloud·微服务
闫铁娃1 天前
Go反射四讲---第二讲:反射与结构体,使用反射如何操纵结构体?
开发语言·后端·微服务·云原生·golang·服务发现
点滴岁月1 天前
【SpringCloud应用框架】GateWay网关
spring boot·spring·spring cloud·微服务·gateway