众所周知,微服务架构具有许多优点。包含松散耦合,自治服务,分散治理,更容易连续交付等。但与此同时,它使架构变得脆弱,因为每个用户的操作结果都会调用多个服务。它通过网络上的远程调用替换了单体系结构中的内存调用。但是当一个或多个服务不可用或表现出高延迟时,会导致整个系统出现级联故障。服务客户端的重试逻辑只会使情况更糟糕,并且可能导致系统彻底的崩溃。
断路器模式有助于防止跨多个系统的这种灾难性级联故障。断路器模式允许您构建容错和弹性的系统,当关键服务不可用或具有高延迟时,系统仍然可以正常运行。
现实情况是所有服务都会在某个时间点失败或不稳定。断路器允许您的系统优雅地处理这些故障。断路器概念很简单。它用跟踪故障的监视器包装了一个函数。断路器有3种不同的状态:关闭,打开和半打开:
关闭 - 当一切正常时,断路器保持闭合状态,所有调用都能访问到服务。当故障数超过预定阈值时,断路器跳闸,并进入打开状态。
打开 - 断路器在不执行该服务的情况下为调用返回错误。
半开 - 超时后,断路器切换到半开状态,以测试问题是否仍然存在。如果在这种半开状态下单个调用失败,则断路器再次打开。如果成功,则断路器重置回正常关闭状态。
断路器的实现采用状态机模式
以下是每个断路器状态的说明和流程图。
关闭状态下的断路器
当断路器处于CLOSED状态时,所有呼叫都将进入供应商微服务,后者无任何延迟地响应。
打开状态下的断路器
如果供应商微服务响应缓慢,则断路器会收到对该服务的任何请求的超时。一旦超时次数达到预定阈值,它就会使断路器跳闸到打开状态。在OPEN状态下,断路器为所有对服务的调用返回错误,而不调用Supplier Microservice。此行为允许供应商微服务通过减少其负载来恢复。
半开状态下的断路器
断路器使用称为HALF-OPEN状态的监视和反馈机制来了解供应商微服务是否以及何时恢复。它使用这种机制定期对供应商微服务进行试用,以检查它是否已经恢复。如果对供应商微服务的调用超时,则断路器保持在OPEN状态。如果调用返回成功,则电路切换到CLOSED状态。
断路器对服务监控很有价值。监视,记录和恢复任何断路器的状态变化,以确保服务可用性。 通过断路器状态变化可帮助您为容错系统添加逻辑。例如,如果产品目录服务不可用(断路已打开),则UI可以从缓存中获取产品列表。 断路器模式可以优雅地处理关键服务的停机时间和速度,并通过减少负载来帮助这些服务恢复。
作者:RaiseHead
链接:https://www.jianshu.com/p/0593fb8ca1e1
共同学习,写下你的评论
评论加载中...
作者其他优质文章