zoukankan      html  css  js  c++  java
  • 服务容错降级

    服务容错降级

    一、前言

    对于不久开源的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

    1
    [Command(Strategy= StrategyType.Injection ,Injection = @"return null;")]

    创建服务容错降级,选择Injection策略脚本注入,直接返回Task<UserModel>

    1
    2
    3
    4
    5
    6
    [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

  • 相关阅读:
    IDEA导入springboot项目报错:non-managed pom.xml file found
    Keepalived高可用集群(还没细看)
    Keepalived服务
    *** WARNING
    POJ 2185 Milking Grid (搬运KMP)
    POJ 1961 Period (弱鸡三战KMP)
    POJ 2752 Seek the Name, Seek the Fame (KMP next数组再次应用)
    POJ 2406 Power Strings(KMPnext数组的应用)
    杂模板
    URAL
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/7261477.html
Copyright © 2011-2022 走看看