news 2026/4/24 17:56:38

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 21:12:32

SpringCloud-04-Circuit Breaker断路器

一、概述1、分布式系统面临的问题&#xff1f;&#xff1f;复杂分布式体系结构中的应用程序有数十个依赖关系&#xff0c;每个依赖关系在某些时候将不可避免地失败。服务雪崩&#xff1a;多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服…

作者头像 李华
网站建设 2026/4/20 9:56:43

springboot校园快递存取件系统vue

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

作者头像 李华
网站建设 2026/4/19 0:39:58

Conda环境迁移困难?改用PyTorch Docker镜像一劳永逸

Conda环境迁移困难&#xff1f;改用PyTorch Docker镜像一劳永逸 在深度学习项目开发中&#xff0c;你是否经历过这样的场景&#xff1a;同事刚提交的代码在自己机器上跑不通&#xff0c;报错信息五花八门——CUDA版本不匹配、cuDNN缺失、torchvision版本冲突……一番折腾后发现…

作者头像 李华
网站建设 2026/4/19 0:42:26

Git Commit规范助力AI开发:结合PyTorch项目的版本管理技巧

Git Commit规范助力AI开发&#xff1a;结合PyTorch项目的版本管理技巧 在深度学习项目中&#xff0c;我们常常遇到这样的场景&#xff1a;某次实验准确率突然提升了3%&#xff0c;但翻遍训练日志和代码变更记录&#xff0c;却无法确定是哪个改动带来的效果。团队成员提交的 git…

作者头像 李华
网站建设 2026/4/23 17:34:51

Conda环境导入导出:跨平台迁移PyTorch项目

Conda环境导入导出&#xff1a;跨平台迁移PyTorch项目 在深度学习项目的日常开发中&#xff0c;你是否遇到过这样的场景&#xff1a;本地训练一切正常&#xff0c;模型跑得飞快&#xff0c;信心满满地把代码推到服务器上准备大规模训练&#xff0c;结果一运行就报错——torch.…

作者头像 李华
网站建设 2026/4/23 13:09:09

如何在云服务器上部署PyTorch-CUDA环境?详细图文教程

如何在云服务器上部署 PyTorch-CUDA 环境&#xff1f;—— 从零到训练的实战指南 在深度学习项目中&#xff0c;最让人头疼的往往不是模型设计本身&#xff0c;而是环境搭建&#xff1a;CUDA 驱动装不上、PyTorch 版本不兼容、cuDNN 缺失……这些“环境陷阱”常常让开发者耗费…

作者头像 李华