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

网站建站哪家公司好一点/网络推广软件有哪些

网站建站哪家公司好一点,网络推广软件有哪些,做网站要找什么,品质好货一、什么是雪崩? 微服务调用链路中的某个服务发生故障,引起整个链路中的所有微服务都不可用,这就是雪崩。 二、解决雪崩问题的常见措施 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源码,修改前端页面

详细步骤参考网上文档。

相关文章:

【SpringCloud——Sentinel】

一、什么是雪崩&#xff1f; 微服务调用链路中的某个服务发生故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。 二、解决雪崩问题的常见措施 1、超时处理 设定超时时间&#xff0c;请求超过一定时间没有响应就返回错误信息&#xff0c;不会无休…...

面试专题:计算机网络常见面试点总结

socket、tcp、udp、http 的认识及区别 socket、tcp、udp、http 的认识及区别​ 一、先来一个讲TCP、UDP和HTTP关系的 1、TCP/IP是个协议组&#xff0c;可分为三个层次&#xff1a;网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传…...

PageHelper失效问题

问题出现记录&#xff1a; 修改代码后&#xff0c;出现分页失效问题&#xff0c;原本的代码再设置了 PageHelper.startPage(pageNum, pageSize);后只有一个mysql查询&#xff0c;我在原本的业务查询前&#xff0c;新增了其他的Mysql查询&#xff0c;导致原需要分页的查询失效 …...

Linux常用命令——grep命令

在线Linux命令查询工具 grep 强大的文本搜索工具 补充说明 grep&#xff08;global search regular expression(RE) and print out the line&#xff0c;全面搜索正则表达式并把行打印出来&#xff09;是一种强大的文本搜索工具&#xff0c;它能使用正则表达式搜索文本&…...

学校热水供应系统方案

学校热水供应系统是现代化校园建设的重要组成部分。一套高效、可靠、安全、环保的热水供应系统&#xff0c;不仅能够满足学生、教职工的日常生活需求&#xff0c;也能提高学校形象和竞争力。 在设计学校热水供应系统方案时&#xff0c;需要考虑以下几个方面&#xff1a; 一、热…...

chatgpt赋能python:Python怎么写绝对值

Python怎么写绝对值 在Python编程语言中&#xff0c;有很多常用函数。其中包括求绝对值的函数。在这篇文章中&#xff0c;我们将介绍如何在Python中使用绝对值函数&#xff0c;并提供一些示例。 什么是绝对值函数&#xff1f; 绝对值函数是一个数学中常用的函数&#xff0c;…...

研发工程师玩转Kubernetes——Node亲和性requiredDuringSchedulingIgnoredDuringExecution几种边界实验

在《研发工程师玩转Kubernetes——使用Node特性定向调度Pod》中&#xff0c;我们提到requiredDuringSchedulingIgnoredDuringExecution只有在规则被满足的时候才能执行调度。本节我们将测试几种边界情况&#xff0c;看看Kubernetes的行为。 没有满足的条件 假设我们测试的Nod…...

OpenCV中的图像处理3.9(六)轮廓线特征与属性

目录 3.9 OpenCV中的轮廓线3.9.1 轮廓线&#xff1a;入门目标什么是轮廓线&#xff1f;如何绘制轮廓线&#xff1f;轮廓线逼近法 3.9.2 轮廓线的特征1. 矩2. 轮廓线面积3. 轮廓线周长4. 轮廓逼近5. 凸面体6. 检查凸性7. 边界矩形8. 最小包围圈9. 拟合椭圆10. 拟合直线 3.9.3 轮…...

burpsuite+xray实现联动测试(手动分析和自动化测试同时进行)

目的&#xff1a;安全测试过程中手动分析测试与xray自动化扫描测试结合&#xff0c;这样可以从多层保障安全测试的分析&#xff0c;针对平台业务接口量大的安全测试是十分有用的&#xff0c;可以实现双向测试同时开始。 xray简介 xray 是一款功能强大的安全评估工具&#xff…...

2023年专业连锁行业研究报告

第一章 行业概况 专业连锁行业是指以连锁经营模式运营的公司&#xff0c;其主要业务涵盖零售、餐饮、酒店、医疗、教育等领域。这些公司通过规模化、标准化的经营模式和供应链管理&#xff0c;提供专业化、高质量的产品和服务。专业连锁行业在全球范围内蓬勃发展&#xff0c;并…...

Mysql数据库(六):基本的SELECT语句

基本的SELECT语句 前言一、SELECT...二、SELECT ... FROM三、列的别名四、去除重复行五、空值参与运算六、着重号七、查询常数八、显示表结构九、过滤数据 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注博主&#…...

在CentOS7环境中,实现使用openresty配置文件,达到jwt指定用户userid不能访问的效果

#在CentOS7环境中&#xff0c;实现使用openresty配置文件&#xff0c;达到jwt指定用户userid不能访问的效果。 首先&#xff0c;你需要安装 OpenResty 和 JWT 组件&#xff1a; 安装 OpenResty 参考 OpenResty 的官方安装文档&#xff0c;在终端执行如下命令&#xff1a; $…...

SpringBoot 源码分析初始化应用上下文(1)-createApplicationContext

前言&#xff1a;springBoot的版本是 2.2.4.RELEASE 一、入口 /*** Run the Spring application, creating and refreshing a new* {link ApplicationContext}.* param args the application arguments (usually passed from a Java main method)* return a running {link A…...

STM32队列

目录 什么是队列&#xff1f; 队列特点 1. 数据入队出队方式 2. 数据传递方式 3. 多任务访问 4. 出队、入队阻塞 队列相关 API 函数 1. 创建队列 参数&#xff1a; 2. 写队列 参数&#xff1a; 返回值&#xff1a; 3. 读队列 参数&#xff1a; 返回值&#xf…...

探索Beyond Compare:让文件比较和管理变得简单高效

在这个信息爆炸时代&#xff0c;我们的日常生活和工作中需要处理大量的数据和文档。在这个过程中&#xff0c;有时候我们会面临找出不同文件之间的差异、合并重复内容等需求。那么&#xff0c;有没有一款软件可以帮助我们轻松地完成这些任务呢&#xff1f;答案当然是肯定的&…...

动态网站Servelt基础

文章目录 一、Servlet基础&#xff08;一&#xff09;Servlet概述1、Servlet是什么2、Servlet容器3、Servlet应用程序的体系结构 &#xff08;二&#xff09;Servlet的特点1、功能强大2、可移植3、性能高效4、安全性高5、可扩展 &#xff08;三&#xff09;Servlet接口1、Servl…...

Docker 网络

Docker 网络实现原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker网桥是每个容器的默认网关。因为在同一宿主机…...

Tomcat的优化

Tomcat的优化 一、Tomcat 优化Tomcat 配置文件参数优化 二、系统内核优化三、Tomcat 配置 JVM 参数&#xff1a;参数含义 一、Tomcat 优化 Tomcat默认安装下的缺省配置并不适合生产环境&#xff0c;它可能会频繁出现假死现象需要重启&#xff0c;只有通过不断压测优化才能让它…...

一个问题来对比文心一言和chatgpt

问题&#xff1a; 请注意&#xff0c; 孩子不会说话&#xff0c;他无法用语言来回复妈妈的问题&#xff0c; 请生成以下剧本&#xff1a;一个妈妈和一岁不会说话的婴儿的日常vlog的剧本 文心一言 场景一&#xff1a;早晨 &#xff08;妈妈和孩子在客厅里醒来&#xff09; 妈妈&…...

防雪崩利器之Hystrix

Hystrix作为一个容错组件&#xff0c;本文从它的作用、熔断设计、工作流程和应用方面一一道来&#xff0c;帮助大家了解如何使用。 1、什么是灾难性雪崩效应 要讲Hystrix&#xff0c;我们就要讲一种场景&#xff0c;在微服务架构中&#xff0c;如果底层服务出现故障&#xff0…...

机器学习复习(上)

严正声明&#xff1a;本文的答案是ChatGPT的回答&#xff0c;仅供参考&#xff0c;不代表就是正确答案&#xff01;&#xff01;&#xff01; 1.解释什么是过拟合和欠拟合&#xff0c;如何降低过拟合? 过拟合&#xff08;overfitting&#xff09;指的是一个模型在训练数据上表…...

node笔记_express结合formidable实现前后端的文件上传

文章目录 ⭐前言⭐安装http请求的文件解析依赖库&#x1f496; 安装 formidable&#x1f496; node formidable接受formData上传参数 ⭐上传的页面搭建&#x1f496; vue2 element upload&#x1f496; node 渲染 上传文件 ⭐后端生成api上传文件到指定目录&#x1f496;完整的…...

CKA 09_Kubernetes工作负载与调度 资源调度 三类QoS request 资源需求 limit 资源限额

文章目录 1. 资源调度1.1 准备工作1.2 为什么需要 request 和 limit1.3 内存限制1.3.1 Brustable1.3.2 Guaranteed1.3.3 BestEffort1.3.4 当容器申请的资源超出 limit 和 request 1.4 CPU限制 1. 资源调度 1.1 准备工作 Kubernetes 采用 request 和 limit 两种限制类型来对资源…...

【pytorch】维度变换

【pytorch】维度变换 View操作unSqueeze操作图片处理的一个案例squeeze 维度删减操作维度扩展-expand维度扩展-repeat矩阵的转置操作-transpose View操作 将一个四维的张量&#xff08;b x c x h x w&#xff09;转换成一个二维的张量 对于四张图片 将每一张图像用一行向量进…...

vue3中的nextTick()

目录 nextTick() 方法用法回调函数方式使用await方式使用 实现原理使用nextTick() 方法时的注意事项 nextTick() 方法 nextTick() 方法是一个非常强大的工具&#xff0c;是一个等待下一次 DOM 更新刷新的工具方法。用于将一个函数以异步的方式推迟到下一个 DOM 更新周期执行。…...

高效学习传感器|霍尔式传感器

01、霍尔式传感器的工作原理 1●霍尔效应 霍尔式传感器的物理基础是霍尔效应。如图1所示&#xff0c;在一块长度为l、宽度为b、厚度为d的长方体导电板上&#xff0c;左、右、前、后侧面都安装上电极。在长度方向上通入电流I&#xff0c;在厚度方向施加磁感应强度为B的磁场。 ■…...

2023年前端面试高频考点HTML5+CSS3

目录 浏览器的渲染过程⭐⭐⭐ CSS 、JS 阻塞 DOM 解析和渲染 回流&#xff08;重排&#xff09;和重绘⭐⭐ 选择器 ID选择器、类选择器、标签选择器&#xff08;按优先级高到低排序&#xff09;⭐⭐ 特殊符号选择器&#xff08;&#xff1e;,,~&#xff0c;空格&#xff0…...

企业开源测试项目实战(附全套实战项目教程+视频+源码)

接口测试项目 1. No matching distribution found for itypes1.1.0 Could not find a version that satisfies the requirement itypes1.1.0 (from -r requirements.txt (line 8)) (from versions: ) No matching distribution found for itypes1.1.0 (from -r requirements.…...

信创办公–基于WPS的EXCEL最佳实践系列 (创建表格)

信创办公–基于WPS的EXCEL最佳实践系列 &#xff08;创建表格&#xff09; 目录 应用背景操作步骤1、新建空白工作簿并命名为“奖牌榜”2、使用模板新建工作簿3、新增一张工作表&#xff0c;并将工作簿的标签更改为红色4、复制与隐藏工作表5、添加工作簿属性值6、更改工作簿主题…...

四、HAL_驱动机械按键

1、开发环境。 (1)KeilMDK&#xff1a;V5.38.0.0 (2)STM32CubeMX&#xff1a;V6.8.1 (3)MCU&#xff1a;STM32F407ZGT6 2、机械按键简介 (1)按键内部是机械结构&#xff0c;也就是内部是没有电路的。按键按下内部引脚导通&#xff0c;松开内部断开。 3、实验目的&原理…...