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重试可能无效