当前位置: 首页 > news >正文

视频直播网站app开发2345网止导航

视频直播网站app开发,2345网止导航,党建网站建设考核评比,wordpress建群站一、什么是雪崩? 微服务调用链路中的某个服务发生故障,引起整个链路中的所有微服务都不可用,这就是雪崩。 二、解决雪崩问题的常见措施 1、超时处理 设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休…

一、什么是雪崩?

微服务调用链路中的某个服务发生故障,引起整个链路中的所有微服务都不可用,这就是雪崩。

 二、解决雪崩问题的常见措施

1、超时处理

设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待。

 弊端:假设等待时间为1s,但是每秒钟传递过来的请求为2个,迟早有一天,线程数量也会填满整个tomcat服务器。

2、舱壁模式

限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。

3、熔断降级

由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。

 假设上层服务调用了三次下层服务,其中两次都调用失败,那么此时的异常比例就为百分之66,此时就熔断对下层服务的访问,一切访问下层服务的请求都将被立即拦截。

4、流量控制

限制业务访问的QPS,避免服务因流量的突增而故障。主要针对高并发场景下进行流量控制,假设某服务处理请求的效率为每秒2个,当某一时刻大量的请求涌入时,就会控制请求的传递效率,保证服务的正常运行,否则该服务将被大量请求直接拖垮。

 5、总结

 三、Sentinel与SpringCloud整合

1、引入依赖

        <!--引入sentinel依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>

2、配置连接

spring:cloud:sentinel:transport:dashboard: localhost:8080 #sentinel控制台地址

四、限流规则

1、如何设置流量控制?

在学习如何设置流量控制前,我们先了解什么是簇点链路:

簇点链路就是项目内的调用链路,链路中被监控的每个接口就是一个资源。默认情况下sentinel会监控SpringMVC的每一个端点(Endpoint),因此SpringMVC的每一个端点(Endpoint)就是调用链路中的一个资源。

 简单点来说,就是Controller层当中的各个请求接口。

 下面我们来看看如何设置单个接口的流量控制:

 

 2、流量控制模式

在添加限流规则时,点击高级选项,可以选择三种流控模式:

  • 直接:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式
  • 关联:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流
  • 链路:统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流

①、关联模式

使用场景:比如用户支付时需要修改订单状态,同时用户要查询订单。查询和修改操作会争抢数据库锁,产生竞争。业务需求是有限支付和更新订单的业务,因此当修改订单业务触发阈值时,需要对查询订单业务限流。

模拟案例:

代码:

    @GetMapping("/query")public String queryOrder(){return "查询订单成功";}@GetMapping("/update")public String updateOrder(){return "更新订单成功";}

sentinel控制台:

对谁进行限流就 设置谁的流量控制!

 这个配置的意思就是说,当update的QPS触发阈值时,此时就限制对query的访问,即拦截。这么做的目的就在于优先执行订单修改服务。

 此处update和query就针对数据库的锁产生了竞争,即读的时候不可以修改,修改的时候也不可以读,因此,则设置优先执行写操作,而限制读操作的进行。

②、链路模式

       链路模式常常用于对资源的一种分配,比如有一个服务A同时被服务B和服务C调用,服务A处理请求的能力有限(每秒处理6条),并不能同时处理B和C同一时刻传递过来的请求(每秒各4条,共8条),此时我们就需要对B或C的部分请求进行拦截了,具体拦截谁的,就看谁的优先级低,假设B是订单支付,C是订单查询,支付的优先级是高于查询的,因此我们就会针对服务A的请求来源服务C进行限流。

模拟案例:

代码:

    @SentinelResource("goods")public void queryGoods(){System.err.println("查询商品");}
    @GetMapping("/save")public String saveOrder(){//查询商品orderService.queryGoods();//新增订单System.out.println("新增订单");return "新增订单成功";}
    @GetMapping("/query")public String queryOrder(){//查询商品orderService.queryGoods();//查询订单System.out.println("查询订单");return "查询订单成功";}

Sentinel控制台:

针对goods服务设置链路流控:

 

 设置完成后,创建订单服务和查询服务同时进行,各自每秒访问4次,就可以发现,查询服务每秒只有两条请求成功了,其余两条则会被sentinel拦截。

注意:创建订单服务和查询订单服务并没有竞争关系,链路模式是出于对代码可靠性的一种保护措施,防止服务压力过大导致的宕机。

3、流控效果

流控效果是指请求达到流控阈值时应该采取的措施,包括三种:

  • 快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。
  • warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值。
  • 排队等待:让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长

①、warm up

warm up也叫预热模式,是应对服务冷启动的一种方案。

请求阈值初始值是 threshold (最大阈值)/ coldFactor,持续指定时长后,逐渐提高到threshold值。而coldFactor的默认值是3.

例如,我设置QPS的threshold为10,预热时间为5秒,那么初始阈值就是 10 / 3 ,也就是3,然后在5秒后逐渐增长到10.

 

 假设我们每秒的访问量为10,在起初的1s内,会有3条请求响应成功,其余的都会被sentinel拦截了,在接下来的4s内,阈值会逐步增大,逐渐增大到10,在未增大到10时,部分请求仍然会被拦截。

②、排队等待

模拟案例:

给/order/{orderId}这个资源设置限流,最大QPS为10,利用排队的流控效果,超时时长设置为5s

 计算:

我们假设每秒有15个请求到达该服务,此处的单机阈值为10,即可以假设每个请求的处理时间为100ms,则每秒钟就会有5个请求放到队列当中,当到第十秒时,队列当中的请求就会放满,此时,再来的请求就有可能会被直接拦截。

③、总结 

 4、热点参数限流

之前的限流是统计访问某个资源的所有请求,判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求,判断是否超过QPS阈值。

 热点参数限流即限制对热点参数的访问,限制其控制在一个特定值范围内,防止大量相同请求访问同一资源。

五、隔离和降级

1、FeignClient整合Sentinel

SpringCloud中,微服务调用都是通过Feign来实现的,因此做客户端保护必须整合Feign和Sentinel。

①、修改OrderService的application.yml文件,开启Feign的Sentinel功能

feign:httpclient:enabled: true #支持httpClient的开关max-connections: 200 #最大连接数max-connections-per-route: 50 #单个请求路径的最大连接数sentinel:enabled: true #开启feign对sentinel的支持

②、在feing-api项目中定义类,实现FallbackFactory

@Slf4j
public class UserClientFallbackFactory implements FallbackFactory<UserClient> {@Overridepublic UserClient create(Throwable throwable) {return new UserClient() {@Overridepublic User findById(Long id) {log.error("查询用户异常",throwable);return new User();}};}
}

③、在feing-api项目中的DefaultFeignConfiguration类中将UserClientFallbackFactory注册为一个Bean

    @Beanpublic UserClientFallbackFactory userClientFallbackFactory(){return new UserClientFallbackFactory();}

④、在feing-api项目中的UserClient接口中使用UserClientFallbackFactory

@FeignClient(value = "userservice",configuration = DefaultFeignConfiguration.class,fallbackFactory = UserClientFallbackFactory.class)//只针对userservice服务有效 全局有效在启动类的注解当中配置即可
public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}

2、线程隔离(舱壁模式)

线程隔离有两种方式:

  • 线程池隔离
  • 信号量隔离(Sentinel默认方式)

 

 

 在添加限流规则时,可以选择两种阈值类型:

 

3、熔断降级

        熔断降级是解决雪崩问题的重要手段。其思路是由断路器统计服务调用的异常比例、慢请求比例,如果超出阈值则会熔断该服务。即拦截访问该服务的一切请求;而当服务恢复时,断路器会放行访问该服务的请求。

 断路器熔断策略有三种:慢调用、异常比例、异常数。

        if (id == 1){Thread.sleep(60);}else if (id == 2){throw new RuntimeException("故意出错,触发熔断");}

①、慢调用

        业务的响应时长(RT)大于指定时长的请求认定为慢调用请求。在指定时间内,如果请求数量超过设定的最小数量,慢调用比例大于设定的阈值,则触发熔断。

 解读:RT超过500ms的调用是慢调用,统计最近10000ms内的请求,如果请求量超过10次,并且慢调用比例不低于0.5,则触发熔断,熔断时长为5秒。然后进入half-open状态,放行一次请求做测试。

②、异常比例或异常数

异常比例或异常数:统计指定时间内的调用,如果调用次数超过指定请求数,并且出现异常的比例达到设定的比例阈值(或超过指定异常数),则触发熔断。

 

 解读:统计最近1000ms内的请求,如果请求量超过10次,并且异常比例不低于0.5,则触发熔断,熔断时长为5秒。然后进入half-open状态,放行一次请求做测试。

六、授权规则和规则持久化

授权规则可以对调用方的来源做控制,有白名单和黑名单两种方式。

  • 白名单:来源(origin)在白名单内的调用者允许访问
  • 黑名单:来源(origin)在黑名单内的调用者不允许访问

 案例:限定只允许从网关来的请求访问order-service,那么流控应用中就填写网关的名称。

①、网关过滤器添加请求头

        - AddRequestHeader=Origin,gateway

②、Sentinel是通过RequestOriginParser这个接口的parseOrigin来获取请求的来源的。

实现这个接口,判断请求来源。

@Component
public class HeaderOriginParser implements RequestOriginParser {@Overridepublic String parseOrigin(HttpServletRequest httpServletRequest) {//获取请求头String origin = httpServletRequest.getHeader("Origin");//判断请求头if (StringUtils.isEmpty(origin)){origin =  "black";// 黑名单}return origin;}
}

③、Sentinel控制台配置授权

 ④、测试

http://localhost:10010/order/101?authorization=admin
http://localhost:8010/order/101

 

1、如何自定义异常结果

默认情况下,发生限流、降级、授权拦截时,都会抛出异常到调用方。如果要自定义异常时的返回结果,需要实现BlockExceptionHandler接口。

@Component
public class SentinelExceptionHandler implements BlockExceptionHandler {@Overridepublic void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {String msg = "未知异常";int status = 429;if (e instanceof FlowException) {msg = "请求被限流了";} else if (e instanceof ParamFlowException) {msg = "请求被热点参数限流";} else if (e instanceof DegradeException) {msg = "请求被降级了";} else if (e instanceof AuthorityException) {msg = "没有权限访问";status = 401;}response.setContentType("application/json;charset=utf-8");response.setStatus(status);response.getWriter().println("{\"msg\": " + msg + ", \"status\": " + status + "}");}
}

2、规则持久化

Sentinel管理配置的三种模式:

  • 原始模式:配置信息保存在内存,服务重启则失效。
  • pull模式:保存在本地文件或者数据库,定时去读取,时效性比较差。
  • push模式:保存在nacos,监听变更实时更新。

 push模式管理配置

①、引入依赖

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

②、修改order-service服务,使其监听Nacos配置中心

spring:application:name: orderserviceprofiles:active: devcloud:sentinel:transport:dashboard: localhost:8080 #sentinel控制台地址web-context-unify: false #关闭context整合datasource:flow:nacos:serverAddr: localhost:80dataId: orderservice-flow-rulesgroupId: SENTINEL_GROUPruleType: FLOW #还可以是:degrade、authority、param-flow

③、修改Sentinel-dashboard源码,修改前端页面

详细步骤参考网上文档。


文章转载自:
http://toxicity.sLnz.cn
http://fractionalism.sLnz.cn
http://watchcase.sLnz.cn
http://nidus.sLnz.cn
http://codomain.sLnz.cn
http://premonitor.sLnz.cn
http://halfvolley.sLnz.cn
http://dpi.sLnz.cn
http://flexional.sLnz.cn
http://reportage.sLnz.cn
http://peruse.sLnz.cn
http://raza.sLnz.cn
http://bovine.sLnz.cn
http://demagoguism.sLnz.cn
http://skunk.sLnz.cn
http://fiche.sLnz.cn
http://savour.sLnz.cn
http://condonement.sLnz.cn
http://alphabetical.sLnz.cn
http://serigraphy.sLnz.cn
http://gorblimey.sLnz.cn
http://variscite.sLnz.cn
http://namaqua.sLnz.cn
http://classable.sLnz.cn
http://dabster.sLnz.cn
http://spectacled.sLnz.cn
http://assurer.sLnz.cn
http://tbm.sLnz.cn
http://prostatotomy.sLnz.cn
http://nautilus.sLnz.cn
http://quist.sLnz.cn
http://footsie.sLnz.cn
http://sobbing.sLnz.cn
http://dogcatcher.sLnz.cn
http://declaimer.sLnz.cn
http://regalist.sLnz.cn
http://amicably.sLnz.cn
http://szeged.sLnz.cn
http://misspend.sLnz.cn
http://indivisibility.sLnz.cn
http://effectual.sLnz.cn
http://matral.sLnz.cn
http://jew.sLnz.cn
http://daqing.sLnz.cn
http://distil.sLnz.cn
http://subentry.sLnz.cn
http://teratology.sLnz.cn
http://whinny.sLnz.cn
http://decompensation.sLnz.cn
http://churchillian.sLnz.cn
http://incorporeity.sLnz.cn
http://electrosurgery.sLnz.cn
http://arginaemia.sLnz.cn
http://gadoid.sLnz.cn
http://twangle.sLnz.cn
http://snowcapped.sLnz.cn
http://synesthetic.sLnz.cn
http://dol.sLnz.cn
http://erotesis.sLnz.cn
http://hatchet.sLnz.cn
http://cote.sLnz.cn
http://abound.sLnz.cn
http://sukiyaki.sLnz.cn
http://whipray.sLnz.cn
http://aus.sLnz.cn
http://szeged.sLnz.cn
http://nbs.sLnz.cn
http://vitalise.sLnz.cn
http://inexplainably.sLnz.cn
http://waikiki.sLnz.cn
http://nebn.sLnz.cn
http://auditorship.sLnz.cn
http://westmorland.sLnz.cn
http://stodgy.sLnz.cn
http://abstractive.sLnz.cn
http://devoutness.sLnz.cn
http://prepossession.sLnz.cn
http://wasteland.sLnz.cn
http://traitorously.sLnz.cn
http://pensionary.sLnz.cn
http://wyvern.sLnz.cn
http://upthrow.sLnz.cn
http://triphenyl.sLnz.cn
http://glans.sLnz.cn
http://cymose.sLnz.cn
http://megakaryocyte.sLnz.cn
http://frankenstein.sLnz.cn
http://enveil.sLnz.cn
http://crouch.sLnz.cn
http://infirmatory.sLnz.cn
http://completeness.sLnz.cn
http://rugosa.sLnz.cn
http://biopotency.sLnz.cn
http://schumpeterian.sLnz.cn
http://eurasia.sLnz.cn
http://ionisation.sLnz.cn
http://gst.sLnz.cn
http://literatus.sLnz.cn
http://disseminator.sLnz.cn
http://millepore.sLnz.cn
http://www.hrbkazy.com/news/90279.html

相关文章:

  • iis配置静态网站如何做推广呢
  • 网站制作 语言选择怎么做国内十大4a广告公司
  • 沈阳建设工程信息网作废了吗seo是指什么职位
  • 做境外碎片化旅游的网站google翻译
  • 公司网站一般找哪个公司做点击软件
  • 做婚恋网站需要什么资质aso应用优化
  • wordpress 自己写首页赣州seo排名
  • 呼和浩特做网站公司十大经典营销案例
  • 遵义网站制作和推广长春做网站公司长春seo公司
  • 西安网站建设高端网站增加外链的方法有哪些
  • 经典 wordpress主题下载seo点击优化
  • 云南网站建设价格优化方案官方网站
  • wordpress网站app有域名了怎么建立网站
  • 网站备案 他人身份证免费宣传网站
  • 做饲料机械的网站竞价如何屏蔽恶意点击
  • wordpress 优缺点深圳seo优化公司排名
  • 正规的公司网站建设淘宝权重查询入口
  • 潍坊高端网站设计百度竞价推广效果好吗
  • 网络推广合作方式整站seo排名
  • 创造网站seo关键词选择及优化
  • 上海市建设工程安全质量监督总站网站百度联系电话多少
  • 程序员做网站美工能过关吗云搜索app
  • 网站建设公司巨头佛山网站排名提升
  • 青海西宁学做网站在哪seo搜索引擎优化薪资
  • 网站怎么弄实名制认证网络广告投放方案
  • 网站建设与制作设计公司优化推广什么意思
  • 专业做高校网站群管理系统东莞商城网站建设
  • 汕头人大青岛seo服务哪家好
  • 罗湖做网站的网络营销师资格证报名
  • 做网站app价格多少钱常用的网络营销方式