雪崩效用

服务雪崩效应是一种因“服务提供者的不可用”(原因)导致“服务调用者不可用”(结果),并将不可用逐渐放大的现象。如下图所示:
Sentinel - 图1

服务容错

我们没办法预防雪崩效应的发生,只能尽可能的去做好容错。容错就是提供服务不可用的一种处理方式,避免雪崩。常见的服务容错的机制如下:

  1. 超时
    超时模式,是一种最常见的容错模式,常见的有设置网络连接超时时间,一次RPC的响应超时时间等。在分布式服务调用的场景中,它主要解决了当依赖服务出现建立网络连接或响应延迟,不用无限等待的问题,调用方可以根据事先设计的超时时间中断调用,及时释放关键资源,如Web容器的连接数,数据库连接数等,避免整个系统资源耗尽出现拒绝对外提供服务这种情况。
  2. 限流
    限流是指在一段时间内,定义某个客户或应用可以接收或处理多少个请求的技术。例如,通过限流,你可以过滤掉产生流量峰值的客户和微服务,或者可以确保你的应用程序在自动扩展(Auto Scaling)失效前都不会出现过载的情况。你还可以阻止较低优先级的流量,以便为关键事务提供足够的资源
  3. 断路器
    当在短时间内多次发生指定类型的错误,断路器会开启。开启的断路器可以拒绝接下来更多的请求 – 就像防止真实的电子流动一样。断路器通常在一定时间后关闭,以便为底层服务提供足够的空间来恢复。
    Sentinel - 图2
  4. 仓壁模式
    在工业领域中,常使用舱壁将划分为几个部分,以便在有某部分船体发生破裂时,其他部分依然能密封安然无恙。舱壁的概念也可以在软件开发中用于隔离资源。通过使用舱壁模式,我们可以保护有限的资源不被用尽。例如,如果我们有两种类型的操作的话,它们都是和同一个数据库实例进行通信,并且数据据库限制连接数,这时我们可以使用两个连接池而不是使用一个共享的连接池。由于这种客户端和资源分离,超时或过度使用池的操作不会令所有其他操作失效。泰坦尼克号沉没的主要原因之一是其舱壁设计失败,水可以通过上面的甲板倒在舱壁的顶部,最后整个船淹没。

    引入sentinel

    Sentinel 是面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。

  5. 导包

    1. <dependency>
    2. <groupId>com.alibaba.cloud</groupId>
    3. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    4. </dependency>
  6. 下载控制台
    https://github.com/alibaba/Sentinel/releases
    下载下来是一个jar包 直接通过 java命令启动

  7. 配置跟控制台的通信
    spring:
    cloud:
     sentinel:
       transport:
         dashboard: localhost:8080 #控制台地址
    

要求:

理论

  1. OpenFeign的作用以及特点

    feign通过一个本地对服务接口的代理,进行对注册到注册中心的服务调用,对于调用者来说,就像调用本地接口一样。
    
  2. OpenFeign的配置方式 ``` java配置 1、配置类 FeignConfig 上加@Configuration, @Bean 注入一个feign日志级别的配置 主配置类的@FeignClient(configuration = FeignConfig.class)

属性配置 feign: client: config: default: #这里可以换成服务名进行局部配置 logger-level: full httpclient: enabled: true #开启httpclient连接池配置
max-connections: 200 max-connections-per-route: 50 connection-timeout: 200000


3、OpenFeign的执行流程

通过定义的接口信息使用java动态代理生成执行对象,对象的方法里面封装了RequestTemplate,通过其来完成响应。请求的时候调用clientAPI(两种方式:HttpClient或者okHttp),在发请求前会先去执行配置的拦截器和负载均衡器,最后发送请求


4, OpenFeign的参数注意事项

1、普通的参数必须加@RequestParam 2、JSON参数上跟@RequestBody 3、对象或者map的查询参数必须加上@SpringQueryMap


  5,什么是服务雪崩?如何发生?

服务提供者的不可用 导致 服务调用者的不可用 并将不可用逐渐放大的现象


  6,服务容错的常见处理方式

1、超时(设置网络连接超时时间); 2、限流(定义某个客户端或应用可以接收或处理多少请求); 3、断路器(指定时间内多次发生指定类型的错误); 4、仓壁模式(两种类型的操作的是同一个数据库实例,这时候可以使用两个连接池,客户端和资源分离可以保证超时或过度使用池的操作不会令其他所有操作失效)


  7,Sentinel是什么?区别控制台与Se    ntinel组件?

sentinel是面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。 ```

代码

  1. 代码规范编写(常量,异常, 响应)
  2. 2, 通过OpenFeign来调用服务
  3. 3,能够搭建Sentinel的环境