Polly是.NET弹性和瞬时断层处理文库。它允许开发人员以平滑而线程的方式表达其策略,例如故障测试,服务熔化,加班处理,机柜隔离,缓存策略和失败降级。
在分布式系统中,为了确保服务的高性能和高可用性,我们需要进行流量控制,例如负载平衡,服务路由,保险丝,降级,当前限制和流量相关的调度。
悬挂着自己服务上游的某些上游服务被悬挂。当出现大量请求时,所有连接超时,插座连接就无法及时发布,从而导致内存溢出和OOM。
采用两个真实场景:
背景:目前,我们依靠标准的Restful样式API。通过HTTP请求,我们封装了一组瞬时处理策略组件。我将RESTSHARP用于HTTP的请求库。
在HTTP请求中,例如网络的瞬时故障或另一方的服务由于版本的启动而无法在某个时刻建立,另一种情况是因为呼叫频率触发了对象的有限频率服务,我们需要睡眠(1s 1s(1s),这种小概率方案可以通过重试提高服务请求的可用性。对于标准的Restful API,我们将使用HTTPSTATUS的状态代码来确定远程策略。
当某个上游没有停机时间或不可用时,为了避免我们自己的业务服务,我们可以使用保险丝策略。例如,代码:
当前的融合策略是,在30年代内,请求大于50倍,而故障请求超过80%,这将触发融合机制。
在服务请求触发保险丝策略之后,为了确保服务的可用性,我们通常会减少处理,例如读取零以读取缓存数据,或直接提示服务异常以及时返回异常信息。
我们可以轻松地通过城堡或AUTOFAC实现动态代理。切割表面形式的控制级别的逻辑不会影响标准业务。策略组合的顺序非常重要,这是最外层的触发器。
应当指出的是,如果该服务触发和降级,我们需要注意降级策略的回报值和重试的前线条件。如果Rendexed返回响应。httpStatusCode== 500,它将继续触发重试的逻辑。结果,熔融恢复周期可能会更长。
作者:Moonus