sentinel与hystrix对比

近期有同事再提要不要使用sentinel。所以我就对现在已经用hystrix。先看两者的线程模型。大部分对比项是sentinel开源工程对比的,本人做了一些修改以及增加了一些对比项和说明。

sentinel与hystrix对比_第1张图片

从线程模型上看sentinel使用的是tomcat/jetty/other本身的线程池。hystrix使用的是自己创建的线程池

Items

Sentinel

Hystrix

remark

隔离策略

信号量隔离(并发线程数限流)(模拟信号量)

线程池隔离/信号量隔离

Sentinel不创建线程依赖tomcatjetty容器的线程池,存在的问题就是运行容器的线程数量限制了sentinel设置值的上限可能设置不准。

比如tomcat线程池为10sentinel设置100是没有意义的,同时隔离性不好

hystrix使用自己创建的线程池,隔离性会更好

 

熔断降级策略

基于响应时间、异常比率、异常数

基于异常比率

快速失败的本质功能

实时统计实现

滑动窗口(LeapArray)

滑动窗口(基于  RxJava)

 

动态规则配置

支持多种数据源

支持多种数据源

 

扩展性

多个扩展点

插件的形式

 

基于注解的支持

支持

支持

 

限流

基于  QPS,支持基于调用关系的限流

有限的支持(并发线程数或信号量大小)

快速失败的本质功能

流量整形

支持预热模式、匀速器模式、预热排队模式

不支持(排队)

支持排队好吧

系统自适应保护

支持仅对linux生效

不支持

所谓的自适应就是设置一个服务器最大允许处理量的阈值。(有比没有强,但是要知道最大负载量是多少。)

控制台

提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等

 

 

简单的监控查看接近实时数据

 

 

控制台是非常有竞争力的功能,因为能集中配置限制数据更方便,但是展示数据和实时性没有hystrix直观。

配置持久化

ZooKeeper, Apollo,  Nacos

 

Git/svn/本地文件

Sentinel客户端采用直接链接持久化存储,应用客户端引用了更多的依赖,同样的存储链接可能有多个配置

动态配置

支持

支持

hystrix可能需要手动触发,sentinel增加了额外的端口进行配置文件控制,应该也支持spring boot动态配置

黑白名单

支持

不支持

个人觉得这个功能用的不是很多

springcloud集成

非常高

Spring boot使用hystrix会更方便

整体优势

集中配置设置及监控+更细的控制规则

 

漂亮的界面+接近实时的统计结果

集中配置可能更有吸引力,但是配置值是多少以及让谁控制依然是很头疼的事情。运维控制可能不知道哪个应该优先哪个不优先,应该调整到多大。什么时候更适合使用sentinel?个人认为docker容器化部署之后sentinel可能更会发挥作用,但是会有另外的竞品出现做选型。

       

你可能感兴趣的:(sentinel与hystrix对比)