zoukankan      html  css  js  c++  java
  • Sentinel安装使用和配置,sentinel-dashboard安装使用和配置

    Sentinel安装使用和配置,sentinel-dashboard安装使用和配置

    ================================

    ©Copyright 蕃薯耀 2021-04-01

    https://www.cnblogs.com/fanshuyao/

    一、Sentinel概述
    随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

    Sentinel 具有以下特征:
    丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
    完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
    广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
    完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

    Sentinel 分为两个部分:
    核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
    控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

    在限制的手段上,Sentinel 和 Hystrix 采取了完全不一样的方法。
    Hystrix 通过 线程池隔离 的方式,来对依赖(在 Sentinel 的概念中对应 资源)进行了隔离。这样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换的成本(过多的线程池导致线程数目过多),还需要预先给各个资源做线程池大小的分配。

    Sentinel 对这个问题采取了两种手段:
    通过并发线程数进行限制
    和资源池隔离的方法不同,Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响。这样不但没有线程切换的损耗,也不需要您预先分配线程池的大小。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积。当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。

    通过响应时间对资源进行降级
    除了对并发线程数进行控制以外,Sentinel 还可以通过响应时间来快速降级不稳定的资源。当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新恢复。

     


    二、Sentinel dashboard控制台安装启动
    1、Sentinel官网下载地址:

    https://github.com/alibaba/Sentinel/releases

    当前最新版本是:sentinel-dashboard-1.8.1.jar

    版本一致性:
    Spring Cloud Alibaba Version:2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE
    Sentinel Version:1.8.0
    Nacos Version:1.4.1
    RocketMQ Version:4.4.0
    Dubbo Version:2.7.8
    Seata Version:1.3.0


    Spring Cloud Alibaba Version:2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE
    Sentinel Version:1.7.1
    Nacos Version:1.2.1
    RocketMQ Version:4.4.0
    Dubbo Version:2.7.6
    Seata Version:1.2.0

    官方版本说明:

    https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

    Spring Cloud Alibaba Sentinel官网文档:

    https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

    Sentinel 控制台官网文档:

    https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0


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

    Sentinel默认启动端口是8080,和Tomcat默认的端口冲突,如果需要修改Sentinel默认启动端口,使用参数:-Dserver.port=8070

    Sentinel 启动命令格式:

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

    示例:

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

    启动后:
    INFO: Sentinel log output type is: file
    INFO: Sentinel log charset is: utf-8
    INFO: Sentinel log base directory is: C:Users用户名logscsp
    INFO: Sentinel log name use pid is: false
    Tomcat started on port(s): 8700 (http) with context path ''

    Sentinel Linux后台启动:

    nohup java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -jar /java/sentinel-dashboard-1.8.1.jar &

    Sentinel 指定日志目录启动:

    java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.log.dir=C:logssentinel-dashboard -jar sentinel-dashboard-1.8.1.jar

    启动后:
    INFO: Sentinel log output type is: file
    INFO: Sentinel log charset is: utf-8
    INFO: Sentinel log base directory is: C:logssentinel-dashboard
    INFO: Sentinel log name use pid is: false

    启动(是否注册Sentinel自己):
    不注册Sentinel自己

    java -Dserver.port=8070 -Dcsp.sentinel.log.dir=C:logssentinel-dashboard -jar sentinel-dashboard-1.8.1.jar

    注册Sentinel自己

    java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.log.dir=C:logssentinel-dashboard -jar sentinel-dashboard-1.8.1.jar

    访问地址:

    http://localhost:8070/

    用户名:sentinel
    密码:sentinel

    从 Sentinel 1.6.0 起,Sentinel 控制台引入基本的登录功能,默认用户名和密码都是:sentinel


    3、Sentinel dashboard控制台启动配置项

    -Dserver.port=8080:用于指定 Sentinel 控制台端口为 8080,如若8080端口冲突,可使用 -Dserver.port=新端口 进行设置。。
    -Dcsp.sentinel.dashboard.server=localhost:8080:指定控制台地址和端口,会自动向该地址发送心跳包。地址格式为:hostIp:port,l配置成ocalhost:8080即监控自己
    -Dproject.name=sentinel-dashboard:指定Sentinel控制台程序显示的名称
    -Dcsp.sentinel.log.dir:指定Sentinel 日志文件目录,默认是:${user.home}/logs/csp/
    -Dcsp.sentinel.api.port=xxxx:本地的 Sentinel 客户端端口(可选,默认是 8719,有冲突会尝试向后探测)。若启动多个应用,则需要通过 -Dcsp.sentinel.api.port=xxxx 指定客户端监控 API 的端口(默认是 8719)。
    -Dcsp.sentinel.app.type=1:从 1.6.3 版本开始,控制台支持网关流控规则管理。启动参数以将您的服务标记为 API Gateway,在接入控制台时您的服务会自动注册为网关类型,然后您即可在控制台配置网关规则和 API 分组。
    
    用户可以通过如下参数进行鉴权配置:
    -Dsentinel.dashboard.auth.username=sentinel 用于指定控制台的登录用户名为 sentinel;
    -Dsentinel.dashboard.auth.password=123456 用于指定控制台的登录密码为 123456;如果省略这两个参数,默认用户和密码均为 sentinel;
    -Dserver.servlet.session.timeout=7200 用于指定 Spring Boot 服务端 session 的过期时间,如 7200 表示 7200 秒;60m 表示 60 分钟,默认为 30 分钟;

    同样也可以直接在 Spring properties 文件中进行配置。

    注意:部署多台控制台时,session 默认不会在各实例之间共享,这一块需要自行改造。

    配置方式
    Sentinel 提供如下的配置方式:
    JVM -D 参数方式
    properties 文件方式(1.7.0 版本开始支持)
    其中,project.name 参数只能通过 JVM -D 参数方式配置(since 1.8.0 取消该限制),其它参数支持所有的配置方式。
    优先级顺序:JVM -D 参数的优先级最高。若 properties 和 JVM 参数中有相同项的配置,以 JVM 参数配置的为准。
    用户可以通过 -Dcsp.sentinel.config.file 参数配置 properties 文件的路径,支持 classpath 路径配置(如 classpath:sentinel.properties)。
    默认 Sentinel 会尝试从 classpath:sentinel.properties 文件读取配置,读取编码默认为 UTF-8。

    配置项    类型    默认值    最小值    描述
    auth.enabled    boolean    true    -    是否开启登录鉴权,仅用于日常测试,生产上不建议关闭
    sentinel.dashboard.auth.username    String    sentinel    -    登录控制台的用户名,默认为 sentinel
    sentinel.dashboard.auth.password    String    sentinel    -    登录控制台的密码,默认为 sentinel
    sentinel.dashboard.app.hideAppNoMachineMillis    Integer    0    60000    是否隐藏无健康节点的应用,距离最近一次主机心跳时间的毫秒数,默认关闭
    sentinel.dashboard.removeAppNoMachineMillis    Integer    0    120000    是否自动删除无健康节点的应用,距离最近一次其下节点的心跳时间毫秒数,默认关闭
    sentinel.dashboard.unhealthyMachineMillis    Integer    60000    30000    主机失联判定,不可关闭
    sentinel.dashboard.autoRemoveMachineMillis    Integer    0    300000    距离最近心跳时间超过指定时间是否自动删除失联节点,默认关闭
    sentinel.dashboard.unhealthyMachineMillis    Integer    60000    30000    主机失联判定,不可关闭
    server.servlet.session.cookie.name    String    sentinel_dashboard_cookie    -    控制台应用的 cookie 名称,可单独设置避免同一域名下 cookie 名冲突

    更多配置项见:

    https://github.com/alibaba/Sentinel/wiki/%E5%90%AF%E5%8A%A8%E9%85%8D%E7%BD%AE%E9%A1%B9

    注:若通过控制台推送规则时出现 invalid type 或 empty type 的错误,请确保 transport 模块版本与 core 模块版本保持一致;若控制台版本 >= 1.7.1,请将接入端的相关依赖也升级至 1.7.1 及以上版本。


    三、Sentinel规则管理及推送
    一般来说,规则的推送有下面三种模式:

    推送模式 说明 优点 缺点
    1、原始模式
    API 将规则推送至客户端并直接更新到内存中,扩展写数据源(WritableDataSource)
    优点
    简单,无任何依赖


    缺点
    不保证一致性;规则保存在内存中,重启即消失。严重不建议用于生产环境


    2、Pull 模式
    扩展写数据源(WritableDataSource), 客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件 等
    优点
    简单,无任何依赖;规则持久化 不保证一致性;


    缺点
    实时性不保证,拉取过于频繁也可能会有性能问题。

    3、Push 模式
    扩展读数据源(ReadableDataSource),规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。生产环境下一般采用 push 模式的数据源。
    优点
    规则持久化;一致性;快速


    缺点
    引入第三方依赖


    四、、项目配置Sentinel,在Sentinel dashboard实现监控
    1、pom.xml文件引入依赖

    引入 Sentinel,使用 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-sentinel 的 starter。

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>


    2、application.properties文件配置

    #spring.cloud.sentinel.transport.port 端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。
    spring.cloud.sentinel.transport.port=8719
    #默认是:localhost:8080,自定义后:localhost:8070
    spring.cloud.sentinel.transport.dashboard=localhost:8070

    3、使用浏览器打开:

    http://127.0.0.1:8901/sentinel

    刚打开时,没有发现我们的项目,那是因为Sentinel使用了懒加载,要请求一下接口才会显示出来:
    http://127.0.0.1:8901/sentinel

    4、Sentinel 详细项目使用

    见:

    https://www.cnblogs.com/fanshuyao/p/14607028.html

    (时间宝贵,分享不易,捐赠回馈,^_^)

    ================================

    ©Copyright 蕃薯耀 2021-04-01

    https://www.cnblogs.com/fanshuyao/

    今天越懒,明天要做的事越多。
  • 相关阅读:
    UVA 12307 Smallest Enclosing Rectangle
    UVALive 4728 Squares
    扩栈代码
    uva 10256 The Great Divide
    uva 11168 Airport
    uva 10625 Board Wrapping
    bzoj千题计划206:bzoj1076: [SCOI2008]奖励关
    NOIP2017 列队
    bzoj3529: [Sdoi2014]数表
    bzoj1966: [Ahoi2005]VIRUS 病毒检测
  • 原文地址:https://www.cnblogs.com/fanshuyao/p/14606396.html
Copyright © 2011-2022 走看看