您现在的位置是:首页 >学无止境 >什么是注册中心?深入了解注册中心(Nacos,Eureka和Zookeeper),SpringCloud核心组件--注册中心讲解网站首页学无止境
什么是注册中心?深入了解注册中心(Nacos,Eureka和Zookeeper),SpringCloud核心组件--注册中心讲解
1.首先,什么是注册中心
- 注册中心是一个集中化的服务目录,用于管理微服务架构中所有服务的元数据信息(如服务名、IP 地址、端口号等)。服务提供者在启动时将自己的信息注册到注册中心,服务消费者通过查询注册中心获取服务提供者的信息,从而实现服务的动态发现和调用。
- 注册中心是SpringCloud核心组件之一,现在主流使用的是Nacos,也有一些在使用ZooKeeper和Eureka这两种。
- 它用于实现服务的注册与发现。它的主要作用是解耦服务提供者和服务消费者之间的关系,使得服务消费者能够动态地发现和调用服务提供者。
2.注册中心有哪些?
2.1.Nacos(现在主流)
2.1.1.Nacos是什么
Nacos是阿里巴巴开源的服务注册与配置中心,近年来在 Java 微服务生态中非常流行,尤其是在 Spring Cloud Alibaba 生态中。
2.1.2.Nacos的特点
(1)服务发现和服务健康监测:
- Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。
- 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测 2 种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。
(2)动态配置服务:
-
动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
-
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
-
Nacos 提供了一个简洁易用的 UI(控制台样例 Demo)帮助您管理所有的服务和应用的配置。
-
Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
(3)支持基于 DNS 和基于 RPC 的服务发现:
- Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。
(4)支持 AP 和 CP 两种一致性模型(基于 Raft 协议)
- Nacos 的注册中心支持 CP 也支持 AP,对他来说只是一个命令的切换,随你玩,还支持各种注册中心迁移到 Nacos,反正一句话,只要你想要的他就有。
(5)与 Spring Cloud、Dubbo 等框架集成良好
- Nacos 除了服务的注册发现之外,还支持动态配置服务,一句话概括就是 Nacos = Spring Cloud注册中心 + Spring Cloud 配置中心。
(6)社区活跃,文档丰富,适合云原生场景
2.2.Eureka
2.2.1.Eureka是什么
Eureka 是 Netflix 开源的服务发现框架,具有高可用、弹性、可扩展等特点,并与Spring Cloud 集成良好,已闭源
2.2.2.Eureka提供服务注册和发现,是注册中心,有两个组件
Eureka服务端:作为服务的注册中心,用来提供服务注册,支持集群部署
Eureka客户端:是一个java客户端,将服务注册到服务端,同时将服务端的信息缓存到本地,客户端和服务端定时交互
2.2.3.Eureka的原理
- Eureka-server就是服务注册中心(可以是一个集群,对外暴露自己的地址)
- 提供者:启动后向Eureka注册自己信息(地址,服务名称等),并且定期进行服务续约
- 消费者:服务调用方,会定期去Eureka拉取服务列表,然后使用负载均衡算法选出一个服务进行调用
- 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态
2.2.4.进阶面试题
2.2.4.1.Eureka-server怎么保证高可用的?
(1)多实例部署:通过将多个Eureka Server实例部署在不同的节点上,可以实现高可用性。当其中一个实例发生故障时其他实例仍然可以提供服务,并保持注册信息的一致性。
(2)服务注册信息的复制:一个服务实例向EurekaServer注册时,每个Eureka Server实例都会复制其他实例的注册信息,以保持数据的一致性。当某个Eureka Server实例发生故障时,其他实例可以接管其工作,保证整个系统的正常运行。
(3)自我保护机制:Eureka还具有自我保护机制。当Eureka Server节点在一定时间内没有接收到心跳时,它会进入自我保护模式。在自我保护模式下,EurekaServer不再剔除注册表中的服务实例,以保护现有的注册信息。这样可以防止由于网络抖动或其他原因导致的误剔除,进一步提高系统的稳定性。
2.2.4.2.服务下线,失效 剔除和自我保护
- 服务的注册和发现都是可控制的,可以关闭也可以开启。(默认都是开启)
- 注册后需要心跳,心跳周期默认30秒一次,超过90秒没发心跳认为宕机
- 服务拉取默认30秒拉取一次
- Eureka每个60秒会剔除标记为宕机的服务
- Eureka会有自我保护,当心跳失败比例超过阈值(默认85%),那么开启自我保护,不再剔除服务
- Eureka高可用就是多台Eureka互相注册在对方上
2.3.ZooKeeper
2.3.1.ZooKeeper是什么
- Zookeeper 是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题,例如怎样避免同时操作同一数据造成脏读的问题.
- ZooKeeper 本质上是一个分布式的小文件存储系统,提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理,从而用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理
- 在大数据生态系统里,很多组件的命名都是某种动物,比如 hadoop 就是大象,hive就是蜜蜂,而Zookeeper 就是动物管理员.
2.3.2.Zookeeper 的数据模型
- ZK 本质上是一个分布式的小文件存储系统
- ZK 表现为一个分层的文件系统目录树结构,既能存储数据,而且还能像目录一样有子节点.每个节点可以存最多 1M 左右的数据.
- 每个节点称做一个Znode,每个Znode 都可以通过其路径唯一标识.
- 而且客户端还能给节点添加 watch,也就是监听器,可以监听节点的变化,这个功能常在实际开发中作为监听服务器集群机器上下线操作
2.3.2.1.节点结构
图中的每个节点称为一个 Znode。每个 Znode 由 3 部分组成:
(1)stat:此为状态信息,描述该 Znode 的版本,权限等信息
(2)data:与该 Znode 关联的数据
(3)children:该 Znode 下的子节点
2.3.2.2.节点类型
Znode 有2大类4小类,两大类分别为永久节点和临时节点.
- 永久节点(Persistent):客户端和服务器端断开连接后,创建的节点不会消失,只有在客户端执行删除操作的时候,他们才能被删除.
- 临时节点(Ephemeral):客户端和服务器端断开连接后,创建的节点会被删除.
Znode 还有一个序列化的特性,这个序列号对于此节点的父节点来说是唯一的,这样便会记录每个子节点创建的先后顺序,它的格式为“%10d”(10 位数字,没有数值的数位用 0补充,例如“0000000001”),因此节点可以分为4小类
- 永久节点(Persistent)
- 永久序列化节点(Persistent Sequential)
- 临时节点(Ephemeral)
- 临时_序列化节点(Ephemeral_Sequential)
2.3.3.ZooKeeper的watch监听机制
- 在ZooKeeper 中还支持一种 watch(监听)机制,它允许对ZooKeeper 注册监听,当监听的对象发生指定的事件的时候,ZooKeeper 就会返回一个通知.
- Watcher 分为以下三个过程:客户端向 ZK 服务端注册 Watcher、服务端事件发生触发 Watcher、客户端回调 Watcher 得到触发事件情况,触发事件种类很多,如:节点创建,节点删除,节点改变,子节点改变等。
- Watcher 是一次性的.一旦被触发将会失效,如果需要反复进行监听就需要反复进行注册。
2.3.3.1.监听原理
- 首先要有一个 main()线程
- 在 main 线程中创建 Zookeeper 客户端,这时就会创建两个线程,一个复制网络连接通信(connect),一个负责监听(listener).
- 通过 connect 线程将注册的监听事件发送给 zk,常见的监听有:
(1)监听节点数据的变化 get path [watch]
(2)监听节点状态的变化 stat path [watch]
(3)监听子节点增减的变化Is path [watch]
- 将注册的监听事件添加到 zk 的注册的监听器列表中
- 监听到有数据或路径变化,就会将这个消息发送给listener 线程.
- listener 线程内部调用了 process()方法,此方法是程序员自定义的方法,里面可以写明监听到事件后做如何的通知操作.
2.3.3.2.监听器实际应用
监听器+ZK 临时节点能够很好的监听服务器的上线和下线
- 第一步:先想 zk 集群注册一个监听器,监听某一个节点路径
- 第二步:主要服务器启动,就去 zk 上指定路径下创建一个临时节点.
- 第三步:监听器监听 servers 下面的子节点有没有变化,一旦有变化,不管新增(机器上线)还是减少(机器下线)都会马上给对应的人发送通知,
2.4.Consu(c/ap)
Consul 是一种分布式服务发现和配置管理系统,由 HashiCorp 开发。它提供了服务注册、服务发现、健康检查、键值存储等功能,并支持多数据中心部署。
2.4.etcd(cp)
etcd 是 CoreOs 开源的一种分布式键值存储系统,可以被用作服务注册中心。它具有高可用、强一致性、分布式复制等特性。cp
3.nacos,Eureka和ZooKeeper的区别
总的来说:Eureka和ZooKeeper的最大区别是一个支持AP,一个支持CP,Nacos即支持AP也支持CP