当前位置: 首页 > news >正文

基于.NET CORE微服务框架 -谈谈surging的服务容错降级

一、前言

对于不久开源的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网关正在着手研究,如感兴趣请多关注或者加入QQ群:542283494

 

转载于:https://www.cnblogs.com/fanliang11/p/7224210.html

相关文章:

  • Vue框架 周期
  • 转 JavaScript 检查(Linting)工具的比较
  • 前端知识学习——html
  • oracle中length、lengthb、substr、substrb用法小结
  • SAS笔记(5) FLAG和计数器
  • 用于检测移动设备(包括平板电脑)的轻量级PHP类
  • 170511、Spring IOC和AOP 原理彻底搞懂
  • CodeChef Forest Gathering —— 二分
  • ReactiveSwift源码解析(九) SignalProducerProtocol延展中的Start、Lift系列方法的代码实现...
  • 在List中删除符合条件的内容
  • 亿级SQL Server运维的最佳实践PPT分享
  • socket简单理解
  • JAVA最佳实践
  • 关于Hibernate中get和load的区别
  • bootstrap-table 怎么自定义搜索按钮实现点击按钮进行查询
  • [ JavaScript ] 数据结构与算法 —— 链表
  • android 一些 utils
  • CSS 专业技巧
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript异步流程控制的前世今生
  • Java小白进阶笔记(3)-初级面向对象
  • markdown编辑器简评
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • zookeeper系列(七)实战分布式命名服务
  • 力扣(LeetCode)56
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 移动端解决方案学习记录
  • No resource identifier found for attribute,RxJava之zip操作符
  • PostgreSQL之连接数修改
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • (备忘)Java Map 遍历
  • (第一天)包装对象、作用域、创建对象
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (三)c52学习之旅-点亮LED灯
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)setTimeout 和 setInterval 的区别
  • (转)Sql Server 保留几位小数的两种做法
  • (转)负载均衡,回话保持,cookie
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Micro Framework初体验(二)
  • .net 后台导出excel ,word
  • .Net8 Blazor 尝鲜
  • .Net程序帮助文档制作
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [Android]使用Git将项目提交到GitHub
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [C++] Windows中字符串函数的种类
  • [hdu4622 Reincarnation]后缀数组
  • [HNOI2018]排列