Sentinel dashboard 部署

  1. java -Dserver.port=8082 -Dcsp.sentinel.dashboard.server=localhost:8082 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.4.jar &

Sentinel 持久化

推送模式 说明 优点 缺点
原始模式 API 将规则推送至客户端并直接更新到内存中,扩展写数据源(WritableDataSource 简单,无任何依赖 不保证一致性;规则保存在内存中,重启即消失。严重不建议用于生产环境
Pull 模式 扩展写数据源(WritableDataSource), 客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件 等 简单,无任何依赖;规则持久化 不保证一致性;实时性不保证,拉取过于频繁也可能会有性能问题。
Push 模式 扩展读数据源(ReadableDataSource),规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。生产环境下一般采用 push 模式的数据源。 规则持久化;一致性;快速 引入第三方依赖

DataSource 扩展

  • Pull-based: 动态文件数据源、Consul, Eureka
  • Push-based: ZooKeeper, Redis, Nacos, Apollo, etcd

    1. public class FileDataSourceInit implements InitFunc {
    2. @Override
    3. public void init() throws Exception {
    4. String flowRulePath = "xxx";
    5. ReadableDataSource<String, List<FlowRule>> ds = new FileRefreshableDataSource<>(
    6. flowRulePath, source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {})
    7. );
    8. // 将可读数据源注册至 FlowRuleManager.
    9. FlowRuleManager.register2Property(ds.getProperty());
    10. WritableDataSource<List<FlowRule>> wds = new FileWritableDataSource<>(flowRulePath, this::encodeJson);
    11. // 将可写数据源注册至 transport 模块的 WritableDataSourceRegistry 中.
    12. // 这样收到控制台推送的规则时,Sentinel 会先更新到内存,然后将规则写入到文件中.
    13. WritableDataSourceRegistry.registerFlowDataSource(wds);
    14. }
    15. private <T> String encodeJson(T t) {
    16. return JSON.toJSONString(t);
    17. }
    18. }

    同类组件功能对比

    |
    | Sentinel | Hystrix | resilience4j | | —- | —- | —- | —- | | 隔离策略 | 信号量隔离(并发控制) | 线程池隔离/信号量隔离 | 信号量隔离 | | 熔断降级策略 | 基于慢调用比例、异常比例、异常数 | 基于异常比例 | 基于异常比例、响应时间 | | 实时统计实现 | 滑动窗口(LeapArray) | 滑动窗口(基于 RxJava) | Ring Bit Buffer | | 动态规则配置 | 支持近十种动态数据源 | 支持多种数据源 | 有限支持 | | 扩展性 | 多个扩展点 | 插件的形式 | 接口的形式 | | 基于注解的支持 | 支持 | 支持 | 支持 | | 单机限流 | 基于 QPS,支持基于调用关系的限流 | 有限的支持 | Rate Limiter | | 集群流控 | 支持 | 不支持 | 不支持 | | 流量整形 | 支持预热模式与匀速排队控制效果 | 不支持 | Rate Limiter 模式 | | 系统自适应保护 | 支持 | 不支持 | 不支持 | | 热点识别/防护 | 支持 | 不支持 | 不支持 | | 多语言支持 | Java/Go/C++ | Java | Java | | Service Mesh 支持 | 支持 Envoy/Istio | 不支持 | 不支持 | | 控制台 | 提供开箱即用的控制台,可配置规则、实时监控、机器发现等 | 简单的监控查看 | 不提供控制台,可对接其它监控系统 |