Solon Cloud —— 熔断与限流

说明

限流

限流是控制系统的的并发流量,通过限制请求流量的手段防止过度的流量导致系统崩溃。限流的指标有TPS, HPS、QPS等,限流的方法有流量计数器,滑动时间窗口,漏桶算法,令牌桶算法等。

熔断

熔断的概念来自电路保护,提供了断路开关,主要有三种状态,关闭状态,打开状态和半开状态。熔断可以防止应用程序不断地尝试可能超时和失败的服务,能达到应用程序执行而不必等待下游服务修正错误服务。

降级

降级是指当自身服务压力增大时,采取一些手段,增强自身服务的处理能力,以保障服务的持续可用。比如,下线非核心服务以保证核心服务的稳定、降低实时性、降低数据一致性等。

三者关系

限流、熔断和服务降级是系统容错的重要设计模式,从一定意义上讲限流和熔断也是一种服务降级的手段。

措施产生原因针对服务
熔断下游服务不可用下游服务
降级自身服务的处理能力不够自身服务
限流上游服务请求增多上游服务

Sentinel

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

之前使用的是Spring Cloud 默认带的是 Hystrix,之前也没有用过Sentinel,这次按理是尝试使用Setinel。

依赖

dependencies {
    implementation platform(project(":demo-parent"))

    implementation("org.noear:solon-web")
    implementation("org.noear:solon-logging-logback")
    implementation("org.noear:solon-openapi2-knife4j")
    implementation("org.noear:sentinel-solon-cloud-plugin")
    implementation("com.alibaba.csp:sentinel-transport-simple-http:1.8.8")

    annotationProcessor("org.mapstruct:mapstruct-processor:${mapstructVersion}")

    testImplementation("org.noear:solon-test-junit5")
}

配置

solon.cloud.local:
  breaker:
    root: 1000
    hello: 10

Controller

package com.example.demo.solon.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.noear.solon.annotation.Controller;
import org.noear.solon.annotation.Mapping;
import org.noear.solon.annotation.Param;
import org.noear.solon.cloud.annotation.CloudBreaker;

/**
 * @author airhead
 */
@Api("Demo")
@Controller
@Mapping
public class DemoController {
  @ApiOperation("hello")
  @Mapping("/hello")
  @CloudBreaker("hello")
  public String hello(@Param(defaultValue = "world") String name) {
    return String.format("Hello %s!", name);
  }
}

验证

需要通过多线程的方式来测试,写个单元测试。

package com.example.demo.solon.controller;

import static org.junit.jupiter.api.Assertions.*;

import com.example.demo.solon.DemoCloudBreakerApp;
import java.util.concurrent.CountDownLatch;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.noear.solon.Utils;
import org.noear.solon.test.HttpTester;
import org.noear.solon.test.SolonTest;

@Slf4j
@SolonTest(DemoCloudBreakerApp.class)
public class DemoControllerTest extends HttpTester {
  @Test
  public void test() throws Exception {
    CountDownLatch count = new CountDownLatch(100);
    for (int i = 0; i < 100; i++) {
      log.info("get hello start. i:{}", i);
      int finalI = i;
      Utils.async(
          () -> {
            try {
              path("/hello").get();
            } catch (Exception e) {
              log.error("", e);
            }

            log.info("get hello end. i:{}", finalI);
            count.countDown();
          });
    }

    count.await();
  }
}

当超过限流时,提示错误。

在这里插入图片描述

问题

  1. 当前使用的版本3.0.9及 3.1.0-M3版本暂时不能把 CloudBreaker 注解在类上。
  2. 当前版本无法注册到 sentinel 的 dashboard 中,属于本地配置。
  3. 当前支持限流,没有熔断的支持。

小结

从测试使用的情况来看,Solon 目前只支持本地的限流处理,暂时不支持熔断,对 sentinel 的支持还不够完善,无法注册到 sentinel 的 dashboard 中。如果需要用于生产,需要自己扩展下对应的插件,或者再等一等官方的更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值