Sentinel: 分布式系统的流量防卫兵(上)

Sentinel 是什么?


Sentinel 具有以下特征:


丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。


完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。


广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。


完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。


Sentinel 的主要特性:


Sentinel: 分布式系统的流量防卫兵(上)


Sentinel 的开源生态:


Sentinel: 分布式系统的流量防卫兵(上)


我们大概叙述后开始整合我们的分布式项目,我这里里为一个简单分布式项目,注册中心为Nacos,一个服务提供者(user-center)和一个服务消费者(content-center)



Sentinel: 分布式系统的流量防卫兵(上)


可以看到我的content-center调用user-center/users服务


Sentinel: 分布式系统的流量防卫兵(上)


我们现在只启动content-center不启动user服务,可想而知肯定报错,我们来看


Sentinel: 分布式系统的流量防卫兵(上)


没错500,找不到user-center服务,我们现在整合Sentinel,首先加入两个依赖


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>


和actuator配合使用,可通过http://localhost:8010/actuator/sentinel端点进行查看


{
    "blockPage":null,
    "appName":"content-center",
    "consoleServer":"localhost:8333",
    "coldFactor":"3",
    "rules":{
        "systemRules":[
        ],
        "authorityRule":[
        ],
        "paramFlowRule":[
        ],
        "flowRules":[
        ],
        "degradeRules":[
        ]
    },
    "metricsFileCharset":"UTF-8",
    "filter":{
        "order":-2147483648,
        "urlPatterns":[
            "/*"
        ],
        "enabled":true
    },
    "totalMetricsFileCount":6,
    "datasource":{
    },
    "clientIp":"192.168.2.29",
    "clientPort":"8719",
    "logUsePid":false,
    "metricsFileSize":52428800,
    "logDir":"/Users/zhangguowei/logs/csp/",
    "heartbeatIntervalMs":10000
}


我们暂时先不要管这些是什么我们后面再详细阐述,从JSON的形式看不太方便,Sentinel为我们整合有UI界面


整合Sentinel可视化界面


下载 sentinel的jar包然后直接启动


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


Sentinel: 分布式系统的流量防卫兵(上)


账号密码默认为sentinel


在项目的yml中加入


spring:
  datasource:
    url: jdbc:mysql://localhost:3306/content_center
    hikari:
      username: ***
      password: ******
      driver-class-name: com.mysql.cj.jdbc.Driver
  cloud:
    sentinel:
      transport:
        # 指向sentinel UI界面
        dashboard: localhost:8333
    nacos:
      discovery:
        # 指定nacos server的地址
        server-addr: localhost:8848
  application:
    # 服务名称尽量用-,不要用_,不要用特殊字符
    name: content-center
server:
  port: 8010
management:
  endpoints:
    web:
      exposure:
        include: "*"


这个时候我们继续刚刚的500再执行几次会看到


Sentinel: 分布式系统的流量防卫兵(上)



上一篇:设置VSS使支持通过Internet访问


下一篇:关于c#代码Convert.ToChar(null);出现异常,而object obj = null; Convert.ToChar(obj);//返回'\0'空字符问题详解