分散式流量控制框架sentinel初探
最近需要對公司的服務整合平臺做一個流量控制、服務熔斷等功能。剛好之前,也就是這個月初,在社群上看到阿里開源了一個流量控制的框架:Sentinel。 於是這次就打算試著整合一下。
官網的介紹:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
在官方的文件介紹中,可以看到,Sentinel 以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
簡單使用
該框架主要兩部分,資源和規則。
資源就是:你需要對什麼地方進行流量控制。
規則就是:對該資源有什麼流量控制規則,比如,單位時間類只能接受多少次的請求。
- 新增依賴
目前的最新的版本是0.2.0
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>0.2.0</version>
</dependency>
- 資源
需要使用如下的程式碼塊將 你自己的程式碼塊給包圍起來。
Entry entry = null;
try {
entry = SphU.entry(resource);
//你的程式碼塊
} catch (BlockException e1) {
//怎麼處理那些被阻塞的請求
} finally {
if (entry != null) {
entry.exit();
}
}
在Sentinel中,對那些被阻塞的請求,都是用catch到BlockException異常的方式進行處理的。
- 規則
Sentinel定義了三種規則物件,分別是:
FlowRule:流量控制規則
DegradeRule:熔斷降級規則
SystemRule:系統負載規則
我們需要定義的規則的引數都是對應這些類的屬性。這三個規則分別對應者三個RuleManager來載入規則。比如對於流量控制規則,使用FlowRuleManager.loadRules(List<FlowRule> rules)來載入定義好的流控規則,從API可以看出,定義的規則可以不止一個。
定義流量控制規則一個demo如下:
public static void initFlowRules(String resource){
List<FlowRule> rules = new ArrayList<FlowRule>();
FlowRule rule = new FlowRule();
rule.setResource(resource); //資源名
rule.setGrade(RuleConstant.FLOW_GRADE_QPS); //限流閾值型別,此處為qps型別
rule.setCount(5); //限流閾值,表示每秒鐘通過5次請求
rules.add(rule); //將定義好的rule放在List中
FlowRuleManager.loadRules(rules);
}
- 整體的demo如下:
@Test
public void test01(){
initFlowRules(resource); //上面定義的規則
for (int i = 0; i < 10; i++) {
Entry entry = null;
try {
entry = SphU.entry(resource);
//我的程式碼塊
doSomething();
} catch (BlockException e1) {
e1.printStackTrace(); //直接將異常打出來
} finally {
if (entry != null) {
entry.exit();
}
}
}
}
如上,我執行main方法10次,定義的流量規則為5個qps,執行結果如下:
如上,執行了10次,只有5次通過程式碼塊,其他5次以丟擲異常的方式被隔離了。
相關文章
- Spring Cloud Alibaba | Sentinel: 分散式系統的流量防衛兵初探SpringCloud分散式
- SpringCloudAlibaba分散式流量控制元件Sentinel實戰與原始碼分析(上)SpringGCCloud分散式控制元件原始碼
- SpringCloudAlibaba分散式流量控制元件Sentinel實戰與原始碼分析-中SpringGCCloud分散式控制元件原始碼
- SpringCloud之Sentinel高可用流量框架簡單搭建SpringGCCloud框架
- 分散式Redis深度歷險-Sentinel分散式Redis
- [分散式]對高併發流量控制的一點思考分散式
- Sentinel分散式限流元件,SpringCloud Alibaba整合分散式元件SpringGCCloud
- 分散式框架分散式框架
- SpringCloud-Alibaba-Sentinel(1)初探SpringGCCloud
- 搞懂分散式技術3:初探分散式協調服務zookeeper分散式
- [分散式][Redis]Redis分散式框架搭建與整合分散式Redis框架
- 框架篇:分散式鎖框架分散式
- Git分散式版本控制工具Git分散式
- sentinel流量控制和熔斷降級執行流程之原始碼分析原始碼
- [分散式]--Dubbo分散式服務框架-服務治理分散式框架
- 10000字,圖解分散式系統限流平臺Sentinel圖解分散式
- 分散式通訊框架 – rmi分散式框架
- 分散式通訊框架 - rmi分散式框架
- 分散式服務框架 gRPC分散式框架RPC
- 分散式框架Dubbo入門分散式框架
- SpringCloud微服務實戰——搭建企業級開發框架(十四):整合Sentinel高可用流量管理框架【限流】SpringGCCloud微服務框架
- Aeron 框架初探框架
- 解密分散式事務框架-Fescar解密分散式框架
- .NET分散式框架 | Orleans 知多少分散式框架
- Sentinel 實戰-控制檯篇
- 一、Git分散式版本控制系統Git分散式
- 控制 Egress 流量
- 流量控制--3.Linux流量控制的元件Linux元件
- [原始碼解析] PyTorch 分散式(17) --- 結合DDP和分散式 RPC 框架原始碼PyTorch分散式RPC框架
- 設計一個分散式RPC框架分散式RPC框架
- SpringCloud微服務實戰——搭建企業級開發框架(十五):整合Sentinel高可用流量管理框架【熔斷降級】SpringGCCloud微服務框架
- TCP流量控制TCP
- Java流量控制Java
- 聊聊流量控制
- TCP流量控制、擁塞控制TCP
- SpringCloud微服務實戰——搭建企業級開發框架(十六):整合Sentinel高可用流量管理框架【自定義返回訊息】SpringGCCloud微服務框架
- 初探dhtmlxScheduler日程管理框架HTML框架
- 阿里分散式事務框架 GTS 全解析阿里分散式框架