使用難度
hystrix
每個專案都需要引入hystrix包,或者在框架裡引入,並且官方僅支援java
<!-- https://mvnrepository.com/artifact/com.netflix.hystrix/hystrix-core -->
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-core</artifactId>
<version>1.5.18</version>
</dependency>
複製程式碼
編寫可熔斷呼叫
public class CommandHelloWorld extends HystrixCommand<String> {
private final String name;
public CommandHelloWorld(String name) {
super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
this.name = name;
}
@Override
protected String run() {
return "Hello " + name + "!";
}
@Override
protected String getFallback() {
return "Hello World";
}
}
複製程式碼
destinationrule
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: httpbin
spec:
host: httpbin
trafficPolicy:
connectionPool:
tcp:
maxConnections: 1
http:
http1MaxPendingRequests: 1
maxRequestsPerConnection: 1
outlierDetection:
consecutiveErrors: 1
interval: 1s
baseEjectionTime: 3m
maxEjectionPercent: 100
複製程式碼
無應用內程式碼,不需要了解特定語言相關知識,比如hystrix內部的執行緒池,訊號量等。
配置能力
hystrix
hystrix官方提供大量配置項可供使用 Hystrix
istio
istio同樣提供大量的指標可供配置 通訊路由
hystrix和istio都提供大量的配置項進行自定義使用
業務侵入性
hystrix硬編碼在業務程式碼裡
destinationrule不在業務程式碼裡
靈活性
destinationrule 隨時可以新增和刪除,無需改動程式碼,並且支援所有語言的應用
hystrix 硬編碼,必須改動應用程式碼或者配置,僅限java使用,並且python, php等語言無官方支援
運維難度
hystrix需要改程式碼或者配置,雖然有apollo/nacos等統一的配置中心,但是還是需要了解hystrix的相關知識,並且可能需要重啟應用等額外操作
destionationrule 運維只需瞭解istio相關知識即可
通過命令: kubectl apply -f 可以直接應用
通過命令: kubectl delete destinationrules.networking.istio.io 服務名 一鍵刪除
維護成本
hystrix需要開發人員和運維人員同時參與維護
destinationrule只需要運維人員維護
熔斷監控
hystrix
hystrix可以在java應用內硬編碼報警指令碼,比如: RegisterCommandExcutionHook.java
關鍵程式碼如下:
HystrixPlugins.getInstance().registerCommandExecutionHook(new HystrixCommandExecutionHook() {
@Override
public <T> void onFallbackStart(HystrixInvokable<T> commandInstance) {
HystrixCommand hystrixCommand = (HystrixCommand) commandInstance;
String commandKey = hystrixCommand.getCommandKey().toString();
log.error("Hystrix: {} 介面開始降級", commandKey);
super.onFallbackStart(commandInstance);
}
});
複製程式碼
雖然在應用內可以使用程式碼採集足夠的監控指標,但是硬編碼,並且需要開發成本,並且日誌和業務異常混雜在一起,不方便管理
istio
istio可以藉助谷歌開源的prometheus進行監控,不需要應用內的開發,並且預設就支援釘釘等豐富的報警推送
不過hystrix和istio這兩套環境可以同時存在