当前位置: 首页 > article >正文

nacos的原理,为什么可以作为注册中心,和zookeeper的区别

Nacos 是阿里巴巴开源的一款用于动态服务发现、配置管理和服务治理的中间件,广泛应用于微服务架构中。它可以作为注册中心的原因在于其强大的服务注册与发现功能,原理上与 Zookeeper 有相似之处,但在设计目标和功能上有所区别。

Nacos 的原理

Nacos(Naming And Configuration Service)集成了服务注册、发现和配置管理的功能,其基本原理如下:

  1. 服务注册与发现

    • 服务注册:服务提供者启动时,会将自己的服务信息(如 IP 地址、端口、服务名等)注册到 Nacos 中,Nacos 会将这些信息保存在其内存和存储系统中。
    • 服务发现:服务消费者通过 Nacos 查询已经注册的服务,获取提供服务的实例列表。这些信息通过心跳检测机制保持动态更新。

    服务的注册和发现可以通过 HTTP 和 DNS 两种方式进行。Nacos 通过内部集群管理服务实例的健康状态、故障转移和负载均衡。

  2. 服务健康监测

    • Nacos 会周期性地检查注册的服务实例是否健康,通常使用的是心跳机制,服务实例定期向 Nacos 发送心跳信号,确保服务处于健康状态。如果 Nacos 没有接收到心跳信号,服务实例将被标记为下线。
  3. 配置管理

    • Nacos 也具备强大的配置管理功能。开发者可以将应用程序的配置文件存储在 Nacos 中,当配置发生变化时,Nacos 会将新的配置推送给相关服务实例,实现实时的配置更新。
  4. 动态路由

    • Nacos 支持动态路由的能力,当某个服务实例出现问题时,Nacos 会根据实时的路由规则,将流量自动转发给健康的服务实例。
  5. 持久化存储

    • Nacos 支持将注册的服务实例信息存储到外部数据库中,常用的是 MySQL。当 Nacos 集群中的某个节点发生故障时,数据可以从数据库中恢复,保证了系统的高可用性。

为什么 Nacos 可以作为注册中心

Nacos 作为注册中心,具备以下功能,适合微服务架构中的服务治理:

  1. 服务注册与发现:服务提供者可以轻松地注册自己的服务,服务消费者可以根据服务名称进行动态查找。这是微服务架构中服务治理的核心功能。

  2. 健康检查和故障处理:Nacos 内置健康检查机制,可以定期检测服务实例的健康状况。如果某个服务实例无法提供服务,Nacos 会自动将其剔除,保证负载均衡和高可用性。

  3. 集群支持:Nacos 支持集群部署,能够确保服务注册中心的高可用性和数据的一致性。

  4. 支持多种协议:Nacos 支持 HTTP、gRPC、REST 等多种通信协议,适应多样化的服务发现需求。

  5. 简单易用:Nacos 提供了友好的用户界面,操作简单,配置方便,适合开发者快速上手使用。

Nacos 和 Zookeeper 的区别

Nacos 和 Zookeeper 虽然都能作为注册中心,但它们的设计目标、架构和功能存在一些重要的区别:

  1. 一致性协议

    • Nacos:Nacos 默认采用 AP 模型(即高可用性和分区容错性)。在网络分区的情况下,Nacos 优先保证服务的可用性,而对一致性的要求相对较弱。Nacos 还可以选择 CP 模式(即一致性和分区容错性),使用 Raft 协议来保证数据一致性。
    • Zookeeper:Zookeeper 采用的是 CP 模型,它更加注重数据的一致性。Zookeeper 使用的是 Paxos 改进版的 Zab(Zookeeper Atomic Broadcast) 协议,确保数据一致性。如果 Zookeeper 集群中多数节点不可用,整个服务发现功能将不可用,这对于微服务的高可用性会产生一定影响。
  2. 数据模型

    • Nacos:Nacos 中注册的服务信息是面向服务的,它直接支持服务实例注册、健康检查、配置管理等功能,专门为服务治理设计。
    • Zookeeper:Zookeeper 采用的是基于文件系统的树形数据结构,需要开发者通过节点数据存储的方式实现服务注册和发现。尽管灵活性较高,但使用起来相对复杂。
  3. 健康检查

    • Nacos:Nacos 内置了服务的健康检查机制,能够自动感知服务实例的健康状况,通过心跳机制确定服务是否正常,自动下线不健康的服务实例。
    • Zookeeper:Zookeeper 本身不提供服务的健康检查功能。服务提供者需要额外实现自己的健康检查机制,比如通过心跳或其它方式,确保服务的可用性。
  4. 配置管理

    • Nacos:除了服务注册与发现,Nacos 还提供了配置管理功能,能够集中管理微服务应用的配置,并支持动态配置的推送。
    • Zookeeper:Zookeeper 主要用于服务的注册与发现,虽然可以通过节点存储一些配置信息,但并没有专门为配置管理设计。
  5. 易用性

    • Nacos:Nacos 的界面友好,功能丰富,适合新手快速上手。而且,Nacos 还支持 DNS 和 RPC 等多种服务发现方式。
    • Zookeeper:Zookeeper 偏向于更底层的分布式协调服务,使用门槛较高,通常需要与其它组件结合使用(如 Curator),才能作为注册中心。

总结

  • Nacos 是为微服务架构设计的一站式服务治理平台,功能丰富,支持服务注册、健康检查、配置管理等功能,支持多种协议和模式,使用简单且灵活,适合现代云原生应用场景。

  • Zookeeper 则更强调一致性和强大的分布式协调能力,适合对数据一致性要求更高的系统,但它缺少 Nacos 那样丰富的服务治理功能,使用起来相对复杂。

因此,如果您的场景中更需要服务注册与发现的灵活性和易用性,Nacos 是一个非常适合的选择;如果您更重视数据的一致性,且系统对高可用性要求不那么高,可以考虑 Zookeeper。

什么是raft协议

Raft协议 是一种用于分布式系统中实现 一致性 的共识算法,它的主要目标是比另一种常见的共识算法 Paxos 更易于理解和实现,同时保持相似的功能。Raft 提供了一种方法来管理一组服务器,确保它们能够在面临节点故障的情况下依然达成一致的决策,比如日志复制、领导选举等。

Raft 协议解决了分布式系统中的数据一致性问题。它保证了多个节点(服务器)即使在部分节点出现故障或通信延迟的情况下,仍然可以达成一致的状态。Raft 通常用于分布式数据库、分布式文件系统和分布式协调系统(如 Nacos 和 etcd)。

Raft 协议的核心概念

Raft 协议可以分为三个主要部分:

  1. 领导者选举(Leader Election)
  2. 日志复制(Log Replication)
  3. 安全性(Safety)
1. 领导者选举(Leader Election)

Raft 系统中,每个节点可能处于以下三种状态之一:

  • 领导者(Leader):负责处理客户端请求和管理日志复制过程。
  • 候选者(Candidate):在没有发现领导者时,节点会变成候选者并发起选举,试图成为新的领导者。
  • 追随者(Follower):跟随领导者的指令并响应来自领导者或候选者的请求。

在 Raft 中,系统会从多个节点中选出一个领导者。每个节点有一个 选举超时,如果在该时间内节点没有从现任领导者那里收到心跳消息(证明领导者依然活跃),它就会转换为 候选者 并发起选举。候选者会向其他节点发送 请求投票 消息,其他节点根据当前情况决定是否投票。获得多数投票的候选者成为新的领导者。

  • 心跳机制:领导者会定期发送心跳(心跳是空的日志条目),告诉追随者自己仍然存活。
  • 选举超时:如果追随者在设定时间内没有收到心跳消息,它就会成为候选者并开始选举过程。
2. 日志复制(Log Replication)

一旦选出领导者,领导者将负责处理所有来自客户端的请求。每个客户端的请求都包含一条需要被应用到系统中的命令(例如数据库的写入操作)。领导者会将这些命令作为日志条目添加到自己的日志中,并将日志条目复制到所有的追随者中。

日志复制过程如下:

  • 领导者将客户端请求作为新的日志条目,并向所有追随者广播 附加日志条目(Append Entries) 消息。
  • 追随者接收到附加日志条目后,会将该条目添加到自己的日志中,并向领导者确认。
  • 领导者在收到多数追随者的确认后,将该日志条目标记为“已提交”,并应用到其状态机中。
  • 追随者在接收到领导者的“已提交”通知后,也会将日志条目应用到各自的状态机中。
3. 安全性(Safety)

Raft 保证以下几种安全性原则:

  • 日志一致性:只要一个条目被大多数节点提交,那么这个条目将被应用到每一个节点的日志中。这意味着即使领导者发生故障,新的领导者也必须保持一致的日志顺序。
  • 不分裂投票:在一次选举中,每个节点只能向一个候选者投票,避免了多个候选者同时当选的情况。
  • 领导者合法性:Raft 保证新选出的领导者的日志至少和追随者的日志一样新,保证了领导者的合法性。

Raft 协议的步骤详解

  1. 领导者选举

    • 选举过程开始时,节点的状态是追随者。当一个节点没有收到领导者的心跳信号时,它会转变为候选者,并启动一个选举周期。
    • 候选者向所有节点请求投票,节点投票的条件是它没有投过票,或者候选者的日志比自己更“新”。
    • 获得多数投票的候选者当选为新的领导者,开始接管系统的控制权。
  2. 日志复制

    • 当一个领导者处理客户端请求时,它会将请求作为日志条目追加到自己的日志中。
    • 领导者发送“附加日志条目”消息给所有追随者,要求它们复制该条目。
    • 追随者收到该消息后,将日志条目添加到自己的日志中,并向领导者发送确认消息。
    • 领导者在收到多数确认后,标记该条目为已提交,并通知追随者应用该条目。
  3. 一致性保证

    • Raft 使用选举流程来确保系统只有一个合法的领导者在管理日志。
    • 日志条目必须被复制到大多数节点才能被提交,因此,即使某些节点发生故障,整个系统依然可以保持一致。

Raft 与 Paxos 的对比

Raft 和 Paxos 都是分布式一致性算法,但它们有一些显著区别:

  1. 设计目标

    • Paxos 是更早提出的分布式共识算法,但其设计和实现复杂且不直观。
    • Raft 的设计目标是简化一致性算法的理解和实现,它将一致性问题拆解为领导者选举、日志复制和安全性保障三个模块,便于分步理解。
  2. 领导者选举

    • Paxos 没有明确的领导者选举流程,所有节点都有机会成为领导者。
    • Raft 明确引入了领导者选举的概念,整个系统中只有一个领导者来处理日志的提交和复制工作,其他节点作为追随者,直到发生选举。
  3. 实现复杂度

    • Paxos 被认为是难以理解和实现的,因为它的描述偏理论化,实践中需要进行大量改进。
    • Raft 则更易于理解,社区对其的实现也相对简单。

Raft 的优势

  • 易于理解和实现:相比 Paxos,Raft 结构化地解决了分布式一致性问题,设计更直观。
  • 强一致性保证:Raft 保证了数据的一致性,并通过多数投票和日志复制机制确保系统健壮性。
  • 高可用性:Raft 支持选举机制,即使在领导者发生故障时,也可以通过选举机制迅速恢复系统的正常运行。

总结

Raft 是一种用于分布式系统中的共识算法,旨在通过简单的方式实现一致性。它通过领导者选举、日志复制、状态机的一致性应用等机制,确保多个节点在分布式环境中能够保持一致的状态。Raft 在一致性和可用性之间做出了合理的权衡,是当今分布式系统中常用的共识协议之一。


http://www.kler.cn/news/368160.html

相关文章:

  • OpenIPC开源FPV之Ardupilot配置
  • w001基于SpringBoot的在线拍卖系统
  • vue通过JSON文件生成KML文件源码
  • Netty-TCP服务端粘包、拆包问题(两种格式)
  • 医疗实施-项目管理06-估算成本
  • 群控系统服务端开发模式-系统架构图
  • Vue3侦听器监听数据变化早于mapContext初始化的问题
  • (二十二)、k8s 中的关键概念
  • 动态规划 —— 斐波那契数列模型-解码方法
  • StringBuilder
  • 信息学奥赛复赛复习18-CSP-J2023-01小苹果-向上取整、向下取整、模拟算法
  • WHAT - Excel 文件上传解析与编码
  • 大语言模型使用和测评
  • 【C++修炼进程之练气】初识《类与对象 超详细》❤️
  • 【算法】Bellman-Ford单源最短路径算法(附动图)
  • 【LeetCode:263. 丑数 + 数学】
  • 【已解决,含泪总结】非root权限在服务器上配置python和torch环境,代码最终成功训练(一)
  • 设计模式——过滤器模式
  • 脚本-把B站缓存m4s文件转换成mp4格式
  • vue通过JSON文件生成KML文件源码
  • There is no screen to be resumed matching xxx【解决方案、screen、原因分析】
  • 《2024中国泛娱乐出海洞察报告》解析,垂直且多元化方向发展!
  • linux驱动—注册驱动分析
  • 使用Python计算相对强弱指数(RSI)进阶
  • HarmonyOS NEXT 应用开发实战(八、知乎日报List列表下拉刷新及上滑加载更多分页的实现)
  • Vue引入高德地图自定义信息窗体绑定点击事件无效解决方案