双域名网站,2345网址导航官网官方电脑版,郑州资讯,wordpress 导航栏效果目录
1.1.雪崩问题及解决方案
1.1.1.雪崩问题
1.1.2.超时处理
1.1.3.仓壁模式
1.1.4.断路器
1.1.5.限流
1.1.6.总结
1.2.服务保护技术对比
1.3.Sentinel介绍和安装
1.3.1.初识Sentinel
1.3.2.安装Sentinel
1.4.微服务整合Sentinel
1.1.雪崩问题及解决方案
1.1.1.…目录
1.1.雪崩问题及解决方案
1.1.1.雪崩问题
1.1.2.超时处理
1.1.3.仓壁模式
1.1.4.断路器
1.1.5.限流
1.1.6.总结
1.2.服务保护技术对比
1.3.Sentinel介绍和安装
1.3.1.初识Sentinel
1.3.2.安装Sentinel
1.4.微服务整合Sentinel
1.1.雪崩问题及解决方案
1.1.1.雪崩问题
微服务中服务间调用关系错综复杂一个微服务往往依赖于多个其它微服务。 如图如果服务提供者I发生了故障当前的应用的部分业务因为依赖于服务I因此也会被阻塞。
此时其它不依赖于服务I的业务似乎不受影响。 但是依赖服务I的业务请求被阻塞用户不会得到响应则tomcat的这个线程不会释放于是越
来越多的用户请求到来越来越多的线程会阻塞 服务器支持的线程和并发数有限请求一直阻塞会导致服务器资源耗尽从而导致所有其它服务
都不可用那么当前服务也就不可用了。
那么依赖于当前服务的其它服务随着时间的推移最终也都会变的不可用形成级联失败雪崩
就发生了 1.1.2.超时处理
解决雪崩问题的常见方式有四种
•超时处理设定超时时间请求超过一定时间没有响应就返回错误信息不会无休止等待 1.1.3.仓壁模式
方案2仓壁模式
仓壁模式来源于船舱的设计 船舱都会被隔板分离为多个独立空间当船体破损时只会导致部分空间进入将故障控制在一定
范围内避免整个船体都被淹没。
于此类似我们可以限定每个业务能使用的线程数避免耗尽整个tomcat的资源因此也叫线程隔
离。 1.1.4.断路器
断路器模式由断路器统计业务执行的异常比例如果超出阈值则会熔断该业务拦截访问该业务
的一切请求。
断路器会统计访问某个服务的请求数量异常比例 当发现访问服务D的请求异常比例过高时认为服务D有导致雪崩的风险会拦截访问服务D的一
切请求形成熔断 1.1.5.限流
流量控制限制业务访问的QPS避免服务因流量的突增而故障。 1.1.6.总结
什么是雪崩问题 微服务之间相互调用因为调用链中的一个服务故障引起整个链路都无法访问的情况。 可以认为
限流是对服务的保护避免因瞬间高并发流量而导致服务故障进而避免雪崩。是一种预防措施。
超时处理、线程隔离、降级熔断是在部分服务故障时将故障控制在一定范围避免雪崩。是一种
补救措施。
1.2.服务保护技术对比
在SpringCloud当中支持多种服务保护技术 Netfix Hystrix Sentinel Resilience4J
早期比较流行的是Hystrix框架但目前国内实用最广泛的还是阿里巴巴的Sentinel框架这里我们
做下对比
SentinelHystrix隔离策略信号量隔离线程池隔离/信号量隔离熔断降级策略基于慢调用比例或异常比例基于失败比率实时指标实现滑动窗口滑动窗口基于 RxJava规则配置支持多种数据源支持多种数据源扩展性多个扩展点插件的形式基于注解的支持支持支持限流基于 QPS支持基于调用关系的限流有限的支持流量整形支持慢启动、匀速排队模式不支持系统自适应保护支持不支持控制台开箱即用可配置规则、查看秒级监控、机器发现等不完善常见框架的适配Servlet、Spring Cloud、Dubbo、gRPC 等Servlet、Spring Cloud Netflix
1.3.Sentinel介绍和安装
1.3.1.初识Sentinel
Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址home | Sentinel
Sentinel 具有以下特征:
•丰富的应用场景Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景例如秒杀即突发流量控制在系统容量可以承受的范围、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
•完备的实时监控Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据甚至 500 台以下规模的集群的汇总运行情况。
•广泛的开源生态Sentinel 提供开箱即用的与其它开源框架/库的整合模块例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
•完善的 SPI 扩展点Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
1.3.2.安装Sentinel
1下载
sentinel官方提供了UI控制台方便我们对系统做限流设置。大家可以在GitHub下载。
课前资料也提供了下载好的jar包 2运行
将jar包放到任意非中文目录执行命令
java -jar sentinel-dashboard-1.8.1.jar
如果要修改Sentinel的默认端口、账户、密码可以通过下列配置
配置项默认值说明server.port8080服务端口sentinel.dashboard.auth.usernamesentinel默认用户名sentinel.dashboard.auth.passwordsentinel默认密码
例如修改端口
java -Dserver.port8090 -jar sentinel-dashboard-1.8.1.jar3访问
访问http://localhost:8080页面就可以看到sentinel的控制台了 需要输入账号和密码默认都是sentinel 登录后发现一片空白什么都没有 这是因为我们还没有与微服务整合。
1.4.微服务整合Sentinel
我们在order-service中整合sentinel并连接sentinel的控制台步骤如下
1引入sentinel依赖
!--sentinel--
dependencygroupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-sentinel/artifactId
/dependency
2配置控制台
修改application.yaml文件添加下面内容
server:port: 8088
spring:cloud: sentinel:transport:dashboard: localhost:8080
3访问order-service的任意端点
打开浏览器访问http://localhost:8088/order/101这样才能触发sentinel的监控。
然后再访问sentinel的控制台查看效果