概述
2019独角兽企业重金招聘Python工程师标准>>>
什么是Sentinel
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Sentinel 具有以下特征:
- 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
- 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
- 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
- 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
Spring Cloud接入
1.首先,修改 pom.xml 文件,引入 Sentinel starter。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2.接入限流埋点
-
HTTP 埋点
Sentinel starter 默认为所有的 HTTP 服务提供了限流埋点,如果只想对 HTTP 服务进行限流,那么只需要引入依赖,无需修改代码。 -
自定义埋点
如果需要对某个特定的方法进行限流或降级,可以通过@SentinelResource
注解来完成限流的埋点,示例代码如下:
@SentinelResource("resource")
public String hello() {
return "Hello";
}
3.通过控制台,配置限流规则
启动 Sentinel 控制台
-
首先需要获取 Sentinel 控制台,支持直接下载和源码构建两种方式。
1.1 直接下载:下载 Sentinel 控制台
1.2 源码构建:进入 Sentinel Github 项目页面,将代码 git clone 到本地自行编译打包,参考此文档。 -
启动控制台,执行 Java 命令
java -jar sentinel-dashboard.jar
完成 Sentinel 控制台的启动。 控制台默认的监听端口为 8080。Sentinel 控制台使用 Spring Boot 编程模型开发,如果需要指定其他端口,请使用 Spring Boot 容器配置的标准方式,详情请参考 Spring Boot 文档。
启动应用
- 增加配置,在应用的 /src/main/resources/application.properties 中添加基本配置信息
spring.cloud.sentinel.transport.port=8719
spring.cloud.sentinel.transport.dashboard= localhost:8080
2.启动应用,并调用服务,任意的controller暴露的http服务
配置限流规则并验证
-
访问 http://localhost:8080 页面,可以在左侧看到 naco-consumer 应用已经注册到了控制台,单击 流控规则 ,可以看到目前的流控规则为空。
-
配置 URL 限流规则:点击新增流控规则,资源名填写需要限流的 URL 相对路径,单机阈值选择需要限流的阈值,点击新增进行确认。(为了便于演示效果,这里将值设置成了 1)。
-
访问 URL,当 QPS 超过 1 时,可以看到限流效果如下。
4.Feign支持
Sentinel 适配了 Feign 组件。如果想使用,除了引入 sentinel-starter
的依赖外还需要 2 个步骤:
-
配置文件打开 sentinel 对 feign 的支持:
feign.sentinel.enabled=true
-
加入
feign starter
依赖触发sentinel starter
的配置类生效:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
这是一个 FeignClient
的简单使用示例:
@FeignClient(name = "nacos-config" ,fallback = ConfigFeignClientFallback.class, configuration = FeignConfiguration.class)
public interface ConfigFeignClient {
@RequestMapping(value = "/config/get", method = RequestMethod.GET)
String userKey();
}
class FeignConfiguration {
@Bean
public ConfigFeignClientFallback configFeignClientFallback() {
return new ConfigFeignClientFallback();
}
}
class ConfigFeignClientFallback implements ConfigFeignClient {
@Override
public String userKey() {
return "echo fallback";
}
}
5.验证降级
1.我们把服务提供方nacos-config应用停止运行。
- 访问nacos-consumer应用的使用feign的接口服务。
-
由于feign在访问nacos-config时发生异常,触发降级条件,于是结果如下:
-
重新启动nacos-config服务,访问变回正常:
6.自定义限流、降级逻辑
请参考官方文档:
-
https://github.com/spring-cloud-incubator/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md
-
https://github.com/spring-cloud-incubator/spring-cloud-alibaba/wiki/Sentinel
转载于:https://my.oschina.net/xiaominmin/blog/3058612
最后
以上就是欣喜店员为你收集整理的Spring Cloud 微服务架构实战(三)——使用alibaba-sentinel流量控制、熔断降级什么是SentinelSpring Cloud接入的全部内容,希望文章能够帮你解决Spring Cloud 微服务架构实战(三)——使用alibaba-sentinel流量控制、熔断降级什么是SentinelSpring Cloud接入所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复