news 2025/12/29 22:48:51

SpringCloud-01-Consul服务注册与发现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringCloud-01-Consul服务注册与发现

一、概述

Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。

供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。

它具有很多优点包括:

  • 服务发现:Consul 的客户端可以注册服务,其他客户端可以使用 Consul 发现给定服务的提供者。使用DNS 或 HTTP,应用程序可以轻松找到它们所依赖的服务。
  • 健康检查:Consul客户端可以提供任意数量的健康检查,可以与给定的服务关联(“web服务器是否返回200 OK”),也可以与本地节点关联(“内存利用率是否低于90%”)。操作人员可以使用此信息监视集群运行状况,服务发现组件也可以使用此信息将通信流量路由到远离不健康主机的地方,支持多种方式,HTTP, TCP、 Docker, Shell脚本定制化监控。
  • KV 存储:应用程序可以使用Consul的分级 key/value 存储来实现各种目的,包括动态配置、特性标记、协调、leader选举等等。简单的HTTP API使其易于使用。
  • 安全服务通信:Consul可以生成和分发服务的TLS证书,以建立相互的TLS连接。可以使用意图来定义允许哪些服务进行通信。可以很容易地管理服务细分,目的可以实时更改,而不是使用复杂的网络拓扑和静态防火墙规则。
  • 多数据中心:Consul 支持开箱即用的多个数据中心。这意味着 Consul 的用户不必担心构建额外的抽象层以扩展到多个区域。
  • Raft 算法:使用Raft算法完成一致性,Raft将一致性问题分解成了三个独立的部分:leader选举、日志复制、安全性。
  • 自带web管理界面:这一点相比于zookeeper注册中心要好一点,zookeeper是没有自带管理界面的。通过管理界面可以清晰的看到注册了多少个服务,以及在管理界面还可以使用服务配置功能。

Consul 官方网站:https://www.consul.io/

二、下载与安装

Consul 下载地址:https://developer.hashicorp.com/consul/install

这里是windows用户操作:

1、解压后设置环境变量

2、查看版本号

3、开发模式启动

4、访问

http://localhost:8500/

三、服务与发现

<!--SpringCloud consul discovery --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency>
server: port: 8001 spring: application: name: cloud-payment-service ####Spring Cloud Consul for Service Discovery cloud: consul: host: localhost port: 8500 discovery: service-name: ${spring.application.name}
@SpringBootApplication @EnableDiscoveryClient //开启Consul服务注册与发现 public class Main8001 { public static void main(String[] args) { SpringApplication.run(Main8001.class,args); } }

四、CAP

  • C:Consistency(强一致性)
  • A:Availability(可用性)
  • P:Partition tolerance(分区容错性)

最多只能同时较好的满足两个:

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求。

因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:

  • CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
  • CP - 满足一致性,分区容忍必的系统,通常性能不是特别高。
  • AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

1、AP架构(Eureka)

当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。

当数据出现不一致时,虽然A, B上的注册信息不完全相同,但每个Eureka节点依然能够正常对外提供服务,这会出现查询服务信息时如果请求A查不到,但请求B就能查到。

如此保证了可用性但牺牲了一致性结论:违背了一致性C的要求,只满足可用性和分区容错,即AP。

2、CP架构(Zookeeper、Consul)

当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性,Consul 遵循CAP原理中的CP原则,保证了强一致性和分区容错性,且使用的是Raft算法,比zookeeper使用的Paxos算法更加简单。

虽然保证了强一致性,但是可用性就相应下降了,例如服务注册的时间会稍长一些,因为 Consul 的 raft 协议要求必须过半数的节点都写入成功才认为注册成功 ;在leader挂掉了之后,重新选举出leader之前会导致Consul 服务不可用。

结论:违背了可用性A的要求,只满足一致性和分区容错,即CP。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/29 22:48:46

springboot医药品进销存管理系统 医生vue可视化

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持Python(flask,django)、…

作者头像 李华
网站建设 2025/12/29 22:48:35

springboot流浪宠物救助系统 三个角色vue

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持Python(flask,django)、…

作者头像 李华
网站建设 2025/12/29 22:44:24

从实验到部署无缝衔接:PyTorch与CUDA集成镜像详解

从实验到部署无缝衔接&#xff1a;PyTorch与CUDA集成镜像详解 在深度学习项目中&#xff0c;最令人沮丧的场景莫过于——模型代码写完了&#xff0c;却卡在环境配置上。ImportError: libcudart.so.12、”CUDA not available”、驱动版本不匹配……这些问题反复出现&#xff0c;…

作者头像 李华
网站建设 2025/12/29 22:43:42

Markdown写技术博客引流利器:展示PyTorch模型训练成果

用 Markdown 展示 PyTorch 模型训练成果&#xff1a;高效表达与影响力构建 在深度学习项目中&#xff0c;写出一个能跑通的模型只是第一步。真正让工作产生价值的&#xff0c;是如何清晰地传达你的实验过程、技术选择和最终成果。很多开发者花了几周调模型&#xff0c;结果写出…

作者头像 李华
网站建设 2025/12/29 22:41:41

鸿鹄CAD-轻松搞定工程变更CAD图纸绘制

鸿鹄CAD-轻松搞定工程变更CAD图纸绘制 工程变更是项目实施过程中&#xff0c;由承包人、发包人或设计方提出&#xff0c;对合同内容、数量、质量、施工顺序及工艺等的调整。本文为大家讲解工程变更的几个常见种类、变更单模板和相应要求。以及面对图纸变更&#xff0c;如何使用…

作者头像 李华