注册中心ZK、nameServer、eureka、Nacos介绍与对比

前言

注册中心的由来

微服务架构是存在着很多跨服务调用,每个服务都存在着多个节点,如果有多个提供者和消费者,当提供者增加/减少或者消费者增加/减少,双方都需要感知发现。所以诞生了注册中心这个中间件。

市面上有很多注册中心,如 Zookeeper、NameServer、Eureka、Nacos,下面我来讲一下它们的特点、应用和区别。

Zookeeper

Zookeeper的存储结构是树形结构,它有四种节点,分别是:

  • 持久节点:除非自己删除,否则一直存在。
  • 持久顺序节点:加了编号,按添加时间排序。
  • 临时节点:Zookeeper会维护一个跟客户端的session,通过心跳存续,如果客户端失去心跳,一段时间后节点的session到期,就会删除节点。
  • 临时顺序节点。

特点

  • Watch监听器:当客户端向某个节点添加监听,当节点发生变化,Zookeeper会实时通知客户端。
  • 节点的名字唯一,不允许重复创建。

强一致性

Zookeeper多节点部署,只要集群中存在超过一半的节点能够正常工作,那么整个集群就能够正常对外服务。

Zookeeper围绕着ZAB协议保障数据的一致性。

ZAB协议里规定,Zookeeper集群中只有一个主节点,其余都是从节点。

所有的写请求都必须先走主节点,主节点写入后,同步给从节点,超过半数的节点返回成功,则返回客户端成功,没有超过一半,则返回客户端失败。

为了提升读的性能,读请求不要求必须请求主节点,从节点也可以读。

如果主节点挂了,那么会进行主节点选举,ZAB协议为了保障一致性,选举期间服务是不可用的,牺牲了一些可用性(CP)。

当主节点挂了,就会开始选举,持有消息最新的节点有资格参加竞选,当最终投票超过半数就会被选为主节点,并通知其他节点。

应用

利用上述这些特点,Zookeeper有用广泛的应用。

Dubbo中的注册中心

当Dubbo provider启动时,会在Zookeeper上的 /dubbo/{serviceName}/providers 节点上添加一个临时节点。

当consumer启动时,会在Zookeeper上的 /dubbo/{serviceName}/consumers 节点下添加一个临时节点,同时添加watcher监听providers节点。

当新增provider节点,consumer通过watcher机制能够马上会收到并本地缓存。

当provider挂了,心跳断开连接时,等临时节点的会话到期会触发节点删除,consumer会收到并本地缓存。

通过watcher机制,当consumer发生了变化,provider能够及时感应到。

Zookeeper

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/158029.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[GitLab] 安装Git 指定版本

卸载旧版本 检查是否已经安装 git --version如果已经安装,先卸载 yum -y remove git安装新版本 在GitHub上选择需要下载的版本 Git版本 在/usr/local/目录下新建文件夹:git,并在/usr/local/git/文件夹内下载压缩包 wget https://github…

有关YOLOV5在测试时,图片大小被调整的问题

执行detect.py文件,在运行栏中出现以下: detect: weightsyolov5s.pt, sourcedata\images, datadata\coco128.yaml, imgsz[640, 640], conf_thres0.25, iou_thres0.45, max_det1000, device, view_imgFalse, save_txtFalse, save_confFalse, save_cropFa…

1,2,3,4,5 专家正上路

早在20世纪70年代,德雷福斯兄弟(Hubert Dreyfus和Stuart Dreyfus)就开始研究人类如何获取和掌握技能,他们考察了日常生活中常见的各项技能活动,如开车、下棋、体育运动等,提出了德雷福斯模型。它是种构建理论,概括了从…

javaEE -11(10000字HTML入门级教程)

一&#xff1a; HTML HTML 代码是由 “标签” 构成的. 例如&#xff1a; <body>hello</body>标签名 (body) 放到 < > 中大部分标签成对出现. 为开始标签, 为结束标签.少数标签只有开始标签, 称为 “单标签”.开始标签和结束标签之间, 写的是标签的内容. (h…

NEFU数字图像处理(4)图像几何变换

一、图像几何变换基础 1.1概述 定义&#xff1a; 使原始图像能够按照需要&#xff0c;产生大小、形状、位置等方面的几何变化 本质特征&#xff1a; 图像几何变换不是改变图像的像素值&#xff0c;而是改变像素所在的位置。 1.2相关概念 二维图像几何变换可通过矩阵线性变换来…

160. 相交链表、Leetcode的Python实现

博客主页&#xff1a;&#x1f3c6;看看是李XX还是李歘歘 &#x1f3c6; &#x1f33a;每天分享一些包括但不限于计算机基础、算法等相关的知识点&#x1f33a; &#x1f497;点关注不迷路&#xff0c;总有一些&#x1f4d6;知识点&#x1f4d6;是你想要的&#x1f497; ⛽️今…

利用win32的GetLastInputInfo函数实现锁屏(C#)

前两天看到群里面讨论这个问题&#xff0c;刚好我们上一家公司的系统也有这个功能&#xff0c;就研究了一下&#xff0c;我们这边实现这个功能的目的如下&#xff1a;当用户长时间不操作系统时&#xff0c;自动退出系统并退回到登录界面&#xff0c;想要使用系统&#xff0c;就…

【Linux学习笔记】进程概念(下)

进程地址空间1. 虚拟地址2. 什么是进程地址空间3. 进程地址空间的映射。4. 地址空间存在的意义5. 写时拷贝 进程地址空间 1. 虚拟地址 来看这样一段代码。 #include <stdio.h> #include <unistd.h>int global_value 100;int main() {pid_t id fork();if(id &l…

非关系型数据库Redis的安装【Linux】及常用命令

前言 Redis&#xff08;Remote Dictionary Server&#xff09;是一种开源的内存数据库管理系统&#xff0c;它以键值存储方式来存储数据&#xff0c;并且支持多种数据结构&#xff0c;如字符串、哈希、列表、集合、有序集合等。Redis最初由Salvatore Sanfilippo开发&#xff0c…

苹果cms论坛多播放源自动采集在线影视网站

苹果 cms 论坛一个基于 vue 和 gin 实现的在线观影网站 项目采用 vite vue 作为前端技术栈, 使用 ElementPlus 作为 UI 框架进行开发 后端程序使用 Gin gorm go-redis 等相关框架提供接口服务, 使用 gocolly 和 robfig/cron 进行公共影视资源采集和定时更新功能 目前用户…

vscode debug skills

1) VSCode 调试 C/C 代码时&#xff0c;如何显示动态分配的指针数组。 创建一个动态分配的一维数组: int n 10; int *array (int *)malloc(n*sizeof(int)); memset(array, 1, n*sizeof(int)); 如果直接 Debug 时查看 array 指针&#xff0c;并不能看到数组所有的值。 查看…

行业揭秘:腾讯共享wifi码推广零加盟费是真的吗?

近年来&#xff0c;“共享经济”概念在商业领域取得了巨大成功。共享WiFi贴码成为共享经济的一种典型案例&#xff0c;被越来越多的人看作是一种低风险、高回报的投资方式。而在这个市场中&#xff0c;腾讯WiFi码推广以“零加盟费”而备受关注。本文将探讨腾讯WiFi码推广零加盟…