Hystrix应该替换现有的JDBC / HTTP连接池,还是委托给它们



许多应用程序将连接池用于 HTTP 和 JDBC 调用以实现弹性。但是使用和配置这两种类型的池是非常不同的。这重复了实现两者共有的复原模式的复杂性,例如超时、重试、缓存/警报回退、断路和监视。

在我看来,Hystrix为HTTP和JDBC调用提供了配置和实现这些相同弹性模式的通用方法。

我的问题是:

  1. Hystrix理论上能否取代现有的HTTP和JDBC完全连接池?
  2. 如果是这样,这样做的利弊是什么?

完全替换它们可以减少围绕这些连接池的复杂性 - 以及随之而来的超时和验证查询属性等。然而,我对Hystrix如何"保持"JDBC/HTTP连接 - 从而避免昂贵的连接设置成本 - 而不委托给专门用于这些任务的现有库感到模糊。

对于上下文,我有一个DropWizard应用程序,它使用Tomcat DBCP作为其JDBC连接池,使用Apache HttpClient作为其HTTP连接池。

不可以,Hystrix 无法替换您的连接池。

Hystrix的主要特点是:

  1. 通过使用有限的线程池或信号量来限制对服务的调用次数。
  2. 可以超时对服务的调用,以避免应用程序线程被锁定等待慢速/挂起的服务。
  3. 添加隔板,以便一个慢速服务对应用程序的其余部分的影响最小。
  4. 断路缓慢/挂起服务。

不支持池化连接。

我想你可以争辩说,第一点与连接池有些关系,因为 Hystrix 和连接池都可以限制对其他系统的负载。但是,拥有连接池的主要原因是池化连接的性能提升。这种负载限制行为基本上是连接池的一个好处。

但是,Hystrix可以通过提供故障快速超时行为和舱壁来补充连接池,如果将其添加到连接池前面,正如您在问题中所建议的那样。

最新更新