zoukankan      html  css  js  c++  java
  • 009 微服务容错机制

    一 概述

    在微服务的调用过程之中,可能会出现下面的问题:

    [1]当一个微服务调用另外一个微服务的时候,如果被调用的微服务出现问题,就会导致调用者出现问题,如果调用的关系是级联的,就会出现级联错误,发生服务雪崩.

    [2]微服务如果出现共享线程池的情况,一个微服务出现问题,就会影响在此线程池之中的另外线程.

    解决方法:

    在整个微服务架构之中,通常存在下面的三种解决方式

    [1]超时机制:如果一个方法调用出现延迟的情况,立马发生超时错误,放置微服务的调用堆积,造成系统资源耗尽.

    [2]线程隔离:不同的微服务之间使用不同的线程池,防止一个线程池的原因,导致多个微服务出现资源的问题.

    [3]熔断器模式:本质上说,熔断器是一个快速失败的机制,当出现调用问题的时候,立马结束调用,这里面可以使用超时机制进行规避.

       当多次错误发生的时候,就认为这个服务不可用,进行快速失败.熔断器会一个检测的功能,当发现微服务可用,就打开熔断器,进行正常的微服务的调用.

    在springcloud之中,使用hystrix组件帮助我们实现微服务的容错机制.

    从本质上,熔断器就是一个使用快速失败解决资源分配的问题.

    二 .Hystrix提供的功能

    [1]failback机制:一旦发生微服务的调用失败,直接进行fallback机制.默认情况下,histrix使用异常机制实现,当然我们也可以使用fallback方法进行容错返回.

    [2]超时机制:一旦方法调用出现超时,立马认为微服务失败,直接进入fallback机制.

    [3]线程隔离:不同的方法调用进入到不同的线程之中,这样彼此的微服务相互的影响降到最低.

    [4]熔断器:一旦微服务多次失败,直接进入到fallback机制,不再做无谓的尝试.同时Hystrix提供半开模式,允许进行一些微服务的调用的尝试,当成功的几率符合设置,熔断器就关闭,进行正常的方法调用.

  • 相关阅读:
    hdu 1251(字典树)
    hdu 1556(树状数组)
    hdu 3275(线段树的延迟标记,我被坑了)
    TCL之容器
    Codeforces Round #587 (Div. 3) D. Swords
    struts2中多个文件同时上传
    ffmpeg的使用
    struts2中类型转换器
    struts中访问servlet API的方法
    struts2中多个逻辑action(方法)的动态调用
  • 原文地址:https://www.cnblogs.com/trekxu/p/10470236.html
Copyright © 2011-2022 走看看