微服务架构:注册中心 Eureka、ZooKeeper、Consul、Nacos的选型对比详解

  微服务架构(Microservices Architecture)是一种基于服务拆分的分布式架构模式,旨在将复杂的单体应用程序拆分为一组更小、更独立的服务单元。这些服务单元可以独立开发、测试、部署,并使用不同的技术栈和编程语言。它们通过轻量级通信机制(如HTTP/REST、消息队列等)相互协作,从而构建出一个灵活、可扩展的系统。

  本文将针对微服务架构中,几种常见的注册中心 Eureka、ZooKeeper、Consul、Nacos的选型进行对比详解。

一、什么是注册中心?

  注册中心(Service Registry)是微服务架构中的核心组件之一,主要用于服务的管理和发现。在微服务架构中,服务注册中心是一个中央存储库,用于存储服务实例的注册信息,包括服务的地址、端口、名称、版本号等元数据信息。服务注册中心的主要功能包括:

1.服务注册:服务提供者(Provider)在启动时,会将自己的元数据信息注册到服务注册中心。这样,服务消费者(Consumer)就可以通过服务注册中心来查找和调用所需的服务。

2.服务发现:服务消费者通过服务注册中心提供的接口或API,可以查询并获取到所需服务的地址和元数据信息,从而进行远程调用。

3.负载均衡:服务注册中心可以根据一定的策略(如随机、轮询、最少活跃调用数等),将服务消费者的请求分发到合适的服务提供者上,以实现负载均衡,提高系统的可用性和性能。

4.健康检查:服务注册中心会定期或实时地检查服务提供者的健康状态,如服务是否可用、响应是否及时等。如果服务提供者出现故障或异常,服务注册中心会将其从服务列表中剔除,以保证服务调用的可靠性。

5.服务治理:服务注册中心还可以提供一系列的服务治理功能,如服务路由、限流降级、熔断等,以实现对微服务架构的精细化管理和控制。

  常见的服务注册中心实现有Eureka、ZooKeeper、Consul、Nacos等。这些工具各有特点,可以根据具体需求进行选择和配置。在选择服务注册中心时,需要考虑其稳定性、可扩展性、易用性、安全性等因素。

在这里插入图片描述

  再说Eureka、ZooKeeper、Consul、Nacos之前,我们先了解一下分布式架构中重要理论CAP理论是什么。

二、CAP理论

  CAP理论是指在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三个核心特性无法同时成立的理论。该理论由Eric Brewer提出,主要用于指导分布式系统中数据一致性模型的设计和实现。

具体来说,CAP理论中的三个特性定义如下:

1.一致性(Consistency):在分布式系统中,所有节点看到的数据都是相同的,即系统的状态在任何时刻都是一致的。这要求系统在对数据进行更新后,能够确保所有节点中的数据都保持一致。

2.可用性(Availability):系统必须在任何时候都能够响应客户端请求。这要求系统能够在规定的时间内对客户端的请求进行响应,不会出现无法访问或响应时间过长的情况。

3.分区容错性(Partition Tolerance):系统必须能够容忍分布式系统中的某些节点或网络分区出现故障或延迟。这要求系统能够在出现网络分区或节点故障时,仍然能够继续提供服务并保持数据的一致性。

  在CAP理论中,由于网络分区和节点故障是不可避免的,因此分布式系统最多只能同时满足其中的两个特性。具体来说,系统可以选择满足CA(一致性和可用性)或CP(一致性和分区容错性)或AP(可用性和分区容错性)中的任意两个特性。不同的选择会对应不同的系统设计和实现方式,以满足不同的业务需求和应用场景。

CAP 不可能都取,只能取其中2个的原因如下:
1.如果C是第一需求的话,那么会影响A的性能,因为要数据同步,不然请求结果会有差异,但是数据同步会消耗时间,期间可用性就会降低。

2.如果A是第一需求,那么只要有一个服务在,就能正常接受请求,但是对于返回结果变不能保证,原因是,在分布式部署的时候,数据一致的过程不可能想切线路那么快。

3.再如果,同时满足一致性和可用性,那么分区容错就很难保证了,也就是单点,也是分布式的基本核心。

  需要注意的是,CAP理论并不是要求系统必须严格满足其中的两个特性,而是提供了一种权衡和选择的思路。在实际应用中,系统可以根据具体的业务需求和场景来选择合适的特性组合,并在实现过程中进行一定的折衷和优化。

三、Eureka、ZooKeeper、Consul、Nacos原理说明以及优缺点分析。

1. ZooKeeper:

  ZooKeeper是一个分布式的、开放源码的分布式应用程序协调服务,是Google的Chubby的一个开源实现,并且是Hadoop和Hbase等分布式系统的重要组件。

CAP理论保证:ZooKeeper注重CP(一致性与容错性),但在选举期间若注册服务瘫痪,虽然服务最终会恢复,但选举期间是不可用的。

健康检查:ZooKeeper使用TCP的KeepAlive保持客户端和服务端的连接,如果客户端在一段时间内没有向注册中心发送心跳,则会被摘除。

负载均衡:ZooKeeper本身不支持负载均衡。

安全性:支持ACL。

1.1 优缺点

优势
①.一致性:ZooKeeper使用ZAB协议保证了数据的一致性,所有写操作都由Leader处理,并通过复制机制传播给Followers,确保数据的一致性。

②.可靠性:ZooKeeper使用持久化日志来记录所有的写操作,保证数据的可靠性和可恢复性。即使Leader节点宕机,新的Leader也可以从日志中恢复数据。

③.高性能:ZooKeeper使用内存数据库存储数据,快速地响应读操作,并通过Leader-Follower模式进行并行处理,提高写操作的吞吐量。

④.分布式协调:ZooKeeper提供了丰富的原语,如锁、队列、通知等,支持复杂的分布式协调和通信操作。

⑤.灵活性:ZooKeeper允许在集群运行时动态添加或删除节点,灵活地适应不同规模和需求的系统。

劣势
①.短暂的不可用性:尽管选举会尽快选出新的Leader,但仍然存在短暂的不可用性。

②.配置相对复杂:与一些更现代的服务发现工具相比,ZooKeeper的配置可能相对复杂。
在这里插入图片描述

2. Eureka:
  Eureka是Netflix开发的一个服务发现和注册中心,它基于REST(Representational State Transfer)风格,主要用于微服务架构中的服务注册与发现。Eureka通过提供高可用性、动态服务发现和负载均衡等功能,帮助开发者在分布式系统中更轻松地管理微服务。

CAP理论保证:Eureka注重AP(可用性与容错性),各个节点是平等的,只要有一台Eureka就可以保证服务可用,但查询到的数据并不是最新的。

健康检查:Eureka通过客户端心跳来确定客户端是否启动,需要显式配置健康检查支持。

负载均衡:Eureka本身不支持负载均衡,但可以通过Ribbon等第三方库实现。

安全性:Eureka在安全性方面没有特别的支持。

2.1 优缺点

优势
①.高可用性:Eureka具有集群和负载均衡的能力,能够提供高可用性的服务注册和发现机制。

②.易于使用:Eureka提供了简单的API和UI界面,使得开发人员可以方便地进行服务注册和发现。

③.扩展性强:Eureka的设计原则是可扩展性,可以方便地添加新的服务节点或新增服务实例。

④.配置灵活:Eureka提供了各种配置选项,可以根据实际需求进行自定义配置,满足不同场景的需求。

⑤.自我保护机制:Eureka具有自我保护机制,即使在网络异常或部分节点故障的情况下,也能保持服务的可用性。

劣势
①客户端负载均衡:Eureka本身不支持负载均衡,需要通过第三方库(如Ribbon)实现。

在这里插入图片描述

3.Consul:
  Consul是一个开源的分布式服务发现和配置管理工具,由HashiCorp公司开发。它具备服务发现、健康检查、键值存储和分布式一致性等核心功能,支持多数据中心,是构建分布式系统的重要工具之一。

健康检查:Consul的健康检查相对更为详细,可以检查内存使用情况、文件系统空间等。

负载均衡:Consul本身不支持负载均衡,但可以通过Fabio等第三方工具实现。

安全性:支持ACL和HTTPS安全通道。

Consul在CAP理论中更偏向于CP,但也会根据实际情况进行调整以保证可用性。

3.1 优缺点

优势
①.服务注册与发现:Consul的客户端可以作为一个服务注册到Consul,也可以通过Consul来查找特定的服务提供者,并进行调用。

②.健康检查:Consul客户端会定期发送健康检查数据和服务端进行通讯,判断客户端的状态、内存使用情况是否正常,用来监控整个集群的状态。

③.KV Store:Consul还提供了一个容易使用的键值存储,可以用来保持动态配置,协助服务协调、建立Leader选举,以及开发者想构造的其它一些事务。

④.安全性:Consul支持ACL和HTTPS安全通道。

劣势
①.负载均衡:Consul本身不支持负载均衡,需要通过第三方工具(如Fabio)实现。

在这里插入图片描述

4.Nacos:
  Nacos是Dynamic Naming and Configuration Service的首字母简称,是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos主要提供三种功能:持久化节点注册、非持久化节点注册和配置管理。

CAP理论保证:Nacos可以根据需求配置为CP或AP。服务注册功能对可用性的要求要高于一致性。

负载均衡:Nacos本身具备负载均衡能力,可以提供服务端负载均衡与客户端负载均衡。

配置管理:Nacos不仅提供服务注册和发现,还提供了配置管理功能,使用起来相对简洁,适合对性能要求比较高的大规模场景。

安全性:Nacos在安全性方面也有考虑,但具体的支持程度可能因版本而异。

4.1 优缺点

优势
①.一体化管理:Nacos不仅提供了服务注册和发现,还提供了配置管理功能,使用起来相对简洁,适合对性能要求比较高的大规模场景。

②.负载均衡:Nacos本身具备负载均衡能力,可以提供服务端负载均衡与客户端负载均衡。

③.简单易用:内置数据库可以让用户在使用Nacos时无需额外配置和安装数据库,简化了部署和管理的流程。

劣势
①.扩展性限制:内置数据库通常具有固定的存储能力和性能限制,难以满足大规模系统的扩展需求。

请注意,这些工具的优劣势可能因版本和具体的使用场景而有所不同,因此在选择时需要根据实际情况进行权衡。

在这里插入图片描述
  总结而言,选择注册中心组件应充分考虑项目所需的特定功能、系统性能需求、团队技术栈和长期发展战略。Nacos和Consul在现代化微服务架构中展现出卓越的优势,而Eureka和ZooKeeper在特定条件下依然不失为可靠的选择。切记,因地制宜,才能让选择成为推动项目成功的关键动力。

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

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

相关文章

[华为OD] C卷 dfs 特殊加密算法 100

题目: 有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。 规则如下 1•明文为一段数字串由0-9组成 2.密码本为数字0-9组成的二维数组 3•需要按明文串的数字顺序在密码本里找到同样的数字串…

PUBG非升级实用枪皮-部分盘点

藏匿处的黑货箱武器需要耗费高额成本才能升级 对于像我这样的日常休闲玩家来说是一笔不小的(巨大的!)负担 其实有许多普通非升级枪皮也是不错的选择 今天就来盘点一下我自己日常在用的普通皮 来看看你是不是也在用一样的 (仅是盘点…

【OceanBase诊断调优】—— 租户资源统计项及其查询方法

本文主要介绍 OceanBase 数据库中租户资源统计项及其查询方法。 适用版本 OceanBase 数据库 V4.1.x、V4.2.x 版本。 CPU 资源统计项 逻辑 CPU 使用率(线程处理请求的时间占比)。 通过虚拟表 __all_virtual_sysstat 在 SYS 系统租户下,查看…

09.zabbix自定义模块并使用

zabbix自定义模块并使用 根据tcp的11中状态获取值,进行批量配置监控项 [rootyunlong66 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp.conf UserParameterESTABLISHED,netstat -antp |grep -c ESTABLISHED UserParameterSYN_SENT,netstat -antp |grep -c SYN_SENT Use…

Obsidian/Typora设置图床

在obsidian中默认图片是保存在本地的,但是在要导出文档上传到网上时,由于图片保存在本地,会出现无法加载图片的问题。 这里引用的一段话: 这里使用picgo-core和gitee实现图床功能, 参考1: Ubuntu下PicGO配…

Github学习

1.Git与Github 区别: Git是一个分布式版本控制系统,简单的说就是一个软件,用于记录一个或若干个文件内容变化,以便将来查阅特点版本修订情况的软件。 Github是一个为用户提高Git服务的网站,简单说就是一个可以放代码的地方。Gi…

C语言 | Leetcode C语言题解之第85题最大矩形

题目&#xff1a; 题解&#xff1a; int maximalRectangle(char** matrix, int matrixSize, int* matrixColSize) {int m matrixSize;if (m 0) {return 0;}int n matrixColSize[0];int left[m][n];memset(left, 0, sizeof(left));for (int i 0; i < m; i) {for (int j …

SeetaFace6人脸活体检测C++代码实现Demo

SeetaFace6包含人脸识别的基本能力&#xff1a;人脸检测、关键点定位、人脸识别&#xff0c;同时增加了活体检测、质量评估、年龄性别估计&#xff0c;并且顺应实际应用需求&#xff0c;开放口罩检测以及口罩佩戴场景下的人脸识别模型。 官网地址&#xff1a;https://github.co…

【补充】图神经网络前传——DeepWalk

论文阅读 论文&#xff1a;https://arxiv.org/pdf/1403.6652 参考&#xff1a;【论文逐句精读】DeepWalk&#xff0c;随机游走实现图向量嵌入&#xff0c;自然语言处理与图的首次融合_随机游走图嵌入-CSDN博客 abstract DeepWalk是干什么的&#xff1a;在一个网络中学习顶点…

【Mac】Ghost Buster Pro(苹果电脑内存清理专家) v3.2.5安装教程

软件介绍 Ghost Buster pro是一款针对Mac系统的电脑清理和优化工具&#xff0c;可以帮助用户清理系统垃圾、修复注册表错误、卸载不需要的软件、管理启动项等&#xff0c;从而提高系统性能和稳定性。 安装教程 1.打开镜像包&#xff0c;拖动「Ghost Buster Pro」到应用程序中…

【Linux网络】Https【下】{CA认证/证书的签发与认证/安全性/总结}

文章目录 1.引入证书【为方案五铺垫】1.1再谈https1.2SSL/TLS1.3CA机构1.4理解数字签名1.4继续铺垫1.5方案五服务端申请证书回顾一二三回顾方案四方案五过程寻找方案五的漏洞客⼾端对证书进⾏认证 2.查看证书2.1查看浏览器的受信任证书发布机构2.2中间⼈有没有可能篡改该证书2.…

差分约束 C++ 算法例题

差分约束 差分约束 是一种特殊的 n 元一次不等式组&#xff0c;m 个约束条件&#xff0c;可以组成形如下的格式&#xff1a; { x 1 − x 1 ′ ≤ y 1 x 2 − x 2 ′ ≤ y 2 ⋯ x m − x m ′ ≤ y m \begin{cases} x_1-x_1^{} \le y_1 \\ x_2-x_2^{} \le y_2 \\ \cdots \\ x_…

SpringBoot集成jxls2实现复杂(多表格)excel导出

核心依赖 需求 导出多个表格&#xff0c;包含图片&#xff0c;类似商品标签 1.配置模板 创建一个xlsx的模板文件&#xff0c;配置如下 该模板进行遍历了两次&#xff0c;因为我想要导出的数据分为两列展示&#xff0c;左右布局&#xff0c;一个循环实现不了&#xff0c;所以采…

百面算法工程师 | 正则优化函数——BN、LN、Dropout

本文给大家带来的百面算法工程师是正则优化函数&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们将总结一些BN、LN、Dropout的相关知识&#xff0c;并提供参考的回答及其理论基础&#xff0c;以…

C++ | Leetcode C++题解之第85题最大矩形

题目&#xff1a; 题解&#xff1a; class Solution { public:int maximalRectangle(vector<vector<char>>& matrix) {int m matrix.size();if (m 0) {return 0;}int n matrix[0].size();vector<vector<int>> left(m, vector<int>(n, 0)…

【HCIP学习】BGP对等体组、聚合、路由反射器、联盟、团体属性

一、大规模BGP网络所遇到的问题 BGP对等体众多&#xff0c;配置繁琐&#xff0c;维护管理难度大 BGP路由表庞大&#xff0c;对设备性能提出挑战 IBGP全连接&#xff0c;应用和管理BGP难度增加&#xff0c;邻居数量过多 路由变化频繁&#xff0c;导致路由更新频繁 二、解决大…

使用QT-QSqlQuery::value()遇到的问题

在实现客户端间好友添加功能时&#xff0c;我通过以下函数想实现数据库对好友信息的保存 bool OpeDB::handleAddFriend_repound(const char *pername, const char *name) { // pername 被添加方 name 申请添加方 qDebug() << pername << " " &l…

Nginx(简洁版)

基本配置 worker_processes 1; //默认为1&#xff0c;表示开启一个业务进程 events //事件驱动模块&#xff08;&#xff09;{worker_connections 1024; //单个业务进程可接受连接数 } http{include mime.types; // 引入http mime类型&#xff08;在外部已经定义好&#xff0c…

如何在huggingface上申请下载使用llama2/3模型

1. 在对应模型的huggingface页面上提交申请 搜索对应的模型型号 登录huggingface&#xff0c;在模型详情页面上&#xff0c;找到这个表单&#xff0c;填写内容&#xff0c;提交申请。需要使用梯子&#xff0c;country填写梯子的位置吧(比如美国&#xff09; 等待一小时左右…

SEMI启动SiC专有技术项目

公司郑重声明&#xff0c;其正致力于筛选那些能够稳定输出、且可重复使用的关键参数性能。SEMI&#xff0c;这家SiC领域的佼佼者&#xff0c;已经启动了一项独具匠心的专有技术&#xff08;KGD&#xff09;筛选程序。该程序旨在为客户提供高品质的、经过严格电气分类与光学检验…