近期有同事再提要不要使用sentinel。所以我就對現在已經用hystrix。先看兩者的線程模型。大部分對比項是sentinel開源工程對比的,本人做了一些修改以及增加了一些對比項和說明。

從線程模型上看sentinel使用的是tomcat/jetty/other本身的線程池。hystrix使用的是自己創建的線程池
| Items |
Sentinel |
Hystrix |
remark |
| 隔離策略 |
信號量隔離(並發線程數限流)(模擬信號量) |
線程池隔離/信號量隔離 |
Sentinel不創建線程依賴tomcat或jetty容器的線程池,存在的問題就是運行容器的線程數量限制了sentinel設置值的上限可能設置不准。 比如tomcat線程池為10,sentinel設置100是沒有意義的,同時隔離性不好 hystrix使用自己創建的線程池,隔離性會更好
|
| 熔斷降級策略 |
基於響應時間、異常比率、異常數 |
基於異常比率 |
快速失敗的本質功能 |
| 實時統計實現 |
滑動窗口(LeapArray) |
滑動窗口(基於 RxJava) |
|
| 動態規則配置 |
支持多種數據源 |
支持多種數據源 |
|
| 擴展性 |
多個擴展點 |
插件的形式 |
|
| 基於注解的支持 |
支持 |
支持 |
|
| 限流 |
基於 QPS,支持基於調用關系的限流 |
有限的支持(並發線程數或信號量大小) |
快速失敗的本質功能 |
| 流量整形 |
支持預熱模式、勻速器模式、預熱排隊模式 |
不支持(排隊) |
支持排隊好吧 |
| 系統自適應保護 |
支持(僅對linux生效) |
不支持 |
所謂的自適應就是設置一個服務器最大允許處理量的閾值。(有比沒有強,但是要知道最大負載量是多少。) |
| 控制台 |
提供開箱即用的控制台,可配置規則、查看秒級監控、機器發現等
|
簡單的監控查看接近實時數據
|
控制台是非常有競爭力的功能,因為能集中配置限制數據更方便,但是展示數據和實時性沒有hystrix直觀。 |
| 配置持久化 |
ZooKeeper, Apollo, Nacos
|
Git/svn/本地文件 |
Sentinel客戶端采用直接鏈接持久化存儲,應用客戶端引用了更多的依賴,同樣的存儲鏈接可能有多個配置 |
| 動態配置 |
支持 |
支持 |
hystrix可能需要手動觸發,sentinel增加了額外的端口進行配置文件控制,應該也支持spring boot動態配置 |
| 黑白名單 |
支持 |
不支持 |
個人覺得這個功能用的不是很多 |
| springcloud集成 |
高 |
非常高 |
Spring boot使用hystrix會更方便 |
| 整體優勢 |
集中配置設置及監控+更細的控制規則
|
漂亮的界面+接近實時的統計結果 |
集中配置可能更有吸引力,但是配置值是多少以及讓誰控制依然是很頭疼的事情。運維控制可能不知道哪個應該優先哪個不優先,應該調整到多大。什么時候更適合使用sentinel?個人認為docker容器化部署之后sentinel可能更會發揮作用,但是會有另外的競品出現做選型。 |
