建网站的公司哪家好,网络广告人社区官网,凡科建设网站还用买服务器吗,一个网站可以做多少关键字背景
在微服务架构下#xff0c;每个服务的性能都不同#xff0c;为避免出现流量洪峰将服务冲垮#xff0c;需要依赖限流工具来保护服务的稳定性。sentinel是阿里提供的限流工具#xff0c;社区活跃#xff0c;功能也很全面#xff0c;包含实时监控、流控、熔断等功能。…背景
在微服务架构下每个服务的性能都不同为避免出现流量洪峰将服务冲垮需要依赖限流工具来保护服务的稳定性。sentinel是阿里提供的限流工具社区活跃功能也很全面包含实时监控、流控、熔断等功能。它也提供了spring-cloud-gateway的支持可以很方便和spring-gateway进行整合。
目标
spring-gateway服务添加sentinel支持并通过sentinel dashboard进行规则配置规则数据存在nacos里支持规则变更实时生效。
方案
服务结构 spring-gateway改动
引入工程依赖
在pom文件里添加sentinel的依赖 !--sentinel支持spring-- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-sentinel/artifactId /dependency !--自动集成spring gateway-- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-alibaba-sentinel-gateway/artifactId /dependency !--支持nacos的动态数据源-- dependency groupIdcom.alibaba.csp/groupId artifactIdsentinel-datasource-nacos/artifactId /dependency
加载限流规则
在application.properties文件里添加sentinel规则对应nacos配置信息 project.namespring-gateway sentinel.nacos.default.namespaceSENTINEL_GROUP spring.cloud.sentinel.datasource.gw_api_group.nacos.server-addr${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.gw_api_group.nacos.namespace${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.gw_api_group.nacos.data-id${project.name}-gw_api_group-rules spring.cloud.sentinel.datasource.gw_api_group.nacos.group-id${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.gw_api_group.nacos.data-typejson spring.cloud.sentinel.datasource.gw_api_group.nacos.rule-typegw_api_group spring.cloud.sentinel.datasource.gw_flow.nacos.server-addr${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.gw_flow.nacos.namespace${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.gw_flow.nacos.data-id${project.name}-gw_flow-rules spring.cloud.sentinel.datasource.gw_flow.nacos.group-id${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.gw_flow.nacos.data-typejson spring.cloud.sentinel.datasource.gw_flow.nacos.rule-typegw_flow spring.cloud.sentinel.datasource.degrade.nacos.server-addr${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.degrade.nacos.namespace${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.degrade.nacos.data-id${project.name}-degrade-rules spring.cloud.sentinel.datasource.degrade.nacos.group-id${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.degrade.nacos.data-typejson spring.cloud.sentinel.datasource.degrade.nacos.rule-typedegrade spring.cloud.sentinel.datasource.system.nacos.server-addr${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.system.nacos.namespace${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.system.nacos.data-id${project.name}-system-rules spring.cloud.sentinel.datasource.system.nacos.group-id${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.system.nacos.data-typejson spring.cloud.sentinel.datasource.system.nacos.rule-typesystem spring.cloud.sentinel.datasource.authority.nacos.server-addr${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.authority.nacos.namespace${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.authority.nacos.data-id${project.name}-authority-rules spring.cloud.sentinel.datasource.authority.nacos.group-id${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.authority.nacos.data-typejson spring.cloud.sentinel.datasource.authority.nacos.rule-typeauthority spring.cloud.sentinel.datasource.param_flow.nacos.server-addr${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.param_flow.nacos.namespace${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.param_flow.nacos.data-id${project.name}-param_flow-rules spring.cloud.sentinel.datasource.param_flow.nacos.group-id${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.param_flow.nacos.data-typejson spring.cloud.sentinel.datasource.param_flow.nacos.rule-typeparam_flow
限流处理
请求击中限流规则后我们要对限流异常进行处理。可以通过自定义BlockRequestHandler来定制处理逻辑也可以使用sentinel spring gateway的默认处理器支持需要在配置文件里加上一下信息 # moderesponse代表正常返回响应moderedirect代表重定向某个页面 spring.cloud.sentinel.scg.fallback.moderesponse spring.cloud.sentinel.scg.fallback.response-body{success: false, message:too many requests(flow limiting), code: 429} spring.cloud.sentinel.scg.fallback.response-status429 sentinel dashboard部署
sentinel dashboard是sentinel的管理后台代码做了定制支持nacos代码在仓库GitHub - xsg22/Sentinel at sentinel-nacos-1.8
通过maven打出jar包后支持传到服务器上进行部署。也可以使用已有的jarhttps://download.csdn.net/download/xsgnzb/88522419
部署完整命令如下 java -jar sentinel-dashboard.jar --auth.enabledtrue --auth.usernameadmin --auth.password123456 --server.port9090 --spring.cloud.nacos.config.namespacexxx --spring.cloud.nacos.config.server-addrxxx
部署的时候要注意几个参数 # 访问端口 server.port9090 # 登录账号 auth.enabledtrue auth.usernameadmin auth.password123456 # nacos连接地址 spring.cloud.nacos.config.server-addrxxx spring.cloud.nacos.config.namespacexxx 数据源
sentinel包含7种规则类型这些规则数据存放在nacos里。配置格式是dataId${project.name}-${ruleType}-rulesgroupSENTINEL_GROUP。例如限流规则对应的dataIdspring-gateway-gw_flow-rules。
这是sentinel定义的RuleType public enum RuleType { /** * 限流规则非网关模式 */ FLOW(flow, FlowRule.class), /** * 降级规则 */ DEGRADE(degrade, DegradeRule.class), /** * 根据请求参数进行限流的规则 */ PARAM_FLOW(param-flow, ParamFlowRule.class), /** * 系统规则根据cpu使用率、load指标进行限流 */ SYSTEM(system, SystemRule.class), /** * 授权规则app的白名单/黑名单 */ AUTHORITY(authority, AuthorityRule.class), /** * 限流规则网关模式 */ GW_FLOW(gw-flow, com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule), /** * api定义信息 */ GW_API_GROUP(gw-api-group, com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition); }
注意使用网关模式对接时限流规则不能放到flow类型下要使用gw_flow类型。