一、熔断与降级
服务熔断:类似于保险丝,当服务出现不可用或响应超时,防止整个系统出现大面积奔溃,暂时停止对该服务的调用
服务降级:从整个系统的负荷情况出发考虑,出现负荷过载,响应慢的情况,在其内部暂时舍弃一些非核心的接口和数据请求,返回一个提前准备好的fallback错误处理信息,虽然提供了一个有损的服务单保证了整个系统的稳定性和可用性
熔断与降级比较:
相同点:目标一致,都是从可用性和可靠性出发的,防止系统奔溃,让用户体验到的是某些功能暂时不可用
不同点:触发原因不同,服务熔断由某个服务故障引起,而服务降级一般是从整体负荷考虑
Polly概述:.net 弹性和瞬态故障处理,允许开发人员以流畅和线程安全的方式表达策略,如重试、断路器、超时、隔离和回退策略,它的处理策略具有多样性和灵活性,它的各种策略可以灵活的定义和组合
Polly的应用创建:通过策略处理错误,执行委托引发特定异常或返回结果,当发生请求异常或网络错误时,就重试三次,
获取异常:
satic void Main(string[] args){
Policy.Handle<ArgumentException>()//故障
.Fallback( ()=>{
Console.WriteLine("程序执行出错");
},
ex=>{
Console.WriteLine("错误信息:"+ex);
}
).Execute(()=>{
Console.WriteLine("开始任务");
throw new ArgumentException("Hello world!");
});
}
Execute返回值,只要使用Policy<T>类就可以获取返回值
static void Main(string[] args){
Policy<string>policy=Policy<string>
.Handle<Exception>()//故障
.Fallback(()=>{
Console.WriteLine("执行出错");
return "降级的值";
});
string value=policy.Execute(()=>{
Console.WriteLine("开始任务");
Console.WriteLine("完成任务")
return "正常的值";
});
Console.WriteLine("返回值:"+value);
}
FallBack的重载方法最多,有的异常可以直接提供降级的后值,在异常中可以通过Lambda表达式对异常进行判断,既满足特定条件的异常,程序才会处理,又可以处理多个异常或处理不同类型的异常。还可以处理多个异常或处理不同类型的异常,还可以使用HandleResult的返回值进行故障判断
Polly策略应用
七种恢复策略:重试策略;断路器;超时;隔板隔离;缓存;回退;重试策略
Policy计数的范围是Policy对象的作用域,如果需要对整个服务器的所有代码做短路保护,需要共用一个Policy对象
策略包装:目的在于可以同时执行多个策略
二、面向切面编程
AOP:面向切面编程,动态的将代码切入到类的指定方法,指定位置上的编程思想,遵循.net core的模型开发理念,可以更容易构建低耦合,易扩展的web应用