分布式架构设计之微服务流控、熔断、降级

微服务架构在之前的一篇文章《高并发系统如何设计》中介绍过,是对复杂系统按分而治之的思路,将单体架构拆分成多个微服务,方便服务治理和提升开发运维效率。但无疑也引入了复杂性,需要特别关注。今天介绍微服务治理相关的内容:微服务流控、熔断和降级方案。

微服务架构在处理用户请求时,需要依赖多个外部服务,通过RPC调用完成处理,如下图所示

当某些原因,下游服务响应变慢或不可用时,上游服务因等待下游返回而短时间堆积大量线程,直到到达超时时间才释放,流量到达一定数量后,上游服务器内存被占满,导致服务不可用,而且故障会继续向上传导,服务雪崩就出现了。如下图演示的过程。

这种情况下,通常有两种策略:服务熔断、服务降级。

服务熔断:当下游响应变慢或不可用时,上游感知到后主动不去调用下游服务,返回业务预设的数据,从而保证自身的服务稳定,等待下游服务恢复后重新调用。

熔断状态图:初始Closed状态,错误达到阈值进入Open状态,到达reset timeout后进入Half Open状态,尝试处理部分流量,如果正常,进入Closed状态,如果还是异常,进入Open状态,继续熔断。

服务降级:因bug或服务资源不足,导致服务响应变慢,而主动放弃资源占用大的计算或对下游的调用,来增加响应速度和处理能力,服务熔断是服务降级的一种策略。

那么如何解决服务雪崩的问题呢?这里介绍阿里开源的Sentinel。

Sentinel:随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。

Sentinel 具有以下特征:丰富的应用场景、完备的实时监控、广泛的开源生态、完善的 SPI 扩展机制。

Sentinel 是阿里巴巴根据多年大型商业系统的运维实践开发,支持双十一大促、秒杀。可以定义灵活的限流、熔断策略,并可通过控制台远程动态控制。现在已经开源供大家学习使用。

使用方式:

1.引入pom 依赖


    com.alibaba.csp
    sentinel-core
    1.8.5

2.定义资源,支持嵌入代码和注解两种方式

嵌入代码:

// 1.5.0 版本开始可以利用 try-with-resources 特性
// 资源名可使用任意有业务语义的字符串,比如方法名、接口名或其它可唯一标识的字符串。
try (Entry entry = SphU.entry("resourceName")) {
  // 被保护的业务逻辑
  // do something here...
} catch (BlockException ex) {
  // 资源访问阻止,被限流或被降级
  // 在此处进行相应的处理操作
}

注解:

@SentinelResource(blockHandler = "blockHandlerForGetUser")
public User getUserById(String id) {
    throw new RuntimeException("getUserById command failed");
}

// blockHandler 函数,原方法调用被限流/降级/系统保护的时候调用
public User blockHandlerForGetUser(String id, BlockException ex) {
    return new User("admin");
}

3.定义规则,通过规则来指定允许该资源通过的请求次数,例如下面的代码定义了资源 resourceName每秒最多只能通过 20 个请求。

private static void initFlowRules(){
    List rules = new ArrayList<>();
    FlowRule rule = new FlowRule();
    rule.setResource("resourceName");
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    // Set limit QPS to 20.
    rule.setCount(20);
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
}

完成!

最后,跟大家推荐阿里云团队主导编写的《微服务治理技术白皮书》,对于深入了解和学习微服务治理很有帮助,有需要pdf版本的,请下方留言。

展开阅读全文

页面更新:2024-04-06

标签:架构   阿里   注解   分布式   下游   流量   定义   状态   策略   系统   资源

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top