面试题答案
一键面试策略设计思路
- 服务重要性分级:将服务按照对业务的关键程度分为核心服务与非核心服务。核心服务如用户登录、支付等,非核心服务如个性化推荐等。对于核心服务,熔断阈值设置相对较高,以保障业务基本流程;非核心服务阈值可适当降低,在资源紧张时先熔断非核心服务。
- 资源利用率考量:结合CPU、内存、线程数等资源指标。当资源利用率过高,如CPU使用率超过80%,可适当降低熔断阈值,更容易触发熔断,保护整体系统资源。例如,某服务线程池使用率长期维持在90%以上,可降低其熔断阈值。
- 动态调整:根据流量变化实时调整熔断降级策略。使用Sentinel的动态规则配置,在流量高峰时,收紧熔断策略;流量低谷时,放宽策略,提高系统整体吞吐量。
实现步骤
- 引入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>
- 配置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));
- 动态规则配置:使用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());
效果评估
- 业务指标:
- 核心业务成功率:统计核心服务在高流量冲击下成功处理的请求比例,若核心业务成功率能维持在95%以上,说明策略有效保障了核心业务。
- 业务响应时间:观察核心服务与非核心服务的平均响应时间,若核心服务平均响应时间未大幅增长,且非核心服务在熔断后未对核心服务造成明显影响,策略合理。
- 系统指标:
- 资源利用率:监控CPU、内存、线程池使用率等资源指标,在高流量冲击下,资源利用率应保持在合理范围,如CPU使用率不超过90%,说明策略有效控制了资源消耗。
- 熔断触发次数:分析不同服务的熔断触发次数,若非核心服务熔断次数多于核心服务,且在流量高峰低谷时,熔断次数随策略动态调整,表明策略符合设计预期。