Sentinel详细介绍

1. 核心功能
  • 流量控制:通过QPS/线程数控制接口访问量
  • 熔断降级:基于响应时间/异常比例/异常数进行服务熔断
  • 系统保护:根据系统负载(CPU/平均RT/线程数)触发保护机制
  • 实时监控:秒级数据统计展示
2. 使用流程
// 定义资源
@SentinelResource(value = "orderQuery", blockHandler = "handleBlock")
public List<Order> queryOrders() {
    // 业务逻辑
}

// 配置规则
private static void initFlowRules() {
    List<FlowRule> rules = new ArrayList<>();
    FlowRule rule = new FlowRule("orderQuery");
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule.setCount(10); // 每秒10次
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
}
3. 控制台部署
  • 实时监控仪表盘
  • 动态规则配置
  • 机器健康状态检测

高频面试题与解析

Q1: Sentinel与Hystrix的主要区别?

答:

  1. 设计理念差异
    • Hystrix:线程池隔离+熔断
    • Sentinel:流量控制+熔断降级+系统保护
  2. 实时监控能力
    • Sentinel提供秒级监控数据
  3. 规则配置方式
    • Sentinel支持动态规则更新
  4. 扩展性
    • Sentinel提供Filter/Processor扩展点
Q2: 熔断策略的三种模式?

答:

  1. 慢调用比例:
    • 条件:响应时间 > 阈值 且 比例 > 设定值
    • 公式:slow_counttotal≥ratio \frac{slow\_count}{total} \geq ratio totalslow_count​≥ratio
  2. 异常比例:
    • 触发条件:异常比例超过阈值
  3. 异常数:
    • 适用于低吞吐场景
Q3: 热点参数限流实现原理?

答:

  1. 参数索引标记
    @SentinelResource(value = "hotResource", blockHandler = "handleHotBlock")
    public String getDetail(@RequestParam("id") String productId) 
    
  2. 配置参数例外项
    {
      "paramIdx": 0,
      "paramValue": "P123",
      "threshold": 50
    }
    
  3. 采用令牌桶算法进行细粒度控制
Q4: 规则持久化方案?

答:

  1. 文件持久化
    • 使用FileRefreshableDataSource
  2. Nacos配置中心
    • 监听Nacos配置变更
  3. ZooKeeper存储
    • 利用节点监听机制
  4. Apollo集成
    • 通过配置监听实现
Q5: 滑动窗口算法实现?

答:

  1. 时间窗口划分
    • 将1秒划分为2个500ms窗口
  2. 数据统计结构
    class Window {
        long startTime;
        AtomicLong pass = new AtomicLong();
        AtomicLong block = new AtomicLong();
    }
    
  3. 窗口滚动机制
    • 当前时间戳:current=System.currentTimeMillis() current = System.currentTimeMillis() current=System.currentTimeMillis()
    • 窗口索引:index=(current/500)%2 index = (current / 500) \% 2 index=(current/500)%2
  4. 统计合并策略
    • 仅保留有效时间范围内的窗口数据

最佳实践建议

  1. 生产环境配置:
    • 启用CLUSTER集群流量控制模式
    • 配置合理的fallback降级策略
  2. 监控整合:
    • 对接Prometheus监控体系
    • 集成Grafana可视化面板
  3. 压测策略:
    • 使用JMeter进行规则验证
    • 监控规则触发时的系统指标变化

更多推荐