Nacos、Eureka、Zookeeper、Consul对比

开发中,经常需要对微服务进行管理,所以需要引入一些服务治理的中间件,用于注册、发现服务,常见的服务治理中间件为

服务治理中间件

【1】Nacos
【2】Eureka
【3】Zookeeper
【4】Consul(Consul 所在的 HashiCorp 公司宣布,不允许中国境内使用该公司旗下的产品和软件。)

对比一览表

名称NacosEurekaZookeeperConsul
开发语言JavaJavaCJava
功能特性服务注册&发现、配置管理、流量控制、DNS、动态DNS服务注册&发现数据存储、协调服务注册&发现、配置管理
应用场景K8S、Service Mesh、SpringCloudSpringCloudHadoop分布式集群K8S、SpringCloud
CAP理论CP/APAPCPCP
运行模式自主部署、集群模式自主部署、集群模式需独立部署、启动集群
其它OpenAPI标准、支持多语言Spring开发、易于集成
开发者阿里巴巴NetFilxApache基金会

CAP理论

CP:Consistency and Partition tolerance 一致性与分区容错度
AP:Availability and Partition tolerance 可用性与分区容错度

一致性(C):确保分布式系统中的所有数据备份在同一时刻具有相同的值,即所有节点访问同一份最新的数据副本。
~
可用性(A):在集群中一部分节点发生故障后,集群整体仍然能够响应客户端的读写请求,保持服务的高可用性。
~
分区容错性(P):在分布式系统中,由于网络分区等原因,系统可能会无法与部分节点通信,此时系统必须能够继续提供服务,即使是在部分节点不可用的情况下。

CAP三者是相互矛盾的!

一个分布式系统,不能同时将CAP都很好的满足,只能满足其中两者,所以可以使用AP策略、也可以用CP策略

功能特性

Nacos是一个全栈的解决方案,而支持服务发现、配置管理和流量管理等多个功能。
Eureka专注于服务注册和发现、适用于SpringCloud体系。
Zookeeper则是一个通用的分布式数据存储和协调系统,适用于大规模分布式系统的场景
Consul与Nacos基本相同

负载均衡

Nacos 本身具备负载均衡能力,可以提供服务端负载均衡与客户端负载均衡。
Zookeeper 不支持。
Eureka 本身不支持,通过Ribbon做负载均衡。
Consul 本身不支持,通过Fabio做负载均衡。

健康检查

服务端健康检查最常见的方式是 TCP 端口探测和 HTTP 接口返回码探测,这两种探测方式因为其协议的通用性可以支持绝大多数的健康检查场景。Zookeeper 和 Eureka 都实现了⼀种 TTL(Time To Live)机制,就是如果客户端在⼀定时间内没有向注册中心发送心跳,则会将这个客户端摘除。

Zookeeper 使用TCP的KeepAlive保持客户端和服务端的连接。
Eureka 通过客户端心跳来确定客户端是否启动。
Consul 通过check方法实现健康检查,check方法有五种:Script + Interval、HTTP + Interval、TCP+ Interval、Docker + interval、TTL。
Nacos 既支持客户端的健康检查(KeepAlive、Client Beet),也支持服务端的健康检查(MYSQL命令等)。

性能与容量

影响读写性能的因素很多:⼀致性协议、机器的配置、集群的规模、存量数据的规模、数据结构及读写逻辑的设计等等。并非性能越高就越好,因为追求性能往往需要其他方面做出牺牲。

Zookeeper 在写性能可以达到上万的 TPS,容量从存储节点数来说可以达到百万级别。不过 Paxos 协议限制了 Zookeeper 集群的规模(3、5个节点)。当大量实例上下线时,Zookeeper 的表现并不稳定,同时在推送机制上的缺陷,会引起客户端的资源占用上升,从而性能急剧下降。
Eureka 在服务实例规模在 5000 左右的时候,就已经出现服务不可用的问题,甚至在压测的过程中,如果并发的线程数过高,就会造成 Eureka crash。
Nacos 在开源版本中,服务实例注册的支撑量约为 100 万,服务的数量可以达到 10 万以上。

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

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

相关文章

从完成[flutter竖向显示文字]到对实现方式[Rich Text和Text Span]的一些整理

前言 完成的需求是竖向显示文字,而已有的RotatedBox虽然可以让文字内部控件进行指定角度的旋转,但是不能保持文字仍正常显示(它会因为旋转横着),遂尝试Rich Text和Text Span的方式,这两个我曾在android有略…

红队笔记Day2 -->上线不出网机器

今天就来讲一下在企业攻防中如何上线不出网的机器!! 1.基本网络拓扑 基本的网络拓扑就是这样 以下是对应得的P信息,其中的52网段充当一个内网的网段,而111充当公网网段 先ping一下,确保外网ping不通内网,内…

文档类图像的智能识别,百度、阿里、华为腾讯开放接口

文档类图像的智能识别是指利用人工智能技术对文档图像进行自动识别和信息提取。在我国,百度、阿里、华为和腾讯等科技巨头都提供了相应的开放接口,方便开发者集成和使用文档类图像识别功能。以下是这些公司提供的相关开放接口: 1. 百…

微信小程序(四十一)wechat-http的使用

注释很详细,直接上代码 上一篇 新增内容: 1.模块下载 2.模块的使用 在终端输入npm install wechat-http 没有安装成功vue的先看之前的一篇 微信小程序(二十)Vant组件库的配置- 如果按以上的成功配置出现如下报错先输入以下语句 …

leetcode 24

24. 两两链表交换链表中的节点 已经给出了链表节点结构类: public class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) { this.val val; }ListNode(int val, ListNode next) { this.val val; this.next next; }} 简而言之,我们…

DS:单链表实现队列

创作不易,友友们来个三连支持吧! 一、队列的概念 队列:是只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)的特点。 入队列:进行插入操作…

leetcode题目记录

文章目录 单调栈[127. 单词接龙](https://leetcode.cn/problems/word-ladder/)[139. 单词拆分](https://leetcode.cn/problems/word-break/)[15. 三数之和](https://leetcode.cn/problems/3sum/)[140. 单词拆分 II](https://leetcode.cn/problems/word-break-ii/)[113. 路径总和…

《数字孪生城市建设指引报告(2023年)》指引智慧城市行动方向

2023年12月27日,中国信息通信研究院(简称“中国信通院”)产业与规划研究所、中国互联网协会数字孪生技术应用工作委员会和苏州工业园区数字孪生创新坊联合发布《数字孪生城市建设指引报告(2023年)》。该报告提出了三大…

PostgreSQL的学习心得和知识总结(一百二十八)|构建 PostgreSQL 负载测试器

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库链接,点击前往 4、日本著名PostgreSQL数据库专家 铃木启修 网站…

Linux:docker在线仓库(docker hub 阿里云)基础操作

把镜像放到公网仓库,这样可以方便大家一起使用,当需要时直接在网上拉取镜像,并且你可以随时管理自己的镜像——删除添加或者修改。 1.docker hub仓库 2.阿里云加速 3.阿里云仓库 由于docker hub是国外的网站,国内的对数据的把控…

.NET Core 3 foreach中取索引index

for和foreach 循环是 C# 开发人员工具箱中最有用的构造之一。 在我看来,迭代一个集合比大多数情况下更方便。 它适用于所有集合类型,包括不可索引的集合类型(如 ,并且不需要通过索引访问当前元素)。 但有时&#xf…

Verilog刷题笔记30

题目: You are provided with a BCD one-digit adder named bcd_fadd that adds two BCD digits and carry-in, and produces a sum and carry-out. 解题: module top_module( input [399:0] a, b,input cin,output cout,output [399:0] sum );reg [99…

代码随想录day20--二叉树的应用8

LeetCode669.修剪二叉搜索树 题目描述: 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没…

【ES】--Elasticsearch的分词器深度研究

目录 一、问题描述及分析二、analyze分析器原理三、 multi-fields字段支持多场景搜索(如同时简繁体、拼音等)1、ts_match_analyzer配置分词2、ts_match_all_analyzer配置分词3、ts_match_1_analyzer配置分词4、ts_match_2_analyzer配置分词5、ts_match_3_analyzer配置分词6、ts…

ctfshow-文件上传(web151-web161)

目录 web151 web152 web153 web154 web155 web156 web157 web158 web159 web160 web161 web151 提示前台验证不可靠 那限制条件估计就是在前端设置的 上传php小马后 弹出了窗口说不支持的格式 查看源码 这一条很关键 这种不懂直接ai搜 意思就是限制了上传类型 允许…

Ubuntu Desktop - Files Preferences

Ubuntu Desktop - Files Preferences 1. Behavior2. ViewsReferences 1. Behavior Go to file browser’s Menu -> Edit -> Preferences -> Behavior 2. Views Go to file browser’s Menu -> Edit -> Preferences -> Views ​​​ References [1] Yong…

掘根宝典之C++运算符重载

什么是运算符重载 运算符重载是一种形式的C多态。这很容易让大家想到函数多态,让我们使用同名的函数来完成相同的基本操作,即使是用于不同的类型,不懂函数多态的看这里http://t.csdnimg.cn/ipbqR 运算符重载把重载的概念拓展到运算符上&…

EMC学习笔记(二十五)降低EMI的PCB设计指南(五)

线缆和连接器 1 差模和共模噪声2 串扰3 返回路径数量4 外部PCB -IO 布局建议5 防止噪音和静电放电 tips:资料主要来自网络,仅供学习使用。 设计良好的两层板,和大多数四层板,有最小的辐射。系统级的问题是由于将PCB与任何板外支持…

vector容器

1. vector基本概念 1.1 功能: vector数据结构和数组非常相似,也称为单端数组 vector与普通数组区别: 不同之处在于数组是静态空间,而vector可以动态扩展 动态扩展: 并不是在原空间之后续接新空间,而是找更…

视频讲解:优化柱状图

你好,我是郭震 AI数据可视化 第三集:美化柱状图,完整视频如下所示: 美化后效果前后对比,前: 后: 附完整案例源码: util.py文件 import platformdef get_os():os_name platform.syst…