模块十_SpringCloud组件设计原理(上)

2020-11-01  本文已影响0人  西西弗斯XD

序言:

文章内容输出来源:拉勾教育Java高薪训练营。
本篇文章是学习课程中的一部分课后笔记

一、 Spring Cloud 简介

1、 Spring Cloud 是什么
2、 Spring Cloud 解决什么问题
3、 Spring Cloud 核⼼组件
组件.png 体系结构.png
4、Spring Cloud 与 Dubbo 对⽐

二、Eureka 组件

1、Eureka服务注册中⼼
2、Eureka交互流程
交互流程.png
3、 Eureka细节详解
instance:
 prefer-ip-address: true
 metadata-map:
 # ⾃定义元数据(kv⾃定义)
 cluster: cl1
 region: rn1
4、 ⾃我保护机制
eureka:
 server:
 enable-self-preservation: false # 关闭⾃我保护模式(缺省为打开)
5、 EurekaClient启动过程要做什么事情:

三、Ribbon负载均衡

1、关于负载均衡
2、Ribbon负载均衡策略
负载策略.png
3、Ribbon部分原理
原理.png

四、Hystrix熔断器

1、雪崩效应
2、雪崩效应问题解决方案
3、 Hystrix简介(豪猪----->刺)

Hystrix主要通过以下⼏点实现延迟和容错:

五、Feign简介

1、 Feign 特点:
  1. Feign可帮助我们更加便捷,优雅的调⽤HTTP API:不需要我们去拼接url然后调⽤restTemplate的api,在SpringCloud中,使⽤Feign⾮常简单,创建⼀个接⼝(在消费者--服务调⽤⽅这⼀端),并在接⼝上添加⼀些注解,代码就完成了;
  2. SpringCloud对Feign进⾏了增强,使Feign⽀持了SpringMVC注解(OpenFeign);
2、 Feign 对负载均衡的⽀持
3、Feign对熔断器的⽀持

1)开启Hystrix之后,Feign中的⽅法都会被进⾏⼀个管理了,⼀旦出现问题就进⼊对应的回退逻辑处理;
2)针对超时这⼀点,当前有两个超时时间设置(Feign/hystrix),熔断的时候是根据这两个时间的最⼩值来进⾏的,即处理时⻓超过最短的那个超时时间了就熔断进⼊回退降级逻辑;

4、Feign对请求压缩和响应压缩的⽀持
feign:
 compression:
 request:
 enabled: true # 开启请求压缩
 mime-types: text/html,application/xml,application/json # 设置压缩的数据类
型,此处也是默认值
 min-request-size: 2048 # 设置触发压缩的⼤⼩下限,此处也是默认值
 response:
 enabled: true # 开启响应压缩
5、Feign的⽇志级别配置
// Feign的⽇志级别(Feign请求过程信息)
// NONE:默认的,不显示任何⽇志----性能最好
// BASIC:仅记录请求⽅法、URL、响应状态码以及执⾏时间----⽣产问题追踪
// HEADERS:在BASIC级别的基础上,记录请求和响应的header
// FULL:记录请求和响应的header、body和元数据----适⽤于开发及测试环境定位问题
@Configuration
public class FeignConfig {
 @Bean
 Logger.Level feignLevel() {
 return Logger.Level.FULL;
 }
}
logging:
 level:
 # Feign⽇志只会对⽇志级别为debug的做出响应
 com.lagou.edu.controller.service.ResumeServiceFeignClient: debug

六、GateWay⽹关组件

1、 GateWay简介
2、 GateWay架构中的位置
网关位置.png
3、GateWay核⼼概念
3、 GateWay⼯作过程
  1. 客户端向Spring Cloud GateWay发出请求,然后在GateWay Handler Mapping中找到与请求相匹配的路由,将其发送到GateWay Web Handler;

  2. Handler再通过指定的过滤器链来将请求发送到我们实际的服务执⾏业务逻辑,然后返回。

  3. 过滤器之间⽤虚线分开是因为过滤器可能会在发送代理请求之前(pre)或者之后(post)执⾏业务逻辑。

  4. Filter在“pre”类型过滤器中可以做参数校验、权限校验、流量监控、⽇志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改、⽇志的输出、流量监控等。

七、 Spring Cloud Config 分布式配置中⼼

1、 Config简介
结构示意图.png
2、Config配置⾃动更新

实现⼀次通知处处⽣效

自动更新配置.png

八、Spring Cloud Stream消息驱动组件

1、Stream重要概念
结构图.png
2、Stream消息通信⽅式
3、Stream编程注解
image.png
4、Stream消息分组

在服务消费者端设置 spring.cloud.stream.bindings.input.group 属性,多个消费者实例配置为同⼀个group名称(在同⼀个group中的多个消费者只有⼀个可以获取到消息并消费)。

九、常⻅问题及解决⽅案

1、 Eureka 服务发现慢
缓存.png
2、 Spring Cloud 超时设置问题
  1. Ribbon 如果采⽤的是服务发现⽅式,就可以通过服务名去进⾏转发,需要配置Ribbon的超时。
    Rbbon的超时可以配置全局ribbon.ReadTimeoutribbon.ConnectTimeout。也可以在前⾯指定服务名,为每个服务单独配置,⽐如 user-service.ribbon.ReadTimeout。

  2. Hystrix Hystrix全局超时配置就可以⽤default来代替具体的command名称;
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000
    @HystrixCommand 的话,可以⾃定义 commandKey。

  3. Feign Feign本身也有超时时间的设置,如果此时设置了Ribbon的时间就以Ribbon的时间为准,如果没设置Ribbon的时间但配置了Feign的时间,就以Feign的时间为准。
    Feign的时间同样也配置了连接超时时间(feign.client.config.服务名称.connectTimeout)和读取超时时间(feign.client.config.服务名称.readTimeout)。

上一篇 下一篇

猜你喜欢

热点阅读