8、Sentinel服务保护框架

服务保护

服务接口保护的方案有:黑名单和白名单、对IP实现限流/熔断机制、服务降级、服务隔离机制。java

服务限流:在高并发的状况下,客户端的请求数量超出咱们设置的阈值,开启自我保护机制。直接执行服务降级的方法,不执行业务逻辑,走本地fallback方法。git

服务降级:在高并发的状况下,为了防止用户一直等待,采用限流或者熔断机制,保护咱们的服务,不执行业务逻辑,走本地fallback方法。github

服务雪崩效应

默认状况下,tomcat/jetty服务器只会有一个线程池处理全部接口的请求。这样的话就是在高并发的状况下, 若是客户端全部的请求都堆积到同一个接口上,那么会产生该服务器的全部的线程都在处理该接口,可能会致使其余的接口没法访问,短暂没有线程去访问。spring

解决方案:后端

服务隔离机制:线程池隔离或者信号量隔离机制。api

线程池隔离:每一个接口都有本身独立的线程池维护咱们的请求,每一个线程池互不影响,缺点:占用服务器内存很是大。tomcat

信号量隔离:设置处理每一个服务的线程数量的阈值,超出该线程数量,则拒绝访问。bash

Sentinel控制台

咱们能够使用代码来管理项目,可是配置写死显然很差。这里直接用控制台来管理项目,能够实现动态配置管理项目。服务器

首先 下载Sentinel 的jar包。而后使用下面命令启动控制台并发

java -Dserver.port=8718 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dcsp.sentinel.api.port=8719 -jar sentinel-dashboard.jar

后端启动

nohup java -Dserver.port=8718 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dcsp.sentinel.api.port=8719 -jar sentinel-dashboard.jar &

导入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel</artifactId>
    <version>0.2.2.RELEASE</version>
</dependency>

配置文件

cloud:
    nacos:
      discovery:
        server-addr: ip:port
    sentinel:
      transport:
        dashboard: ip:port
      eager: true

进入控制台就能够增删规则了

不过要注意的是,若是接口没有使用@SentinelResource注解,那么资源名就是访问接口的路径,若是使用了@SentinelResource注解,那么资源名就是注解指定的名称。

控制台与注解结合使用,能够指定限流、降级/熔断时候的处理方法。

相关文章
相关标签/搜索