栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Sentinel 对 Dubbo 服务的降级与限流

Sentinel 对 Dubbo 服务的降级与限流

一、Sentinel 是什么

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

Sentinel 分为两个部分:

    核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo/Spring Cloud 等框架也有较好的支持。控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器,Sentinel 控制台提供一个轻量级的控制台,它提供机器发现、单机资源实时监控、集群资源汇总,以及规则管理的功能。
二、下载/运行 Sentinel 控制台

注意:启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本。

使用如下命令启动控制台:

java -Dserver.port=8080 
-Dcsp.sentinel.dashboard.server=localhost:8080 
-Dproject.name=sentinel-dashboard  
-jar sentinel-dashboard.jar

其中 -Dserver.port=8080 用于指定 Sentinel 控制台端口为 8080。

访问http://localhost:8080查看控制台信息。

三、客户端 Dubbo 集成

引入 Maven 依赖:


    com.alibaba.csp
    sentinel-dubbo-adapter
    1.4.0



    com.alibaba.csp
    sentinel-transport-simple-http
    1.4.0

启动时加入 JVM 参数:

-Djava.net.preferIPv4Stack=true 
-Dcsp.sentinel.api.port=8720 
-Dcsp.sentinel.dashboard.server=localhost:8787 
-Dproject.name=example-customer

启动项参数说明:

    -Dcsp.sentinel.api.port 接受数据推荐的http端口-Dcsp.sentinel.dashboard.server 指定控制台地址-Dproject.name 指定控制台显示的项目名称
四、Dashboard/客户端改造

1️⃣改造前:客户端利用 sentinel-transport-simple-http 模块暴露一个特定的端口,Sentinel Dashboard 通过 http 的形式进行数据推送,客户端接收后将规则保存在本地内存中。

2️⃣改造后:客户端注册到相关的注册中心中,Sentinel Dashboard 控制台将配置信息推送到配置中心,如 nacos,zookeeper 中,由配置中心去进行配置推送。

五、改造过程

1️⃣Dashboard 改造

Dashboard 加入 datasource 支持,以 zookeeper 为例,先加入支持包。


    com.alibaba.csp
    sentinel-datasource-zookeeper

然后进行 DynamicRuleProvider,DynamicRulePublisher 适配,并约定一系列协议路径,如下:

    流量控制规则:/sentinel/rules/{appName}/flow黑白名单规则:/sentinel/rules/{appName}/authority熔断降级规则:/sentinel/rules/{appName}/degrade热点参数规则:/sentinel/rules/{appName}/param负载保护规则:/sentinel/rules/{appName}/system

2️⃣客户端改造

加入支持包,以 zookeeper 为例:


    com.alibaba.csp
    sentinel-datasource-zookeeper

并进行注册,下面以限流规则为例:

ReadableDataSource> flowRuleDataSource = 
      new ZookeeperDataSource<>(zkAdress, appPath), 
      source -> JSON.parseObject(source, new TypeReference>() {}));
FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/745885.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号