SpringCloud微服务全家桶

本文介绍了SpringCloud工具集中的关键组件,包括注册中心Eureka的运作机制,负载均衡与重试的Ribbon应用,以及故障容错Hystrix。涵盖了服务注册、续约、远程调用和系统容错策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringCloud工具集

SpringCloud是一个工具集,集成多个工具来解决微服务中的各种问题,SpringCloud可以称之为微服务全家桶。
1.远程调用:RestTemplate
2.负载均衡:Ribbon
3.重试: Ribbon
4.降级、熔断、限流:Hystrix
5.监控:Hystrix Dashboard、Turbine、Sleuth、Zipkin
6.配置中心:Config server
在这里插入图片描述

注册中心Eureka

Eureka整体上分为两个主体:Eureka Server、Eureka Client.
在这里插入图片描述

Eureka Server:注册中心服务端

注册中心服务端对外主要提供三个功能:

服务注册

服务提供者启动时,会通过Eureka Client向Eureka Server注册信息,Eureka会存储该服务的注册信息,Eureka Server内部有两层缓存机制来维护整个注册表。

提供服务表

服务消费者在调用服务时,如果Eureka Client中没有缓存注册表的话,会从Eureka Server获取最新的注册表。

同步状态

Eureka Client通过注册、心跳机制和Eureka Server同步当前客户端的状态。

Eureka Client:注册中心客户端

Eureka Client 是一个 Java 客户端,用于简化与 Eureka Server 的交互。Eureka Client 会拉取、更新和缓存 Eureka Server 中的信息。因此当所有的 Eureka Server 节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者,但是当服务有更改的时候会出现信息不一致。

Register: 服务注册

服务的提供者,将自身注册到注册中心,服务提供者也是一个 Eureka Client。当 Eureka Client 向 Eureka Server 注册时,它提供自身的元数据,比如 IP 地址、端口,运行状况指示符 URL,主页等。

Renew: 服务续约

Eureka Client 会每隔 30 秒发送一次心跳来续约。 通过续约来告知 Eureka Server 该 Eureka Client 运行正常,没有出现问题。 默认情况下,如果 Eureka Server 在 90 秒内没有收到 Eureka Client 的续约,Server 端会将实例从其注册表中删除,此时间可配置,一般情况不建议更改。
Eureka和zooKeeper区别:
eureka:

  • 强调AP(可用性)
  • 集群结构(对等结构)

zookeeper:

  • 强调cp(一致性)
  • 集群结构(主从结构)

CAP理论提出就是针对分布式数据库环境的,所以P这个属性是必须具备的。
P就是在分布式环境下,由于网络的问题可能导致某个节点和其他节点失去联系,这就形成了P,也就是由于网络原因,将系统成员分为2个隔离区域,互相无法知道对方的状态,这在分布式环境中非常常见。
选择可用性A(Availability)
此时,那个失去的联系的节点依然可以向系统提供服务,不过数据不能保证是同步的了。(失去了C属性)
选择一致性C(Consistency)
为了保证数据库的一致性,我们必须等待失去的节点恢复过来,在这个过程中,那个节点是不允许对外提供服务的,这时候系统是不允许对外提供服务,这时候系统处于不可用状态。(失去A属性)

RestTemplate-提供的远程调用工具

类似于HttpClient,可以发送http请求,并处理响应。RestTemplate简化了Rest API调用,只需要用它一个方法就可以完成请求、响应、json转换。
RestTemplate和HttpClient远程调用的区别:
RestTemplate:
http调用
效率低
Dubbo:
RPC调用,java序列化
效率高

Ribbon

SpringCloud集成的工具,作用是负载均衡和重试

负载均衡

Ribbon对RestTemplate做了封装,增强了RestTemplate的功能
1.获得地址表
2.轮询一个服务的主机地址列表
3.RestTemplate负责执行最终调用
添加负载均衡
1.ribbon依赖
2.@LoadBalanced 注解,对 RestTemplate 进行功能增强
3.修改调用地址,使用 服务id,而不是具体主机地址
Ribbon 重试
一种容错机制,当调用远程服务失败,可以自动重试调用

添加重试:

添加 spring-retry 依赖
配置重试参数
在yml中配置
MaxAutoRetries:单台服务器的
MaxAutoRetriesNextServer:更换服务器的次数
在java代码中设置
ConnectTimeout:与远程服务建立网络连接的超时时间
ReadTimeout:连接已建立,请求已发送,等待响应的超时时间

Hystrix 系统容错工具

降级
1.调用远程服务失败(宕机、500错、超时),可以降级执行当前服务中的一段代码,向客户端返回结果
2.快速失败

熔断
1.当访问量过大,出现大量失败,可以做过热保护,断开远程服务不再调用
2.限流
3.防止故障传播、雪崩效应。

降级

1.hystrix依赖
2.启动类添加注解 @EnableCircuitBreaker
3.添加降级代码
// 当调用远程服务失败,跳转到指定的方法,执行降级代码
@HystrixCommand(fallbackMethod=“方法名”)
远程调用方法() {
restTemplate.getForObject(url,…);
}

Hystrix超时

Hystrix有默认的超时时间:1秒
Hystrix超时要大于ribbon总的重试时间,否则,ribbon重试可能无效

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值