【问题标题】:Hystrix FallBack Bad PracticeHystrix 后备不良做法
【发布时间】:2017-12-27 01:29:12
【问题描述】:

为什么在使用 hystrix 库时在回退方法中调用数据库是一种不好的做法?

@HystrixCommand(fallbackMethod ="fallBackMethod")
public Double getRating(){
 //Some Code Here
}
public Double fallBackMethod(){
//Any call to data base
}

【问题讨论】:

  • 如果你的数据库宕机了,回退也将失败...更多细节参见 Hystrix wiki:github.com/Netflix/Hystrix/wiki/How-To-Use#Fallback
  • 谢谢托马斯
  • 如果你调用另一个数据库也不错,但是在这种情况下你应该为那个后备使用实现一个后备,你转身。
  • 是否会对故障产生级联影响

标签: java spring hystrix


【解决方案1】:

如果您的业务逻辑需要,在后备中调用 db 并不是一个坏习惯。只要确保这个后备方法也被@HystrixCommand 包裹起来,因为它可能由于数据库问题而超时。

【讨论】:

    【解决方案2】:

    如果您的数据库出现故障或速度变慢,那么您在回退中的调用将变慢或阻塞或抛出异常。在更糟糕的情况下,许多线程会在回退中阻塞,因此您的服务可能不可用。

    回退是为了保护您的服务。当出现问题时,调用会通过调用 fallback 快速或静默失败,因此线程不会被阻塞,服务仍然可以服务。所以不建议在回退中做大量或不稳定的事情,例如调用数据库。

    如果你必须这样做,你可以在你的后备中使用 HystrixCommand,就像这样:https://github.com/Netflix/Hystrix/wiki/How-To-Use#Common-Patterns-FallbackCacheViaNetwork

    【讨论】:

      猜你喜欢
      • 2018-06-21
      • 2018-03-07
      • 2018-03-08
      • 2017-10-18
      • 2018-02-06
      • 2016-06-05
      • 2011-01-05
      • 2023-03-19
      • 2015-06-13
      相关资源
      最近更新 更多