首页 > 关于Spring Cloud
头像
就渴望秃头
编辑于 2020-08-17 23:27
+ 关注

关于Spring Cloud

Spring Cloud

  1. Spring Cloud 是什么

    集成了多个框架工具,来解决微服务终于到的各种问题:

    • 远程调用(RPC)
    • 负载均衡
    • 重试(容错)
    • 降级
    • 熔断
    • 监控
    • 配置中心

    Spring Cloud 是一个框架集,微服务全家桶

  2. Spring Cloud 不是什么

    不是一个独立框架

Spring Cloud 和 Dubbo 区别

  • Dubbo 只解决远程调用,不能解决其他问题

    如果遇到其他问题,需要自己研发,或自己集成其他工具。

  • Spring Cloud 是微服务全家桶,结合Spring Boot来实现“开箱即用”

eureka

Spring Cloud 支持多款注册中心工具:eureka,zookeeper,consul.......

eureka运行机制:

  1. 注册

    应用启动时,会连接注册中心进行注册。

    如果无法连接注册中心,它会一次一次的反复进行注册,直到成功为止。

  2. 拉取

    每个服务都会从注册中心拉取注册表,每30秒会重新拉取一次注册表进行更新。

  3. 心跳

    客户端会每30秒向 eureka 注册中心发送一次心跳数据,eureka 连续3次收不到心跳,认为服务已经死掉,会从注册表删除服务。

  4. 自我保护模式

    是一种特殊情况

    由于网络不稳定,造成 85%以上的服务器出现心跳异常,这时会进入自我保护模式,在保护模式下,所有服务都不删除,直到网络恢复,会自动退出自我保护模式。


eureka 和 zookeeper 区别

  • eureka

    • 强调 AP - 可用性、分区容错性
    • 集群 - 对等结构
  • zookeeper

    • 强调 CP - 一致性、分区容错性
    • 集群 - 主从结构

RestTemplate

Spring Cloud 使用的一个远程调用工具

(服务之间相互调用)

RestTemplate 是Springboot提供的一个远程调用工具

  • getForObject("url", 转换类型, 提交的参数)
  • postForObject("url", 协议体数据, 转换类型)

Ribbon

Ribbon 的作用,解决的问题:

  1. 负载均衡(微服务系统必须功能)

    访问压力可以分散到多态服务器

  2. 重试(不是必须功能)

    当第一次请求失败或等待超时,可以自动发起重试请求


Ribbon 负载均衡

  1. ribbon依赖(在 eureka client 中已经包含)
  2. 添加 @LoadBalanced注解,用Ribbon封装 RestTemplate 对象,对 RestTemplate功能进行增强

Ribbon 重试

容错


当调用后台服务失败,可以自动重试,如果重试成功,可以向客户端正常返回结果。


添加Ribbon重试:

  1. 添加 pring-retry 依赖

  2. 设置重试参数:

    • MaxAutoRetries - 单台服务器的重试次数
    • MaxAutoRetriesNextServer - 更换服务器的次数
    • OkToRetryOnAllOperations - 是否对所有类型请求都重试,默认只对 get 重试,如果要对所有请求重试设置成 true


下面两个超时设置不能在 yml 中配置,需要在 java 代码中设置

  • connectTimeout - 建立连接超时时间
  • readTimeout - 已建立连接并发送了请求,等待响应的超时时间


Hyxtrix

容错工具

Hystrix提供的容错功能:

  1. 降级
  2. 熔断


降级

当调用后台服务失败,或超时,可以向客户端返回降级结果 。

快速失败:

  • 客户端不必长时间阻塞等待后台服务结果,超时后可以快速获得反馈。
  • 防止雪崩、防止错误传播



熔断

熔断就像家里的电箱,有一个总闸,如果访问量过大(过热),触发熔断,家里的电路会被断开。


当系统访问量过大,出现大量的失败情况时,会触发熔断,断路器打开后,所有的请求直接执行降级代码返回降级结果。


触发熔断的条件:

  1. 10秒内20次请求(必须首先满足)
  2. 50%失败,执行了降级代码


添加 Hystrix 降级

  1. hystrix 依赖

  2. 添加主程序注解@EnalbleCircuitBreaker,启用 hystrix 断路器,触发断路器自动配置
  3. 添加降级代码
    @HystrixCommnad(fallbackMethod="降级方法")
    public void a() {
        restTemplate.getForObject("http://.....");
    }

hystrix 的超时

默认超时时长是1秒


hystrix dashboard

hystrix仪表盘,对hystrix出现错误的情况进行监控


actuator

Springboot 提供的一个项目监控工具,可以监控项目的各种运行数据,hystrx利用actuator,可以添加hystrix的监控数据。


添加 actuator:

  1. actuator依赖

  2. 暴露监控数据:

在.yml配置文件中输入即可知晓
m.e.w.e.i="*"  # 暴露所有的监控数据

m.e.w.e.i=health  # 暴露健康状态数据

m.e.w.e.i=health,beans,env,hystrix.stream # 暴露多种监控数据

m.e.w.e.i=hystrix.stream

搭建仪表盘项目

hystrix仪表盘是一个完全独立的项目,启动后,需要在它的界面上指定监控数据的路径。

  1. 新建 hystrix-dashboard 项目
  2. 添加 hystrix dashboard 依赖
  3. yml 配置选择端口 4001
  4. 主程序添加注解,启用 hystrix dashboard:@EnableHystrixDashboard

Feign

  1. 声明式客户端

只需要定义一个抽象的接口,就可以通过接口调用远程服务,不需要写具体调用代码。

例如调用后台商品服务,接口可以这样定义:

@FeignClient(name="item-service")
public interface ItemFeignClient {
    @GetMapping("/{orderId}")
    JsonResult<List<Item>> getItems(@PathVarible String orderId);
}
  • 通过注解,配置以下三点:

    1. 服务id - 确定调用哪个远程服务
    2. 路径 - 调用一个服务的哪个路径
    3. 参数 - 向这个路径提交什么参数数据



  1. 集成 Ribbon

Feign集成了Ribbon,提供了Ribbon的默认配置。

默认已经启用了负载均衡和重试,0配置就可以使用Ribbon。


重试的默认配置:

MaxAutoRetries: 0

MaxAutoRetriesNextServer: 1

ReadTimeout: 1000



  1. 集成 Hystrix


Feign可以集成Hystrix,默认不启用Hystrix,Feign不推荐启用Hystrix(后面再进行分析)。


启用Hystrix,添加基础配置:

  1. 添加 Hystrix 完整依赖
  2. yml 配置在Feign中启用hystrix:feign.hystrix.enabled=true
  3. 主程序添加 @EntalbeCircuitBreaker


添加降级代码

添加一个单独的降级类,需要实现声明式客户端接口

@Component public class ItemFeignClientFB implements ItemFeignClient {
    实现降级方法,返回降级响应
}
在接口上,还需要指定降级类:
@FeignClient(name="item-service",fallback=降级类)
interface ItemFeignClient {
    
}
  1. 添加Hystrix监控
  2. actuator依赖
  3. 配置暴露 hystrix.stream 监控端点
m.e.w.e.i=hystrix.stream

访问 http://localhost:3001/actuator/hystrix.stream

访问仪表盘,访问上面的监控数据










全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐