首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >3种处理DevOps瞬态故障的方法[DevOps]

3种处理DevOps瞬态故障的方法[DevOps]

作者头像
yyx
修改于 2020-01-17 10:11:05
修改于 2020-01-17 10:11:05
9970
举报

DevOps旨在通过持续的业务价值来使利益相关者满意,而如何处理瞬态故障也是其中的一部分。

图片来源:Opensource.com
图片来源:Opensource.com

在电气工程中,瞬态故障定义为在断开电源并恢复后消失的错误状态。 当强制关闭物理设备的电源,然后在充满乱码的蓝色崩溃屏幕上强制关闭或打开物理设备的电源时,这也是许多人不自觉使用的解决方法。

云计算中,将面对越来越多的复杂性,未知的未知因素,或更糟糕的是,将永远无法接触到的未知未知的基础设施,以及以指数级速度发展的技术和连接不断扩展的数字世界的不同解决方案。 如今,虚拟用户对无响应,不可靠和性能不佳的产品的容忍度为零-每个人都希望24x7全天候正常运行时间以及不断发展并融入其生活方式的解决方案。

在这个新的虚拟世界中,不能走动并重启机器,至少不会影响数百,数千甚至数百万的用户。在当今竞争激烈的世界中,对品牌和产品的忠诚度正在迅速下降。用户可能会在单击按键时寻找替代服务,而从不回头,而不是忍受任何可衡量的停机时间。

来快速看一下两个令人沮丧的事件,这些事件提醒我们,当今的瞬时故障可能发生在心跳中,难以识别和解决,并且对利益相关者产生深远的影响。

粗略补丁:“过去半个星期在服务方面遇到了一些问题。我对此感到非常恐惧,对此我深表歉意。这是自不稳定性以来,遇到的最大事件。服务重构”,微软公司云开发服务副总裁Brian Harry在博客中写道。经过数周的不眠之夜,根本原因被确定为对访问控制服务(ACS)的请求风暴,该请求耗尽了源网络地址转换(SNAT)端口,阻止了身份验证并影响了我们的涉众。

503错误:Cellenza的Mikael Krief在ALM DevOps Rangers博客上报道说:“从Azure功能实施的开始就开始设置监视,这证实了在DevOps流程中进行监视的重要性。”同样,花了整夜不眠的夜晚,找到了重构后的扩展为何引发连接和线程风暴,破坏了Azure服务以及使利益相关方感到“ 503服务不可用”错误的根本原因。

可以为云应用程序设置故障和灾难恢复,以帮助最大程度地减少(而不是消除)由于资源故障或自然灾害造成的中断所造成的影响。但是,对于使用远程资源或与远程服务通信的解决方案,需要增加对瞬态故障的敏感性。经过精心设计的解决方案可以在发出警报之前检测并尝试对瞬态故障进行自我纠正,甚至更糟的是,它们会变得无响应并发生故障。

有几种瞬态故障处理模式,包括以下白板上显示的三种:重试,节流和断路器。

重试模式

重试模式是三种瞬态故障处理模式中最简单的一种,这是在日常生活中自然要做的事情。 它在跨分布式网络进行通信的解决方案中有效,以处理由网络延迟,服务过载和断电等问题引起的瞬时故障。

伪码

Set failure_count = 0 Call the [micro] service If (fail) failure_count++ If (failure_count > retry_limit) or (not transient failure) FAIL Delay (delay_time) Increase delay_time by factor of failure_count Retry step 2

该模式可确保在不理想的情况下,用户的请求最终成功,在这种情况下,瞬态故障会导致立即和频繁的故障。 有关详细信息,请参见开放源代码实现,例如java-design-patterns和transient-fault-handling-application-block。

节流模式

需要保护服务免受过度使用解决方案或由于系统或逻辑故障而变得无聊的客户的侵害。 就像为六车道高速公路服务的四车道隧道一样,必须管理超过最大吞吐量(隧道)的请求(汽车)和节流端点(车道)的流量。

伪码

Increment request_count // Limit – Maximum requests within an interval // Degrade – Fail with “slow down” error or pause operation If (request_count > limit) degrade service Call the [micro] service

该模式有助于满足服务水平协议,防止单个用户过度使用系统,优化请求流以及处理突发的请求。需要增加先前模式中重试之间的延迟的原因之一是,确保不会无意中超过系统的吞吐量并触发服务质量下降。有关更多详细信息,请参见WebApiThrottle和Core.Throttling等开源实现。

断路器模式

像家中的断路器一样,断路器模式是您的最后防御。重试模式有助于自动纠正短暂的瞬态故障,但此模式更适合需要较长时间才能解决的瞬态故障。在处理网络或服务中断(例如“粗糙补丁”事件)时,重试失败的服务操作可能会使情况恶化,导致级联故障,并最终触发解决方案崩溃。断路器模式的假设是,失败的服务呼叫很可能在(且仅当)在重大延迟后自动重试时才成功。

就像在黑暗中交错进入地下室以找到断路器柜一样,可以在翻转开关之前让电气系统和潜在的静电荷恢复。

伪码

// Circuit breaker has not tripped If (circuit_state == open)

Call the [micro] service If (fail) fail_count++ If (fail_count > limit) circuit_state = closed

// Circuit breaker tripped Else

If (circuit_state == closed) Start Timer

// Call back for timer event On Timer timeout

Call the [micro] service If (success) circuit_state == open

有关更多详细信息,请参见开源实现,例如Hystrix,断路器和Polly。

不要担心缺点

切记包括所有已知故障和已实施处理模式的单元测试集成测试。触发故障处理逻辑时,单元测试必须验证解决方案是否能够正确响应。另一方面,集成测试必须模拟弹性故障,以验证集体服务解决方案可以有效地处理故障。可以使用服务虚拟化(例如Hoverfly)来模拟服务,瞬态故障和降级服务。若解决方案和相关的故障处理模式未能实现自我修复和避免灾难性崩溃的希望,那么利益相关者将不会感到高兴。

因此,故障(如故障)是无可指责的DevOps的功能,不应该担心它们。为了保持竞争力,必须提高基础架构,解决方案和问责制的质量标准,以进行根本原因级别的检测,补救和自我纠正,以维持可接受的服务级别。

例如,在下图中,微服务#7已爆破,触发断路器和流量节流,并在继续为用户提供服务的同时允许系统恢复。从这个简单的图示中可以明显看出,故障的组合和处理故障的复杂性在切换功能标志时会变得复杂。

这些模式和其他模式对于健康的DevOps思维方式的核心价值之一是强大的盟友,以“超越当今流程的界限进行改进-力求始终创新和改进,超越可重复的流程和框架”。 他们帮助我们提高了质量标准,并不断交付业务价值,并使利益相关者感到高兴。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Dapr 弹性的策略
云原生应用需要处理 云中很容易出现瞬时故障。原因在以下文档 暂时性故障处理[1] 中有具体说明。
张善友
2022/03/29
9570
Dapr 弹性的策略
故障驱动的微服务架构设计
此文背景: 之所以发布此文,是有一个直接的原因,就是我们之前在线上遇到了一个使用timeout来判断是否失败的案例,这是真实的,结果就是效果很不好。看了本文中介绍的各种技术和架构模式,让我忽然对之前的这个案例有了一个新的认识,就是“快速失败”不应该依赖于传统的比如timeout这种超时机制来进行,也许使用本文中介绍到的技术(比如:Circuit Breakers)要更加地可靠和受控。 目录 微服务架构的风险 优雅的服务降级 变更管理 健康检查和负载平衡 自愈(Self-healing) 故障转移缓存
ImportSource
2018/04/03
1.4K0
故障驱动的微服务架构设计
微服务架构如何避免大规模故障?
微服务架构通过一种良好的服务边界划分,能够有效地进行故障隔离。但就像其他分布式系统一样,在网络、硬件或者应用级别上容易出现问题的机率会更高。服务的依赖关系,导致在任何组件暂时不可用的情况下,就它们的消费者而言都是可以接受的。为了能够降低部分服务中断所带来的影响,我们需要构建一个容错服务,来优雅地应对特定类型的服务中断。
lyb-geek
2021/12/10
4530
微服务架构如何避免大规模故障?
大话微服务架构的故障隔离及容错处理机制
8、限流器和负载开关(Rate Limiters and Load Shedders)
技术zhai
2018/08/27
2.5K0
大话微服务架构的故障隔离及容错处理机制
博文精译-断路器模式
来源: https://martinfowler.com/bliki/CircuitBreaker.html
java达人
2019/05/13
6340
博文精译-断路器模式
.NET弹性和瞬态故障处理库Polly的7种策略
在现代分布式系统中,服务之间的通信越来越复杂。无论是内部微服务之间的调用,还是对外部API、数据库的访问,都会面临网络延迟、服务器故障等瞬态问题。为了保证系统的稳定性和可用性,我们需要采取一定的容错和故障处理措施。
Michel_Rolle
2024/12/02
2.8K0
使用 Micro 构建弹性与容错的应用程序
自上一篇博客发布以来,已有一段时日了,此间我们一直在努力研究 Micro,并且已经初见成效。现在让我们一起深入探讨吧!
StoneDemo
2018/06/28
1.3K0
使用 Micro 构建弹性与容错的应用程序
Golang 中的断路器模式
断路器模式的工作原理是引入一个“断路器”组件,该组件充当调用服务与其调用的服务之间的代理。断路器会跟踪它所调用的服务的运行状况,如果它检测到服务出现故障,它将打开电路并停止向失败的服务发送请求。这样可以防止调用服务因失败的请求而陷入困境,并允许其继续运行。
Michel_Rolle
2023/12/21
3K0
【微服务架构】为故障设计微服务架构
微服务架构可以通过定义明确的服务边界隔离故障。但就像在每个分布式系统中一样,网络、硬件或应用程序级别问题的可能性更高。由于服务依赖关系,任何组件都可能对其消费者暂时不可用。为了最大限度地减少部分中断的影响,我们需要构建可以优雅地响应某些类型的中断的容错服务。
架构师研究会
2022/05/25
5500
【微服务架构】为故障设计微服务架构
架构的容错性设计
“容错性设计”(Design for Failure)是微服务的另一个核心原则,也是架构反复强调的开发观念的转变。
燃192
2023/04/11
9950
架构的容错性设计
Spring Boot - 利用Resilience4j-Circuitbreaker实现断路器模式_防止级联故障
Spring Boot - 利用Resilience4j-RateLimiter进行流量控制和服务降级
小小工匠
2024/05/25
1.9K1
Spring Boot - 利用Resilience4j-Circuitbreaker实现断路器模式_防止级联故障
聊聊Asp.net Core中如何做服务的熔断与降级
而对于微服务来说,熔断就是我们常说的“保险丝”,意为当服务出现某些状况时,切断服务,从而防止应用程序不断地尝试执行可能会失败的操作造成系统的“雪崩”;或者大量的超时等待导致系统卡死等情况,很多地方也将其成为“过载保护”。
乔达摩@嘿
2023/07/21
4320
聊聊Asp.net Core中如何做服务的熔断与降级
使用Hystrix对微服务进行保护
在微服务实战这本书中提到过一个健康的微服务架构,一定是可伸缩的,弹性的。可伸缩的的无非是服务从单机变成了集群,可以根据服务的业务能力把控住服务分片的数量。自然可伸缩的也不是今天要讨论的重点,下一个弹性的才是今天要Battle的课题。
姜同学
2022/10/27
4640
使用Hystrix对微服务进行保护
微服务断路器模式那家强:Istio vs Hystrix?
本文作者由浅及深,从核心问题的引入到具体模式的代码实现,阐述了微服务两种断路器模式的实现原理、优缺点以及二者的比较。
用户5927304
2019/07/31
1.3K0
精:在 .NET 8中使用 Polly 处理瞬态故障
在本文中,我们将学习如何在与服务交互时实现重试机制,尤其当服务出现一些瞬态故障时。
郑子铭
2024/12/10
3960
精:在 .NET 8中使用 Polly 处理瞬态故障
【韧性架构】让你的微服务容错的 5 种模式
在本文中,我将介绍微服务中的容错以及如何实现它。如果你在维基百科上查找它,你会发现以下定义:
架构师研究会
2022/06/08
1.1K0
【韧性架构】让你的微服务容错的 5 种模式
分布式系统的弹性设计
在讨论分布式系统的弹性之前,让我们快速回顾一些基本术语: 弹性Resiliency:任何系统从困难中恢复的能力,(banq注:弹性也就是适应能力)。 分布式系统:一些网络组件通过传递消息来完成一个共同目标。 可用性:任何系统在任何时间点保持正常运行的可能性。 故障与故障:故障Fault是您的系统中是不正确的内部状态。系统中一些常见的故障例子包括: 1.存储层缓慢 2.应用程序中的内存泄露 3.被阻塞的线程 4.依赖性故障 5.在系统中传播坏数据(通常是因为输入数据没有足够的验证) 失败Failure是系统无法执行其预期工作。 失败意味着系统正常运行时间和可用性的损失。故障如果不被封装,会导致在系统中传播,从而导致失败。 当故障Fault转为失败Failure时就意味着系统发生了故障: 弹性就是为了防止故障Fault转化为失败Failure 我们为什么关心系统的弹性? 系统的弹性与其正常运行时间和可用性成正比。系统越有弹性,服务用户的可用性越高。 如果不具有弹性能力,可能会以多种方式影响公司各个方面。 分布式系统的弹性设计很难 我们都明白'可用'至关重要。为了保证可用性,我们需要从零开始建立弹性,以便我们系统中的故障自动恢复。 但是在具有多个分布式系统的复杂微服务架构中建立弹性是很困难的。这些困难是: 1.网络不可靠 2.依赖性总是失败 3.用户行为是不可预测的 虽然构建弹性很难,但并非不可能。遵循一些构建分布式系统的模式可以帮助我们在整个服务中实现较高的正常运行时间。我们将讨论未来的一些模式: 模式[0] = nocode
lyb-geek
2018/09/27
2.1K0
分布式系统的弹性设计
微服务的几种设计模式
定义:微服务架构是将软件系统分解为可独立部署的自治单元,这些单元通过轻量级、与语言无关的方式进行通信,并共同实现业务目标
素履coder
2022/02/17
9420
微服务的几种设计模式
K8s 平台可以如何处理 Pod 预授权问题
吕力,腾讯云容器团队高级工程师。负责腾讯云内部上云容器服务平台的自研业务适配,资源管理与成本优化的工作。 前言 TKEx-CSIG 是基于腾讯公有云 TKE 和 EKS 容器服务开发的内部上云容器服务平台,为解决公司内部容器上云提供云原生平台,以兼容云原生、适配自研业务、开源协同为最大特点。 业务容器上云过程中,会遇到一些问题,有的需要业务进行容器化改造,有的需要平台赋能。平台赋能的部分,有一类问题是 CVM 场景下已经有解决方案的,而因运维方式不同在 Kubernetes 平台上不兼容的,比如 Pod
腾讯云原生
2021/01/19
1K0
Java学习笔记-微服务(4)-服务熔断和降级
在分布式系统中,许多依赖不可避免的会调用失败,Hystrix 能够保证在一个依赖出问题的情况下,不会导致整体服务失败,以提高分布式的弹性。
咸鱼程序员
2025/03/05
1760
Java学习笔记-微服务(4)-服务熔断和降级
相关推荐
Dapr 弹性的策略
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档