Spring Cloud Alibaba入门之分布式系统的流量防卫兵Sentinel

分布式系统的流量防卫兵-Sentinel

官方文档地址: 《Sentinel: 分布式系统的流量防卫兵》

  Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

  Sentinel 具有以下特征:

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

  Sentinel 的主要特性:

  Sentinel 分为两个部分:

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

备注:以上内容,来至于官方文档。

1、Sentinel Dashboard部署

  这里简单记录了实际部署时的步骤,详细内容请参考,官方详细文档:《Sentinel 控制台》

  首先,下载sentinel-dashboard-1.8.0.jar。选择需要使用的版本,下载页面:https://github.com/alibaba/Sentinel/releases。这里选择最新版本1.8.0,直接在Linux系统下载,命令如下:

wget https://github.com/alibaba/Sentinel/releases/download/v1.8.0/sentinel-dashboard-1.8.0.jar

  然后,启动。因为Sentinel 控制台没有提供配置界面,所以很多参数需要通过在启动的时候进行配置。下面我们先睹为快:

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

其中,

  • -Dserver.port=8080 用于指定 Sentinel 控制台端口为 8080
  • -Dcsp.sentinel.dashboard.server=consoleIp:port 指定控制台地址和端口
  • -project.name 指定应用的名称

注:详细的参数信息,请参考官方文档《启动配置项》

  启动成功后,访问:http://192.168.1.8:8888,默认用户名密码:sentinel。

  这个时候,登录进去没有任何的内容。下面,我们开始介入需要监控的客户端。

2、客户端配置

  启动了Sentinel Dashboard后,就可以开始配置客户端了。这里以前面的nacos-service应用为例,在配置文件中新增如下配置即可。

# sentinel dashboard 配置
spring.cloud.sentinel.transport.dashboard=192.168.1.8:8888

  添加配置后,重新启动应用,这个时候,访问Sentinel Dashboard,登录进去还是什么内容都没有的,这个时候,访问几次前面写的测试接口:http://localhost:8002/service,然后再刷新Sentinel Dashboard界面,就可以看见监控内容的出现了,如下所示:

 &esp;这个时候说明客户端配置成功了。下面我们尝试流量控制。

3、流量控制

  在簇点链路菜单,选择需要控制流量的接口,然后点击“流控”按钮,或者直接在流控规则中,点击新增,进入新增流控规则界面,然后填写规则,保存即可。这里限制了/service接口,每秒访问2次,如下所示:

  然后,在浏览器,频繁访问http://192.168.1.87:8001/service地址,就会出现如下界面,说明限制成功了,在实际项目中需要拦截该错误,并提供友好的界面。

4、常见异常

1、客户端在Sentinel注册成功,但是sentinel没有办法获取到应用的访问信息,并且sentinel打印如下日志:

2020-10-22 22:15:38.490 ERROR 68603 --- [pool-2-thread-1] c.a.c.s.dashboard.metric.MetricFetcher   : Failed to fetch metric from <http://172.31.144.1:8722/metric?startTime=1603376003000&endTime=1603376009000&refetch=false> (ConnectionException: 连接超时)

  发现其中的IP地址不对(172.31.144.1),然后查询了部署客户端的IP地址,发现了确实有这个地址,而我们期望使用的是下面的192.168.1.87这个地址。

  为了实现使用192.168.1.87这个IP地址,可以选择直接禁用VEthernet来解决了问题或者在客户端的配置文件中,增加客户端IP地址和端口号即可,如下所示:

spring.cloud.sentinel.transport.client-ip=192.168.1.87
spring.cloud.sentinel.transport.port=8722

猜你喜欢

转载自blog.csdn.net/hou_ge/article/details/111501703