一、前言
对于不久开源的surging受到不少.net同学的青睐,也受到.net core学习小组的关注,邀请加入.NET China Foundation 以方便国内.net core开源项目的推广,我果断接受邀请加入了队伍进行互相交流学习,最近也更新了surging新的版本
更新内容:
1. Castle.Core 兼容性问题,下一版本会去除,解决部分用户第一次编译VS卡死问题
2. 增加容错降级
3. 路由容错重构,针对于失败重试和失败没有重试,失败回调,
4.增加部分功能单元测试
5. 升级支持.NET CORE 2.0
最新地址:https://github.com/dotnetcore/surging
二、服务容错降级介绍和示例
1.服务容错降级介绍
对于上篇文章所提到的微服务可靠性,对于容错和降级省略没讲,这篇介绍下容错和降级
当微服务不可用时,需要根据预置的策略做容错处理,大部分的容错能力和策略是公共的,因此可以放到框架中实现。
服务容错
当微服务调用失败之后,利用容错机制,可以在底层实现微服务的自动容错处理,提升系统的可靠性。
surging容错策略包括:
失败自动切换机制(Failover):微服务调用失败自动切换策略指的是当发生服务调用异常时,重新选路,查找下一个可用的微 服务提供者。微服务发布的时候,可以指定服务的集群容错策略。消费者可以覆盖服务提供者的通用配置,实现个性化的容错策略。
失败回调机制(Injection):微服务调用失败之后,提供异常回调接口或者注入脚本,执行微服务消费者自定义的失败处理逻辑。
服务降级
服务因为某种原因不可用,但是流程不能直接失败,需要本地Injection服务端实现,比如年底购票12306大规模的访问,导致查询火车票服务不能正常工作,这时候要做业务放通,返回上次的缓存记录或者NULL,而不是返回失败。
降级的常用策略:
1、服务路由短路,直接返回空。例如Injection = “ return null;”。
3、服务路由短路,直接执行本地模拟接口实现类。Injection = “ true;”。
容错降级
当服务不可用时,可以服务做业务逻辑放通,让服务正常运行
自动容错降级:是根据定义的阈值自动匹配触发,调用相关的策略进行降级。
强制降级:由运维根据系统运行情况手工操作触发的。
2.服务容错降级示例
创建服务容错降级,选择Injection策略脚本注入,直接返回null
[Command(Strategy= StrategyType.Injection ,Injection = @"return null;")]
创建服务容错降级,选择Injection策略脚本注入,直接返回Task<UserModel>
[Command(Strategy= StrategyType.Injection ,Injection = @"return
Task.FromResult(new Surging.IModuleServices.Common.Models.UserModel
{
Name=""fanly"",
Age=18
});",InjectionNamespaces =new string[] { "Surging.IModuleServices.Common"})]
创建服务容错降级,选择Injection策略直接本地模块调用
[Command(Strategy= StrategyType.Injection ,Injection = @"return true;")]
创建服务容错降级,选择Failover策略,自动切换重试远程调用
[Command(Strategy= StrategyType.Failover )]
配置相关参数列表
参数
|
作用
|
备注
|
---|---|---|
Strategy | 容错策略 | 包括Failover和Injection |
FailoverCluster | 故障转移次数 | 默认值:3 |
ExecutionTimeoutInMilliseconds | 执行超时时间 | 默认值:1000 |
RequestCacheEnabled | 是否开启缓存 | 默认关闭 |
Injection | 脚本注入 | |
InjectionNamespaces | 注入命名空间 | 称为程序集名称更恰当 |
BreakeErrorThresholdPercentage | 错误率达到多少开启熔断保护 | 默认值:50 |
BreakeSleepWindowInMilliseconds | 熔断多少秒后去尝试请求 | 默认值:60000 |
BreakerForceClosed | 是否强制关闭熔断 | |
BreakerRequestVolumeThreshold | 10秒钟内至少多少请求失败,熔断器才发挥起作用 | 默认值:20 |
MaxConcurrentRequests | 最大并发数 | 10 |
三.测试
测试环境
CPU:Intel Core i7-4710MQ
内存:16G
硬盘:1T SSD+512G HDD
网络:局域网
三、总结
surging下一版本增加缓存降级、针对文件进行配置服务容错,降级等内容,添加单元测试,对于API网关正在着手研究,下个月应该会集成ocelot,如感兴趣请多关注或者加入QQ群:542283494