一、前言

对于不久开源的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的服务容错降级相关推荐

  1. 基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级

    1.前言 surging受到不少.net同学的青睐,也提了不少问题,提的最多的是什么时候集成API 网关,在这里回答大家最近已经开始着手研发,应该在1,2个月内会有个初版API网关,其它像Token身 ...

  2. 基于.NET CORE微服务框架 -谈谈surging API网关

    1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中谈谈surging Api 网关 开源地址:https://gith ...

  3. 基于.NET CORE微服务框架 -浅析如何使用surging

    1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人 ...

  4. 基于DotNet Core的RPC框架(一) DotBPE.RPC快速开始

    0x00 简介 DotBPE.RPC是一款基于dotnet core编写的RPC框架,而它的爸爸DotBPE,目标是实现一个开箱即用的微服务框架,但是它还差点意思,还仅仅在构思和尝试的阶段.但不管怎么 ...

  5. 基于京东micro-app微前端框架的项目实践

    1.微前端应用介绍 1.1.微前端概念 微前端的概念是由ThoughtWorks在2016年提出的,它借鉴了微服务的架构理念,核心在于将一个庞大的前端应用拆分成多个独立灵活的小型应用,每个应用都可以独 ...

  6. 基于 iframe 的微前端框架 —— 擎天

    vivo 互联网前端团队- Jiang Zuohan 一.背景 VAPD是一款专为团队协作办公场景设计的项目管理工具,实践敏捷开发与持续交付,以「项目」为核心,融合需求.任务.缺陷等应用,使用敏捷迭代 ...

  7. 基于.net的微服务架构下的开发测试环境运维实践

    眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...

  8. python的flask微服务-flask微服务框架的初步接触

    测试2个关联的系统接口时,经常会遇到被测试系统或被测app的处理内部处理流程会依赖另一个系统的接口返回结果,这时, 常用的做法就是写一个模拟测试桩,用作返回请求时的结果.java可以用servicel ...

  9. NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成...

    原文:NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成 本篇内容属于非实用性(拿来即用)介绍,如对框架设计没兴趣的朋友,请略过. 快一个月没有写博 ...

最新文章

  1. chineseocr
  2. java 线程池学习小记
  3. 无锡朗贤获B+轮融资,辰韬资本、兴韬投资领投
  4. AdapterView及其子类之四:基于ListView及SimpleAdapter实现列表
  5. 厉害的壁纸,亲测有效
  6. 到你是你玩互联网还是互联网玩了你
  7. Scala与Java差异(二)之条件控制与循环
  8. Bootstrap 导航条
  9. c语言火车票管理系统360问答,C语言 车票管理系统 前面一点点的程序,不知道报错是什么意思,可以解释一下吗?代码的具体问题是什么...
  10. 设计模式的C++实现 2.工厂模式
  11. 切向量,普通矢量,渐变
  12. 微信小程序-微信支付
  13. 宁波中小学生计算机技术展示,宁波市第25届中小学生计算机程序设计竞赛复赛试题(小学组).doc...
  14. 360与腾讯弹窗大战 数亿网民被迫围观
  15. 高通 linux usb 休眠,系统休眠(System Suspend)和设备中断处理
  16. layui日期插件样式冲突
  17. 系统弱口令检测与网络端口扫描
  18. 力扣(LeetCode)——编译、提交和注释快捷键
  19. 基于 SSR 的预渲染首屏直出方案
  20. OpenCV实现目标跟踪

热门文章

  1. npm执行命令后无任何响应(windows下)
  2. leetcode 104. Maximum Depth of Binary Tree
  3. MATLAB中求矩阵非零元的坐标
  4. 关于高级导数的一个不等式估计
  5. 加速你的Hibernate引擎(上)
  6. 放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。
  7. nagios监控mysql主机,nginx,cpu,网卡流量
  8. 空谈Saas都扯淡,让你看看真正的云计算
  9. 微软发文庆祝 .NET 诞生 20 周年纪念日!
  10. 轻松实现深度Clone | Source Generators方式