MST

星途 面试题库

面试题:微服务架构Sentinel面对突发流量的自适应熔断降级策略设计

假设在微服务架构下,业务面临突发的高流量冲击,设计一套基于Sentinel的自适应熔断降级策略,要求考虑不同服务的重要性、资源利用率等因素,详细说明策略的设计思路、实现步骤以及如何进行效果评估。
37.1万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

策略设计思路

  1. 服务重要性分级:将服务按照对业务的关键程度分为核心服务与非核心服务。核心服务如用户登录、支付等,非核心服务如个性化推荐等。对于核心服务,熔断阈值设置相对较高,以保障业务基本流程;非核心服务阈值可适当降低,在资源紧张时先熔断非核心服务。
  2. 资源利用率考量:结合CPU、内存、线程数等资源指标。当资源利用率过高,如CPU使用率超过80%,可适当降低熔断阈值,更容易触发熔断,保护整体系统资源。例如,某服务线程池使用率长期维持在90%以上,可降低其熔断阈值。
  3. 动态调整:根据流量变化实时调整熔断降级策略。使用Sentinel的动态规则配置,在流量高峰时,收紧熔断策略;流量低谷时,放宽策略,提高系统整体吞吐量。

实现步骤

  1. 引入Sentinel依赖:在微服务项目的pom.xml(若使用Maven)中添加Sentinel相关依赖:
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>[版本号]</version>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <version>[版本号]</version>
</dependency>
  1. 配置Sentinel规则
    • 流量控制规则:定义不同服务的QPS阈值,如核心服务QPS阈值设为1000,非核心服务设为500。
    FlowRule flowRule = new FlowRule();
    flowRule.setResource("核心服务资源名");
    flowRule.setCount(1000);
    flowRule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    FlowRuleManager.loadRules(Collections.singletonList(flowRule));
    
    • 熔断降级规则:根据服务重要性和资源利用率设置熔断策略,如核心服务慢调用比例超过50%,且慢调用RT超过200ms,持续10个请求,触发熔断5秒;非核心服务慢调用比例超过30%,RT超过100ms,持续5个请求,触发熔断3秒。
    DegradeRule degradeRule = new DegradeRule();
    degradeRule.setResource("核心服务资源名");
    degradeRule.setGrade(RuleConstant.DEGRADE_GRADE_SLOW_REQUEST_RATIO);
    degradeRule.setCount(0.5);
    degradeRule.setTimeWindow(5);
    degradeRule.setMinRequestAmount(10);
    degradeRule.setStatIntervalMs(1000);
    degradeRule.setSlowRatioThreshold(200);
    DegradeRuleManager.loadRules(Collections.singletonList(degradeRule));
    
  2. 动态规则配置:使用Nacos作为配置中心,将Sentinel规则存储在Nacos中,实现动态调整。在Nacos控制台创建配置文件,格式为JSON,如下:
[
    {
        "resource": "核心服务资源名",
        "count": 1000,
        "grade": 1,
        "limitApp": "default",
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    },
    {
        "resource": "核心服务资源名",
        "grade": 2,
        "count": 0.5,
        "timeWindow": 5,
        "minRequestAmount": 10,
        "statIntervalMs": 1000,
        "slowRatioThreshold": 200
    }
]

在微服务中配置Nacos数据源:

DataSource<List<FlowRule>> flowRuleDataSource = new NacosDataSource<>(
    nacosServerAddr, nacosGroupId, dataId,
    source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {}));
FlowRuleManager.register2Property(flowRuleDataSource.getProperty());

效果评估

  1. 业务指标
    • 核心业务成功率:统计核心服务在高流量冲击下成功处理的请求比例,若核心业务成功率能维持在95%以上,说明策略有效保障了核心业务。
    • 业务响应时间:观察核心服务与非核心服务的平均响应时间,若核心服务平均响应时间未大幅增长,且非核心服务在熔断后未对核心服务造成明显影响,策略合理。
  2. 系统指标
    • 资源利用率:监控CPU、内存、线程池使用率等资源指标,在高流量冲击下,资源利用率应保持在合理范围,如CPU使用率不超过90%,说明策略有效控制了资源消耗。
    • 熔断触发次数:分析不同服务的熔断触发次数,若非核心服务熔断次数多于核心服务,且在流量高峰低谷时,熔断次数随策略动态调整,表明策略符合设计预期。