基于.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策略直接本地模块调用
1
|
[Command(Strategy= StrategyType.Injection ,Injection = @"return true;" )]
|
创建服务容错降级,选择Failover策略,自动切换重试远程调用
1
|
[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群:615562965
相关文章
谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC
拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc
基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始
基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
原文地址:http://www.cnblogs.com/fanliang11/p/7224210.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
基于.NET CORE微服务框架 -谈谈surging的服务容错降级相关推荐
- 基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级
1.前言 surging受到不少.net同学的青睐,也提了不少问题,提的最多的是什么时候集成API 网关,在这里回答大家最近已经开始着手研发,应该在1,2个月内会有个初版API网关,其它像Token身 ...
- 基于.NET CORE微服务框架 -谈谈surging API网关
1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中谈谈surging Api 网关 开源地址:https://gith ...
- 基于.NET CORE微服务框架 -浅析如何使用surging
1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...
- 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始
0x00 简介 DotBPE.RPC是一款基于dotnet core编写的RPC框架,而它的爸爸DotBPE,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...
- 基于京东micro-app微前端框架的项目实践
1.微前端应用介绍 1.1.微前端概念 微前端的概念是由ThoughtWorks在2016年提出的,它借鉴了微服务的架构理念,核心在于将一个庞大的前端应用拆分成多个独立灵活的小型应用,每个应用都可以独 ...
- 基于 iframe 的微前端框架 —— 擎天
vivo 互联网前端团队- Jiang Zuohan 一.背景 VAPD是一款专为团队协作办公场景设计的项目管理工具,实践敏捷开发与持续交付,以「项目」为核心,融合需求.任务.缺陷等应用,使用敏捷迭代 ...
- 基于.net的微服务架构下的开发测试环境运维实践
眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...
- python的flask微服务-flask微服务框架的初步接触
测试2个关联的系统接口时,经常会遇到被测试系统或被测app的处理内部处理流程会依赖另一个系统的接口返回结果,这时, 常用的做法就是写一个模拟测试桩,用作返回请求时的结果.java可以用servicel ...
- NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成...
原文:NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成 本篇内容属于非实用性(拿来即用)介绍,如对框架设计没兴趣的朋友,请略过. 快一个月没有写博 ...
最新文章
- chineseocr
- java 线程池学习小记
- 无锡朗贤获B+轮融资,辰韬资本、兴韬投资领投
- AdapterView及其子类之四:基于ListView及SimpleAdapter实现列表
- 厉害的壁纸,亲测有效
- 到你是你玩互联网还是互联网玩了你
- Scala与Java差异(二)之条件控制与循环
- Bootstrap 导航条
- c语言火车票管理系统360问答,C语言 车票管理系统 前面一点点的程序,不知道报错是什么意思,可以解释一下吗?代码的具体问题是什么...
- 设计模式的C++实现 2.工厂模式
- 切向量,普通矢量,渐变
- 微信小程序-微信支付
- 宁波中小学生计算机技术展示,宁波市第25届中小学生计算机程序设计竞赛复赛试题(小学组).doc...
- 360与腾讯弹窗大战 数亿网民被迫围观
- 高通 linux usb 休眠,系统休眠(System Suspend)和设备中断处理
- layui日期插件样式冲突
- 系统弱口令检测与网络端口扫描
- 力扣(LeetCode)——编译、提交和注释快捷键
- 基于 SSR 的预渲染首屏直出方案
- OpenCV实现目标跟踪
热门文章
- npm执行命令后无任何响应(windows下)
- leetcode 104. Maximum Depth of Binary Tree
- MATLAB中求矩阵非零元的坐标
- 关于高级导数的一个不等式估计
- 加速你的Hibernate引擎(上)
- 放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。
- nagios监控mysql主机,nginx,cpu,网卡流量
- 空谈Saas都扯淡,让你看看真正的云计算
- 微软发文庆祝 .NET 诞生 20 周年纪念日!
- 轻松实现深度Clone | Source Generators方式