做农家乐农产品旅游的网站,龙岩网站建设全包,做网站服务器可以挂到外地么,网站采集到wordpress1、什么是微服务保护
微服务保护是指在微服务架构中采取的一系列措施#xff0c;以确保各个服务的稳定性、可靠性和安全性。微服务是一种将应用程序作为一套小服务开发的方法#xff0c;每个服务运行在其独立的进程中#xff0c;并通常围绕特定的业务能力进行构建。微服务保…1、什么是微服务保护
微服务保护是指在微服务架构中采取的一系列措施以确保各个服务的稳定性、可靠性和安全性。微服务是一种将应用程序作为一套小服务开发的方法每个服务运行在其独立的进程中并通常围绕特定的业务能力进行构建。微服务保护的目标是防止单个服务的故障影响到整个系统
2、Sentinel的使用
方案的使用要基于SpringCloudAlibaba的Sentinel组件
2.1、下载SentinelJAR包放在无中文路径无特殊字符的目录cmd进入命令提示框输入命令
java -Dserver.port8090 -Dcsp.sentinel.dashboard.serverlocalhost:8090 -Dproject.namesentinel-dashboard -jar sentinel-dashboard.jar 2.2、启动成功访问http://localhost:8090/ 网址输入默认账号密码Sentinel进入主界面 2.3、 微服务模块引入依赖
!--sentinel服务保护--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId/dependency
2.4、 在yaml文件配置Sentinel配置项用于服务发现
spring:cloud:sentinel:transport:dashboard: localhost:8090http-method-specify: true # 开启请求方式前缀
2.5、 测试访问该模块的任意网址后Sentinel会自动检测该模块的所有请求 3、微服务保护的方案
3.1、流量控制
限流限制每个服务的请求量防止过载。
流量整形调整流量的分布避免服务因瞬时高峰流量而崩溃。
服务故障最重要原因就是并发太高解决了这个问题就能避免大部分故障。当然接口的并发不是一直很高而是突发的。因此请求限流就是限制或控制接口访问的并发流量避免服务因流量激增而出现故障
3.1.1、启用流量控制 3.1.2、设置QPS为6意思是该接口每秒可以接受6个请求
测试我们在jmeter上模拟前端在10秒中发送1000个请求如图QPS为6左右 3.2、服务隔离
服务独立性确保一个服务的故障不会影响到其他服务。
服务隔离通过隔离技术如容器化来运行服务减少服务间的相互影响。
3.2.1、修改cart-service模块的yaml文件添加以下内容来开启Fegin的Sentinel功能
feign:sentinel:enabled: true # 开启feign对sentinel的支持 这样该模块所依赖的openFegin客户端接口也会被监控到并会生成在该簇点的下级链路
3.2.2、配置线程隔离 并发线程数限制也就是说这个查询功能最多使用5个线程而不是5QPS。如果查询商品的接口每秒处理2个请求则5个线程的实际QPS在10左右而超出的请求自然会被拒绝.
这就证明线程隔离起到了作用尽管查询购物车这个接口并发很高但是它能使用的线程资源被限制了因此不会影响到其它接口。
就是当大量请求到某一个服务模块时在第一层对流量进行限制进行了第一次降低并发量但是这些请求到达该服务时访问的接口众多往往一个接口的耗时非常慢就会拖垮其他请求导致响应时间过长这是我们就要对某些接口进行线程隔离只允许固定数量的线程去访问该接口降低一个接口拖垮整个请求的现象。
3.3、服务降级
触发限流或熔断后的请求不一定要直接报错也可以返回一些默认数据或者友好提示用户体验会更好。
3.3.1、创建降级处理类
在hm-api模块中给ItemClient定义降级处理类实现FallbackFactory
package com.hmall.api.client.fallback;import com.hmall.api.client.ItemClient;
import com.hmall.api.dto.ItemDTO;
import com.hmall.api.dto.OrderDetailDTO;
import com.hmall.common.exception.BizIllegalException;
import com.hmall.common.utils.CollUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;import java.util.Collection;
import java.util.List;Slf4j
public class ItemClientFallback implements FallbackFactoryItemClient {Overridepublic ItemClient create(Throwable cause) {return new ItemClient() {Overridepublic ListItemDTO queryItemByIds(CollectionLong ids) {log.error(远程调用ItemClient#queryItemByIds方法出现异常参数{}, ids, cause);// 查询购物车允许失败查询失败返回空集合return CollUtils.emptyList();}Overridepublic void deductStock(ListOrderDetailDTO items) {// 库存扣减业务需要触发事务回滚查询失败抛出异常throw new BizIllegalException(cause);}};}
}
3.3.2 、将该接口注册为Bean
在client接口来使用Bean对象 3.3.3、测试
使用jmter测试发现不再报异常拒绝的QPS而是走了服务降级策略 这些方案或多或少都会导致服务的体验上略有下降比如请求限流降低了并发上限线程隔离降低了可用资源数量服务熔断降低了服务的完整度部分服务变的不可用或弱可用。因此这些方案都属于服务降级的方案。但通过这些方案服务的健壮性得到了提升
3.4、服务熔断
快速失败当服务调用失败次数超过阈值时快速返回失败结果避免系统资源浪费。
慢调用比例熔断当服务调用的慢调用比例超过阈值时触发熔断避免系统资源耗尽。
熔断服务
Sentinel中的断路器不仅可以统计某个接口的慢请求比例还可以统计异常请求比例。当这些比例超出阈值时就会熔断该接口即拦截访问该接口的一切请求降级处理当该接口恢复正常时再放行对于该接口的请求 状态机包括三个状态 closed关闭状态断路器放行所有请求并开始统计异常比例、慢请求比例。超过阈值则切换到open状态 open打开状态服务调用被熔断访问被熔断服务的请求会被拒绝快速失败直接走降级逻辑。Open状态持续一段时间后会进入half-open状态 half-open半开状态放行一次请求根据执行结果来判断接下来的操作。 请求成功则切换到closed状态 请求失败则切换到open状态
3.4.1、设置熔断参数 这种是按照慢调用比例来做熔断上述配置的含义是 RT超过200毫秒的请求调用就是慢调用 统计最近1000ms内的最少5次请求如果慢调用比例不低于0.5则触发熔断 熔断持续时长20s
3.4.2、测试
使用jmter来测试发现前一半的请求都可以正常访问当熔断器开始工作时所有的请求都无法到达服务器