微服务架构—服务降级

15 篇文章 1 订阅
订阅专栏

1 简介

        什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。

        如果还是不理解,那么可以举个栗子:假如目前有很多人想要给我付钱,但我的服务器除了正在运行支付的服务之外,还有一些其它的服务在运行,比如搜索、定时任务和详情等等。然而这些不重要的服务就占用了JVM的不少内存与CPU资源,为了能把钱都收下来(钱才是目标),我设计了一个动态开关,把这些不重要的服务直接在最外层拒掉,这样处理后的后端处理收钱的服务就有更多的资源来收钱了(收钱速度更快了),这就是一个简单的服务降级的使用场景。

2 使用场景

        服务降级主要用于什么场景呢?当整个微服务架构整体的负载超出了预设的上限阈值或即将到来的流量预计将会超过预设的阈值时,为了保证重要或基本的服务能正常运行,我们可以将一些 不重要 或 不紧急 的服务或任务进行服务的 延迟使用 或 暂停使用

3 核心设计

3.1 分布式开关

        根据上述需求,我们可以设置一个分布式开关,用于实现服务的降级,然后集中式管理开关配置信息即可。具体方案如下:

服务降级-分布式开关

3.2 自动降级

  • 超时降级 —— 主要配置好超时时间和超时重试次数和机制,并使用异步机制探测恢复情况

  • 失败次数降级 —— 主要是一些不稳定的API,当失败调用次数达到一定阀值自动降级,同样要使用异步机制探测回复情况

  • 故障降级 —— 如要调用的远程服务挂掉了(网络故障、DNS故障、HTTP服务返回错误的状态码和RPC服务抛出异常),则可以直接降级

  • 限流降级 —— 当触发了限流超额时,可以使用暂时屏蔽的方式来进行短暂的屏蔽

        当我们去秒杀或者抢购一些限购商品时,此时可能会因为访问量太大而导致系统崩溃,此时开发者会使用限流来进行限制访问量,当达到限流阀值,后续请求会被降级;降级后的处理方案可以是:排队页面(将用户导流到排队页面等一会重试)、无货(直接告知用户没货了)、错误页(如活动太火爆了,稍后重试)。

3.3 配置中心

        微服务降级的配置信息是集中式的管理,然后通过可视化界面进行友好型的操作。配置中心和应用之间需要网络通信,因此可能会因网络闪断或网络重启等因素,导致配置推送信息丢失、重启或网络恢复后不能再接受、变更不及时等等情况,因此服务降级的配置中心需要实现以下几点特性,从而尽可能的保证配置变更即使达到:

服务降级-配置中心

  • 启动主动拉取配置 —— 用于初始化配置(减少第一次定时拉取周期)

  • 发布订阅配置 —— 用于实现配置及时变更(可以解决90%左右的配置变更)

  • 定时拉取配置 —— 用于解决发布订阅失效或消失丢失的情况(可以解决9%左右的发布订阅失效的消息变更)

  • 离线文件缓存配置 —— 用于临时解决重启后连接不上配置中心的问题

  • 可编辑式配置文档 —— 用于直接编辑文档的方式来实现配置的定义

  • 提供Telnet命令变更配置 —— 用于解决配置中心失效而不能变更配置的常见

3.4 处理策略

        当触发服务降级后,新的交易再次到达时,我们该如何来处理这些请求呢?从微服务架构全局的视角来看,我们通常有以下是几种常用的降级处理方案:

  • 页面降级 —— 可视化界面禁用点击按钮、调整静态页面

  • 延迟服务 —— 如定时任务延迟处理、消息入MQ后延迟处理

  • 写降级 —— 直接禁止相关写操作的服务请求

  • 读降级 —— 直接禁止相关度的服务请求

  • 缓存降级 —— 使用缓存方式来降级部分读频繁的服务接口

        针对后端代码层面的降级处理策略,则我们通常使用以下几种处理措施进行降级处理:

  • 抛异常

  • 返回NULL

  • 调用Mock数据

  • 调用Fallback处理逻辑

4 高级特性

        我们已经为每个服务都做好了一个降级开关,也已经在线上验证通过了,感觉完全没问题了。
        场景一:某一天,运营搞了一次活动,突然跑过来说,现在流量已经快涨到上限了,有没有批量降级所有不重要服务的方式?开发一脸懵逼的看着,这又不是操作DB,哪里有批量操作呀。
        场景二:某一天,运营又搞事了,说我们等下要搞一个活动,让我们赶紧提前把不重要的服务都降级了,开发又是一脸懵逼,我怎么知道要降级哪些服务呀。
        反思:服务降级的功能虽然是实现了,可是没有考虑实施时的体验。服务太多,不知道该降级哪些服务,单个操作降级速度太慢……

4.1 分级降级

        当微服务架构发生不同程度的情况时,我们可以根据服务的对比而进行选择式舍弃(即丢车保帅的原则),从而进一步保障核心的服务的正常运作。

        如果等线上服务即将发生故障时,才去逐个选择哪些服务该降级、哪些服务不能降级,然而线上有成百上千个服务,则肯定是来不及降级就会被拖垮。同时,在大促或秒杀等活动前才去梳理,也是会有不少的工作量,因此建议在开发期就需要架构师或核心开发人员来提前梳理好,是否能降级的初始评估值,即是否能降级的默认值。

        为了便于批量操作微服务架构中服务的降级,我们可以从全局的角度来建立服务重要程度的评估模型,如果有条件的话,建议可以使用 层次分析法(The analytic hierarchy process,简称AHP) 的数学建模模型(或其它模型)来进行定性和定量的评估(肯定比架构师直接拍脑袋决定是否降级好很多倍,当然难度和复杂度也会高许多,即你需要一个会数学建模人才),而层次分析法的基本思路是人对一个复杂的决策问题的思维和判断过程大体上是一样的。

        以下是个人给出的最终评价模型,可作为服务降级的评价参考模型进行设计:

        我们利用数学建模的方式或架构师直接拍脑袋的方式,结合服务能否降级的优先原则,并根据台风预警(都属于风暴预警)的等级进行参考设计,可将微服务架构的所有服务进行故障风暴等级划分为以下四种:

评估模型

  • 蓝色风暴 —— 表示需要小规模降级非核心服务

  • 黄色风暴 —— 表示需要中等规模降级非核心服务

  • 橙色风暴 —— 表示需要大规模降级非核心服务

  • 红色风暴 —— 表示必须降级所有非核心服务

设计说明

  • 故障严重程度为:蓝色<黄色<橙色<红色

  • 建议根据二八原则可以将服务划分为:80%的非核心服务+20%的核心服务

        以上模型只是整体微服务架构的服务降级评估模型,具体大促或秒杀活动时,建议以具体主题为中心进行建立(不同主题的活动,因其依赖的服务不同,而使用不同的进行降级更为合理)。当然模型可以使用同一个,但其数据需要有所差异。最好能建立一套模型库,然后实施时只需要输入相关服务即可输出最终降级方案,即输出本次大促或秒杀时,当发生蓝色风暴时需要降级的服务清单、当发生黄色风暴时需要降级的服务清单……

4.2 降级权值

        微服务架构中有服务权值的概念,主要用于负载时的权重选择,同样服务降级权值也是类似,主要用于服务降级选择时的细粒度优先级抉择。所有的服务直接使用以上简单的四级划分方式进行统一处理,显然粒度太粗,或者说出于同一级的多个服务需要降级时的 降级顺序 该如何?甚至我想要人工智能化的 自动降级,又该如何更细粒度的控制?

        基于上述的这些AI化的需求,我们可以为每一个服务分配一个降级权值,从而便于更加智能化的实现服务治理。而其评估的数值,同样也可以使用数学模型的方式进行 定性 与 定量 的评估出来,也可以架构师根据经验直接拍脑袋来确定。

5 总结与展望

        以上提供了半实际与半理论的服务降级方案,使用者可以根据其公司的实际情况进行适当的选择,而完整的方案,笔者目前也没有发现有实施过的,但可以建议有长远服务治理规划的大厂进行完整方案的研究与实施,会对未来人工智能万物互联的时代有较好的治理价值存在(个人看法)。而小厂出于成本和其发挥的价值的考虑,不建议使用这么复杂的方案,但可以实现分布式开关和简单分级降级的功能特性。

        本文主要以服务降级为核心进行更加理想的治理微服务架构,其中建议运用数学领域的适当模型来实现 定性 和 定量 的合理分析和治理微服务,为未来 人工智能治理微服务(Artificial Intelligence Governance Micro Service,简称AIGMS)提供方案支持。

微服务架构(熔断机制及服务降级).pptx
01-29
微服务熔断及服务降级方案
微服务架构中的服务质量保障研究
05-06
本文围绕微服务架构服务质量保障展开研究,通过熔断、降级、多路调用等方式解决服务调用过程中出现的各种问题.提出了微服务调用参数的计算模型,以实时的业务和设备监控数据为基础,对服务调用参数的精细化计算,...
springCloud服务降级的三种方式
a10534126的博客
04-27 3413
使用Hystrix配置降级降级方法写在Controller中,每个方法写一个 pom导入依赖: feign调用服务启用服务降级 在主启动类启用hystrix 在调用放配置降级方法 2.降级方法写在Controller中,写一个统一的降级方法 controller上加上注解,设置统一默认的降级方法 在每个方法上,加上注解@HystrixCommand 3.定义feign接口的实现类,实现类的方法处理降级 写一个类,继承feign接口 在feign借口中,加上注解 ...
spring-cloud之服务降级feign-Hystrix
newsun87的博客
12-28 299
当某些时间段,某些服务访问量太低,有些服务的访问量又特别的高。这个时候,可以关闭访问量低的服务用于提供高访问量的服务,需要在客户端提供服务降级处理(当客户访问访问量低的服务时,由于该服务已经关闭,客户端直接返回降级处理结果)
SpringCloud微服务实现服务降级的实践指南
最新发布
小筱在线博客
04-23 817
在实施服务降级时,需要设置合理的降级策略、监控和报警系统的运行情况,并采取合适的容错和恢复措施。其中,服务降级是一种常见的微服务实践,在高并发情况下保证系统的可用性和稳定性。超时降级是指在请求服务的过程中,如果服务的响应时间超过了预设的阈值,就会触发降级策略。熔断降级是指在服务调用过程中,如果服务的错误率超过了预设的阈值,就会触发降级策略。可以通过监控服务的错误率和请求量,并在错误率超过阈值时执行降级操作。Spring Cloud提供了多种实现服务降级的方式,包括:超时降级、限流降级、异常降级和熔断降级
小白学SpringCloud(六):服务降级(Hystrix)
catalinaLi的博客
08-06 6847
微服务架构中,我们将系统拆分为很多个服务,各个服务之间通过注册与订阅的方式相互依赖,由于各个服务都是在各自的进程中运行,就有可能由于网络原因或者服务自身的问题导致调用故障或延迟,随着服务的积压,可能会导致服务崩溃。为了解决这一系列的问题,断路器等一系列服务保护机制出现了。 一、Hystrix简介 Netflix提供了一个叫Hystrix的类库,它实现了断路器模式。在微服务...
SpringCloud——服务降级三种实现
linbomm的博客
03-15 607
一、fallback yml server: port: 80 spring: application: name: cloud-provider-hystrix-order eureka: client: register-with-eureka: true #示表不向注册中心注册自己 fetch-registry: true #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务 service-url: defaultZ
如何设计高可用的微服务架构
02-25
微服务架构通过定义良好的边界让失效隔离成为可能,但每一个分布式系统都存在同样的问题——网络、硬件或应用程序层面都有可能出现故障。因为服务之间存在依赖关系,所以任何一个组件出现了问题都会影响到组件依赖者...
Spring的微服务架构教程
06-07
Spring的微服务架构教程. 目前的Spring流行的微服务治理的框架的详细教程讲解. 服务的限流和降级等等的微服务的治理的功能讲解
SpringCloud微服务架构Demo案例
04-17
上传的这个microservicecloud工程的主要使用了SpringCloud的5大技术栈做了一个微服务架构案例,涉及到Eureka集群的配置、Ribbon的自定义负载均衡、Feign的声明式接口调用、Hystrix的服务熔断和降级、Zuul的Api ...
10招,提升你的微服务架构可用性
02-25
微服务架构通过定义良好的边界让失效隔离成为可能,但每一个分布式系统都存在同样的问题——网络、硬件或应用程序层面都有可能出现故障。因为服务之间存在依赖关系,所以任何一个组件出现了问题都会影响到组件依赖者...
微服务架构如何保障99.99%高可用
01-27
微服务架构本身最最核心的保障高可用的措施,就是两点:一个是基于Hystrix做资源隔离以及熔断;另一个是做备用降级方案。如果资源隔离和降级都做的很完善,那么在双11这种高并发场景下,也许可能会出现个别的服务...
避免大规模故障的微服务架构设计之道
02-25
本文首先介绍微服务架构存在的风险,然后针对如何避免微服务架构的故障,提出了多种有效的微服务架构中的方法和技术,其中例如服务降级、变更管理、健康检查和修复、断路器、限流器等。微服务架构通过定义明确的服务...
若依微服务架构134集教程百度盘地址 随带源码地址 和 讲解 运行部署视频
11-09
RuoYi-Cloud 微服务版本视频课程目录 ├──01 项目概述.mp4 20.77M ├──02 微架构概念.mp4 20.99M ├──03 微架构及选型.mp4 21.19M ├──04 目录文件介绍.mp4 17.16M ├──05 项目运行.mp4 108.31M ├...
基于SpringAuthorizationServer全新适配OAuth2.1协议的企业级技术中台微服务架构服务能力开发平台
12-26
Dante Cloud (但丁,原 Eurynome Cloud) 是一款企业级微服务架构服务能力开发平台,是采用领域驱动模型(DDD)设计思想的、全面拥抱 Spring Authorization Server 的、基于 OAuth2.1 协议的、支持智能电视、IoT等...
架构相关:服务降级思路与方法
Java搜索工程技术栈
06-21 1713
如果看过我前面对服务限流的分析,理解服务降级就很容易了,对于一个景区,平时随便进出,但是一到春节或者十一国庆这种情况客流量激增,那么景区会限制同时进去的人数,这叫限流,那么什么是服务降级呢?简单来说就是,将一些不太重要的景区项目砍掉,平时就那么三五八个人,景区可以开放湖中游泳啦,摸鱼啦,捉虾啦,有情况工作人员可以下湖捞你,但是现在客流量大了,工作人员关注不过来,都在湖里晃荡万一沉了不太安全,大手一挥,这个项目砍了,将工作人员分配在其他地方。在互联网中也有类似的降级措施,像之前双11, 有段时间是只允许下单不
java业务代码自动降级实现
tqy的博客
07-30 1467
我们设想的是,在需要降级的方法上,加上一个注解,就能够实现降级的全部功能。所以先定义一个注解。/***是否需要降级的注解配置*35/***是否降级**@return/***需要降级的部门接口*假设有部门A和部门B*部门A有接口C和D*部门B有接口E和F*则在C和D的方法上配置A,并且降级开关打开的时候,就会直接降级接口C和D*@return/***降级日志描述,方便定位问题**@return}...
spring微服务架构概念
12-28
4. 服务容错:微服务架构中的服务可能会出现故障或不可用的情况,为了提高系统的容错性,可以使用断路器模式和服务降级等机制。 5. 配置管理:微服务架构中的每个服务都有自己的配置,Spring Cloud提供了Spring ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • python3 日志检索异常raise KeyError(key),KeyError: 'formatters' 50660
  • 深度学习与神经网络-压缩感知(Compressive Sensing)学习(五) 13660
  • python3 selenium ActionChains用法 13565
  • ffmpeg 转码(mp4--h264)标准操作,直接按命令粘贴即可 13166
  • linux selenium chrome chromedriver及无浏览器界面运行方式 12791

分类专栏

  • 保险精算算法 1篇
  • R语言基础及高阶学习
  • 技术运维 29篇
  • 深度学习与神经网络 8篇
  • 人工智能 25篇
  • 机器学习 17篇
  • 分布式服务 15篇
  • 项目检查 2篇
  • 项目运营 2篇
  • 代码优化 8篇
  • 技术了解 3篇
  • 后台服务 1篇
  • 多线程 1篇
  • 技术架构 4篇

最新评论

  • python3 日志检索异常raise KeyError(key),KeyError: 'formatters'

    qq_40113195: 很简单,就是配置文件路径不对

  • python3 日志检索异常raise KeyError(key),KeyError: 'formatters'

    dcasssvrebt: 请问在哪改啊

  • python3 selenium ActionChains用法

    白坭: 弱弱的问下无头模式可以使用吗

  • python3 日志检索异常raise KeyError(key),KeyError: 'formatters'

    shixiaoyila: 你好,我的Python日志文件怎么找不到啊

  • python3 日志检索异常raise KeyError(key),KeyError: 'formatters'

    m0_61729787: 切换绝对路径也可

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • IBNR详解及基于R的计算逻辑
  • 元数据驱动为服务架构
  • springCloud Finchley.RELEASE gateway 动态网关实现及gateway功能综述,优化
2023年1篇
2022年1篇
2020年5篇
2019年6篇
2018年73篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司南联百度竞价公司安康企业网站设计哪家好驻马店网络广告推广多少钱周口网站设计多少钱郑州SEO按天收费哪家好玉溪英文网站建设报价白山百度网站优化排名报价龙岗百度竞价包年推广推荐黔南网站制作公司荆门网站推广系统报价辽阳网页设计绵阳网站推广方案公司临沧网站推广临猗优化哪家好同乐seo网站优化公司哈密百度seo多少钱临汾推广网站喀什百姓网标王推广黔西南网站定制公司坪山外贸网站建设哪家好常州百姓网标王推广报价邯郸网站搜索优化大同推广网站淮安百姓网标王报价鸡西建网站多少钱周口设计公司网站推荐阜新至尊标王惠州seo排名多少钱柳州网站推广系统天水网站改版多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化