c3p0 服务启动获取连接超时_微服务架构中的熔断、降级

微服务架构中熔断和降级是保证服务高可用的一项重要功能点,微服务区别于一体化项目的最大区别也再于熔断和降级,很多微服务项目的开发人员对熔断的理解就是当服务不可用的时候,为了让整体服务可以正常运行,需要让后续的请求直接返回某个错误码。

微服务中的熔断是什么?

当电路中的负载过高的时候,“保险丝”就会熔断。微服务的熔断就如同保险丝一样,当服务间的调用出现频繁的超时,核心服务却一直在等待这个超时服务的响应结果,后果就是整个系统服务的卡顿、无反应,这对于用户端是不可接受的。所以熔断就是某个服务发生不断的调用响应超时的时候,就屏蔽掉这个服务,短路这个服务,不调用这个服务的具体内容直接返回一个默认值。

微服务中的降级是什么?

应该很多人都知道服务的限流吧,秒杀的时候,为了避免过高的并发压垮服务,一般系统都会对秒杀的请求做限流处理。这个就是典型的降级处理。

为了保证核心服务的正常运行,会对一些服务、接口、页面做降级处理,降级处理一般都是人工干预的,可以进行配置的。

熔断和降级的区别?

相同点

  • 都是为了保证服务的可用性,防止系统发生崩溃
  • 都导致了系统的某些服务、功能不可用

不同点

  • 熔断是由某个下游服务故障引起的,降级一般从系统的整体负荷去考虑

Hystrix是怎么进行降级熔断的?

hystrix可以做什么用?

使用断路器隔离线程和信号量,提供实时的监控、报警。防止出现级联故障、快速失败和迅速恢复。

d769153f60a351f39c4687799142f6b4.png

hystrix的隔离机制?

Hystrix是采用信号量/线程的方式进行资源的隔离,通过隔离限制依赖的并发量和阻塞扩散。

Hystrix 在用户请求和服务之间增加了一个线程池,用户的请求不会直接访问服务,而是通过Hystrix分配的线程池中的空闲线程来访问服务,如果线程池满了,默认不采用排队的方式,会直接进行降级处理。而且用户的请求不会无休止的阻塞,至少都会存在一个执行的返回结果(可以是一个友好的提示)。

信号量模式下,执行业务的线程和请求线程是同一个,不存在线程上下文切换带来的性能开销,信号量阻断并发访问指的是当前信号量有多少就允许多少线程去访问执行。

信号量的数量大小可以动态设置,线程池不允许。在使用线程池的时候,通过会通过自定义实现RequestInterceptor的接口来设置线程之间的请求头一致(比如请求头上携带的token)。

hystrix的熔断机制

如果某个服务存在大量的调用超时,此时就会对该服务做熔断处理,后续的所有请求都不在继续调用这个服务,而是直接返回一个提示,快速失败。间隔一段时间,如果目标服务情况好转后再恢复调用。

Circuit Breaker熔断器,熔断器是在线程池/信号量之前的组件,用户请求调用某一服务的时候,先经过熔断器,假如熔断器是打开的,则快速失败,请求不会再进入线程池。

熔断器相当于线程池之前的一个屏障,每个熔断器都会记录当前请求的调用成功、失败、超时、拒绝的次数。

熔断器存在三种状态:

Closed 关闭状态,调用失败次数积累到了阈值(或一定比例)则启动熔断机制;

Open 打开状态,这个时候对下游的调用都是内部直接返回错误,不走网络,但设计了一个时钟选项,默认的时钟达到了一定时间(这个时间一般设置成平均故障处理时间,也就是MTTR),到了这个时间,进入半熔断状态。

Half-Open 半熔断状态,允许定量的服务请求,如果调用都成功(或一定比例)则认为恢复了,关闭熔断器,否则认为还没好,又回到熔断器打开状态;

4867341d6e129dc08fd6bd91b475a6ee.png

熔断在调用的服务方法前增加注解

10a89842078f5fc94d38edd42bddb64f.png

服务降级,在Feign组件里面新增一个fallbackFactory方法。

ab1f21b8b2c14e45a56e84307cb23331.png

Hystrix流程图

a012a5d4cb5f770c64f7615997cfac47.png

流程说明

1、 每次调用的都会创建一个对象HystrixCommand,把依赖调用都封装到run方法里面。

2、执行execute/queue做同步或者异步调用。判断熔断器是否打开,如果打开则直接做降级策略,如果关闭则进行后续步骤。

3、判断线程池/信号量是否处于满状态,如果处于满状态则做降级策略,如果不是则调用对象HystrixCommand的run方法,执行业务逻辑。执行超时则降级处理。

4、计算熔断器状态,把所有的运行状态上报熔断器进行统计。

5、降级策略,抛出异常或者自定义处理方法。

Ribbon

在使用feign调用服务的时候,除了hystrix外还需要结合ribbon一起使用。通常ribbon起到的作用是设置连接时间、超时时间、调用服务的负载均衡等。

ribbon的一些配置:

#以下配置对服务hello-service-provider有效ribbon.eureka.enabled=true#建立连接超时时间,原1000ribbon.ConnectTimeout=60000#请求处理的超时时间,5分钟ribbon.ReadTimeout=60000#所有操作都重试ribbon.OkToRetryOnAllOperations=true#重试发生,更换节点数最大值ribbon.MaxAutoRetriesNextServer=10#单个节点重试最大值ribbon.MaxAutoRetries=1

Feign组件为什么要用接口调用远程接口呢?

feign是通过JDK的动态代理来实现的,对接口生成了对应的代理类进行请求处理和响应处理。

 feign+ribbon使用的是RestTemplate来进行调用的,服务调用的时候IP+port传入的是服务名,需要去注册中心换成真实的IP+端口。在这个过程中,ribbon提供了一个负载均衡的处理方式LoadBalancerClient。

 其实流程就是:服务启动的时候会注册到注册中心,ribbon会从注册中心获取到所有的服务列表和活跃的服务列表,当服务发生变化的时候,ribbon存在一个定时任务去获取、比对服务列表。

 Feign在默认情况下使用的是JDK原生URLConnection发送HTTP请求,没有连接池,但是对每个地址会保持一个长连接,即利用HTTP的persistence connection。我们可以用Apache的HTTP Client替换Feign原始的http client,从而获取连接池、超时时间等与性能息息相关的控制能力。

b64a1495dd9505d6264b601864ecf98c.png

     我是凯腾凯,互联网浪潮下一枚苟且偷生的程序员

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重塑APM标杆,博睿数据战略升级助力企业数字化转型

(博睿数据发布仪式) 2021年5月26日,由博睿数据举办的“服务可达 达者为先博睿数据2021年战略升级发布巡展”北京站,在北京金茂威斯汀大饭店圆满举行!本次战略升级发布巡展不仅揭开了“数据链DNA”的神秘面纱&#xff…

持续定义SaaS模式云数据仓库+数据银行

简介: 本文将介绍SaaS模式云数据仓库MaxCompute,如何助力数据银行SaaS模式云战略和一体化数据开放场景介绍。 一、云数据仓库 本章节介绍云数据仓库带来的价值及解决方案。 MaxCompute:SaaS模式企业级云数据仓库的应用场景包括广告场景-用…

2020-10-28

Kubernetes的门户-Ingress 目前Kubernetes(K8s)已经真正地占领了容器编排市场,是默认的云无关计算抽象,越来越多的企业开始将服务构建在K8s集群上。在K8s中,组件通过Service对外暴露服务,常见的包括NodePo…

centos 查找nginx_Linux下查看Nginx安装目录、版本号信息及当前运行的配置文件

Linux环境下,怎么确定Nginx是以那个config文件启动的?输入命令行: ps -ef | grep nginx摁回车,将出现如下图片:master process 后面的就是 nginx的目录。怎么查看服务器上安装的nginx版本号,主要是通过ngi…

530并行日:用超算更省心

科技兴,则民族兴;科技强,则国家强。 从“神舟”飞天、“蛟龙”入海、“天眼”遥看宇宙,到“嫦娥”奔月、“天问”探火、“量子”惊叹世界,这些世人瞩目的科技成就背后,是一代又一代的中国科技工作者前赴后继…

Flink SQL 1.11 on Zeppelin 平台化实践

简介: 鉴于有很多企业都无法配备专门的团队来解决 Flink SQL 平台化的问题,那么到底有没有一个开源的、开箱即用的、功能相对完善的组件呢?答案就是本文的主角——Apache Zeppelin。 作者:LittleMagic 大数据领域 SQL 化开发的风…

控件设置相对位置_惊人的Divi转换控件!

Divi的变换控件释放了许多新的设计可能你可以使用一系列新设计选项来执行惊人的设计,而到目前为止,只有在诸如Photoshop之类的图形设计程序中才可以这样操作。Divi引入了一项全新功能,该功能允许在Divi Builder中进行惊人的徒手设计&#xff…

第三代英特尔至强可扩展处理器,英特尔数据中心的“芯法宝”

作者 | 宋 慧 出品 | CSDN云计算 头图 | 付费下载于东方IC 距离英特尔发布第三代至强可扩展处理器Ice Lake的全系列产品,已经过去一个多月了。全新一代的至强处理器除了核数增加、性能提升与架构升级以外,还首次将SGX英特尔软件防护扩展技术&#xff08…

谈谈我对零售云在云原生总结与思考

简介: 云原生是零售云的最重要的技术底座,云原生是什么,会走向哪里,在零售2B交付的场景上该如何应用,怎么能够结合帮助建设零售云系列产品体系,值得我们的思考和探索,也将有效指导我们接下来几年…

oracle查看编码

select * from nls_database_parameters where parameter NLS_CHARACTERSET;

类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换

在游戏开发中,配置表是不可少的。通常我们将一个类,做成一个配置表,将配置表每列的索引都和类的字段名严格对应起来。先实例化一个类的对象,然后通过反射来遍历类中的字段,通过field.SetValue()给类的对象赋值。但是配…

人工智能如何提升大数据存储与管理效率?

简介: 通过使用AI数据存储,供应商和企业可以将存储管理提升到一个新的水平。而且,存储管理员可以找到他们目前正在努力管理的指标的解决方案。 随着大数据的大量来源以及企业可用数据量的增加,存储容量规划已成为存储管理员的问题…

wildfly10 (JBoss)如何部署SSL证书

文章目录1. 证书下载2. 证书配置2. 效果验证项目用的wildfly-10.1.0.Final。需要用到SSL证书,把部署过程记录下来,以供参考。1. 证书下载 本文的证书申请都来自阿里云。 1.首先把你的域名做好解析。 2.从阿里云上下载申请的SSL证书,类型选择…

奇点云集聚数据中台优势,加速企业数智化升级

作者 | 寇雪芹 出品 | CSDN云计算 头图 | 下载于视觉中国 近日,以“应云而生 原力觉醒”为主题的 StartDT Day 数据技术大会在杭州举办。会上,奇点云发布了最新的数据技术战略“跨平台、云原生、自主可控”、云原生数据中台 DataSimba R3.0、消费者数字…

2020-10-29

简介: 世上没有免费的午餐,微服务技术让 IT 系统变得更敏捷、更健壮、更高性能的同时,也带来了架构复杂度的提升。对于开发者而言,要想更好的驾驭微服务架构,需要解决持续集成、服务发现、应用通信、配置管理、流量防护…

状态码202_至少 10 个 HTTP 状态码

HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。HTTP状态码 HTTP状态码总的分为五类:1开头:信息状态码2开头:成功状态码3开头:重定向状态码4开头…

玩转 IntelliJ IDEA 2020

文章目录一、基础软件集成配置系列1. 常用快捷键2. IDEA 配置JDK项目应用 JDK3. IDEA 配置 Maven4. IDEA 配置 TOMCAT5. IDEA配置 Git6. IDEA配置的导入导出7. IDEA控制台输出乱码8. IDEA注释模板9. IDEA xml模板10. IDEA 高效开发11. SpringBoot 集成 MyBatisPlus 模板12. Spr…

CSDN 独家对话阿里云贾扬清、华先胜等大咖,剧透阿里云原生技术密码

新一轮科技革命和产业变革正重塑全球发展格局,以云计算为代表的新一代信息技术相互渗透,成为数字经济智能和创新发展新引擎。过去 12 年,人们对云计算的讨论从原来的“为什么上云”,到“为什么不上云”,再到如今探索“…

持续定义Saas模式云数据仓库+实时搜索

简介: 本文由阿里云计算平台事业部 MaxCompute 产品经理孟硕为大家带来《持续定义Saas模式云数据仓库实时搜索》的相关分享。以下是视频内容精华整理,主要包括以下三个部分:1.Why:概述与价值;2.What:应用场…

弹窗进度条_QQ 大更新!语音进度条来了,还有这 5 个新变化

4 月 13 日,QQ 迎来了 8.0.0 for iOS 的更新。在其 App Store 的更新描述中可以看到,本次更新不仅升级了 QQ 的界面、优化了多人语音和转发消息的体验,语音消息还支持暂停和进度拖动了。知晓君第一时间对新版本 QQ 进行了一番体验&#xff0c…