当前位置: 首页 > 科技观察

微服务架构开发实践:什么是微服务的熔断机制以及熔断的意义

时间:2023-03-17 20:05:08 科技观察

微服务的熔断机制是什么2017年2月1日,GitLab公司的运维人员发生了这样的事故。当时运维人员在进行数据库维护时,通过执行rm-rf命令,删除了大约300GB的生产环境数据。由于数据备份失败,整个网站宕机了几十个小时。自2017年5月12日起,全球爆发基于Windows网络共享协议的蠕虫恶意代码攻击和传播。在攻击事件中,用户只要打开互联网上网就可以被攻击。短短数小时内,包括英国、俄罗斯、整个欧洲、中国在内的多所高校内网、大型企业内网、政府机构私网遭到攻击,并被勒索高额赎金解密还原文件,造成重要数据严重损坏。严重损失。可见,信息系统的安全是一个不容忽视的问题。无论是个人还是组织,即使是最简单的系统也需要考虑安全防护措施。本服务的熔断机制是一种保护网站的措施。服务断路器的定义“断路器”这个词大家应该都不陌生了。中国股市在2016年1月1日到2016年1月8日之间实施了两次熔断机制,在微服务架构中,服务熔断与股市的熔断机制本质上是一样的,其启动重点是更好地控制风险。服务中断也称为服务隔离或过载保护。在微服务应用中,服务具有一定的依赖关系,形成一定的依赖链。如果一个目标服务调用慢或者超时次数多,就会导致该服务不可用,从而间接导致其他依赖的服务不可用。最严重的可能会阻塞整个依赖链,最终导致业务系统崩溃(也称为雪崩效应)。至此,对服务的调用被熔断,对于后续的请求,不再调用目标服务,而是直接返回,可以快速释放资源。等待目标服务的状况改善,然后恢复其调用。断路器(CircuitBreaker)本身是一种电子硬件产品,是电器的重要组成部分。断路器可用于分配电能,无需频繁启动异步电动机,保护电力线路和电动机等,并能在出现严重过载、短路和欠压故障时自动切断电路,而它的作用就相当于一个熔断器开关,结合过热和欠热继电器等。在微服务架构中,也有所谓的断路器或实现断路器模式的软件组件。将受保护的服务封装在一个可以监控故障的断路器对象中。当故障达到一定阈值时,断路器将跳闸,所有后续调用都不会发送到受保护的服务,并在断路器对象之间返回错误。对于需要更长时间才能解决的失败问题,因为不断重试意义不大,可以使用断路器模式。断路器模式MichaelNygard在他的书Releaselt!中推广了断路器模式。断路器模式用于防止应用程序重复尝试执行可能会失败的操作。允许它继续,而不用等待故障被修复,或者在确定故障仍然存在时浪费CPU周期。断路器模式还使应用程序能够检测故障是否已解决。如果问题似乎已解决,应用程序可以尝试调用此操作。断路器模式的目的不同于重试模式。重试模式使应用程序能够在预期成功的情况下重试操作。断路器模式防止应用程序执行可能会失败的操作。可以使用重试模式和断路器模式组合应用程序。但是,如果断路器指示故障不是暂时的,则重试逻辑应为断路器返回异常并放弃重试尝试。断路器充当可能失败的操作的代理。代理应该监视最近失败的次数并使用此信息来决定是允许操作继续,还是立即返回异常。代理可以实现为状态机,其状态模拟电路断路器的功能。关闭:来自应用程序的请求被路由到操作。代理维护最近失败次数的计数,如果对操作的调用不成功,代理会增加此计数。如果给定时间段内的最近失败次数超过指定阈值,则代理将处于打开状态。此时agent启动一个超时计时器,当计时器超时后,agent进入半开状态。超时计时器的目的是让系统有时间在允许应用程序尝试再次执行操作之前修复导致失败的问题。打开:来自应用程序的请求立即失败,并向应用程序返回异常。Half-OpenHalf-Open允许来自应用程序的有限数量的请求通过并调用操作。如果这些请求成功,则认为先前引起故障的故障已修复,断路器切换到闭合状态(故障计数器复位)。如果任何请求失败,断路器会认为故障仍然存在,因此它会恢复到打开状态并重新启动超时定时器,给系统一些时间从故障中恢复。半开状态有助于防止恢复服务突然被请求淹没。当服务恢复时,它可能能够支持有限数量的请求,直到恢复完成,但在恢复过程中,大量工作可能会导致服务超时或再次失败。图15-1显示了断路器状态的MicrosoftAzure设计图。在此图中,关闭状态使用的故障计数器是基于时间的。它会定期自动重置。这有助于防止断路器在偶尔发生故障时进入断开状态。仅当指定时间间隔内发生指定数量的故障时,才将断路器跳闸至打开状态的故障阈值。半开状态使用的计数器记录调用操作的成功尝试次数。在指定次数的连续操作调用成功后,断路器返回到关闭状态。如果调用失败,断路器会立即进入打开状态,下次进入半打开状态时,成功计数器会被重置。系统恢复可以通过恢复或重新启动故障组件或修复网络连接在外部完成。SpringCloudHystrix可用于处理依赖隔离并实现熔断机制。它的主要类有HystrixCommand和HystrixObservableCommand等。熔断的意思就是在一个软件系统中,不可能100%保证不会出错。为了保证整个系统的可用性和容错性,需要将服务实例部署在云端或分布式系统环境中。因此,我们必须承认服务必然会失败。只有清楚地了解服务系统的本质,才能更好地设计系统,不断提高服务的可用性和容错性。微服务的失败是不可避免的。这些故障可能是瞬间发生的,例如网络连接速度慢、超时、资源过度使用而暂时不可用;如果发生不容易预见的意外事件,他们也可能需要更长的时间来纠正。过错。对于分布式服务的容错,有两种常见的方法。重试机制,对于预期的短期失败问题,可以通过重试模式来解决。断路器模式。断路器模式的好处断路器模式在系统从故障中恢复时提供稳定性,同时对性能的影响最小。通过快速拒绝可能失败的操作请求,而不是等待操作超时或永不返回,您可以帮助维持系统的响应时间。如果断路器每次更改状态时都会生成一个事件,则此信息可用于监视断路器所保护的系统部分的健康状况,或者在断路器跳闸进入打开状态时提醒管理员。断路器模式通常是可定制的,可以根据可能出现的故障类型进行调整。例如,可以自定义定时器的超时时间。您可以先将断路器置于“on”状态几秒钟,如果故障仍未解决,则将超时时间增加到几分钟。断路器模式的功能一般来说,断路器具有以下功能。1.异常处理通过断路器调用操作的应用程序必须能够处理操作不可用时可能抛出的异常。此类异常的处理方法是特定于应用程序的。例如,应用程序可能会暂时降低其功能,调用替代操作来尝试相同的任务或获取相同的数据,或者通知用户出现异常以稍后重试。请求可能因各种原因而失败,其中一些原因可能表明失败的严重程度高于其他原因。例如,由于远程服务崩溃需要几分钟才能恢复,或者由于服务暂时过载导致超时,请求可能会失败。断路器可以检查发生的异常类型并根据这些异常类型调整策略。例如,导致切换到打开状态的服务超时异常比导致服务完全不可用的故障要多得多。2.记录断路器应记录所有失败的请求(如果可能,所有请求)以使管理员能够监控它封装的受保护操作的健康状况。3、可恢复性断路器应配置在与保护操作最匹配的恢复模式。例如,如果将断路器设置为打开需要很长时间,即使底层操作故障已解决,它也会返回错误。如果打开状态切换到半打开状态的速度太快,则在底层操作失败之前,它会再次调用受保护的操作。4.测试失败操作在打开状态下,断路器可能不会使用计时器来确定何时切换到半打开状态,而是定期轮询远程服务或资源以确定其是否再次可用。此检查可能采用上次失败的操作形式,也可能使用远程服务提供的旨在测试服务健康状况的特殊操作。5.手动复位在故障操作恢复时间变化较大的系统中,提供手动复位选项,使管理员可以强行合闸断路器,复位故障计数器。同样,如果受保护的操作暂时不可用,管理员可以强制断路器进入打开状态并重新启动超时计时器。6.并发——断路器可以被应用程序的大量并发实例访问。断路器实施不应阻止并发请求或增加每个请求的开销。7.加速跳闸有时故障响应包含足够的信息让断路器实现决定它是否应该立即跳闸并保持跳闸最短时间。例如,来自过载共享资源的错误响应可能指示“不建议立即重试”,那么应用程序应该在几分钟后而不是立即重试。如果请求的服务对于特定的Web服务器不可用,则可以返回HTTP协议定义的“HTTP503服务不可用”响应。响应可能包含额外的信息,例如预期的延迟持续时间。8.重试失败的请求当打开时,断路器不仅可以简单地快速返回失败,还可以记录每个请求的详细信息,并在远程资源或服务再次可用时安排重试。