首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在非阻塞应用程序上应用舱壁图案的目的是什么?

在非阻塞应用程序上应用舱壁图案的目的是什么?
EN

Stack Overflow用户
提问于 2020-10-21 15:52:57
回答 1查看 623关注 0票数 2

我对舱壁模式的理解是,这是一种隔离线程池的方法。因此,与不同服务的交互使用不同的线程池:如果同一个线程池是共享的,一个服务超时可能会不断耗尽整个线程池,从而中断与另一个(健康)服务的通信。通过使用不同的方法,减少了影响。

根据我的理解,我认为没有理由将这种模式应用于非阻塞应用程序,因为线程不会被阻塞,因此线程池也不会被耗尽。

如果有人能澄清这一点,我将不胜感激,以防我遗漏了什么。

编辑(解释为什么它不是副本):

还有一个(更通用的)问题是关于为什么在反应堆中使用断路器和舱壁模式?的。这个问题以一种非常普遍的方式得到了回答,解释了为什么所有的Resilience4J装饰师在使用反应堆时都是相关的。

另一方面,我的问题对于舱壁模式来说是特殊的,因为我不理解它在线程不会被阻塞的情况下的好处。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-23 07:58:51

舱壁模式不仅仅是隔离线程池。

想想小定律L = λ * W

其中:

L -排队系统中并发任务的平均数量

λ -每单位时间到达排队系统的平均任务数

W -任务在排队系统中的平均服务时间

舱壁模式更多的是控制L,以防止资源枯竭。这可以通过以下方法实现:

  • 有界队列+线程池
  • 信号量

即使是非阻塞应用程序也需要每个并发任务所需的资源,而您可能需要限制这些资源。信号量可以帮助限制并发任务的数量。

RateLimiter模式是关于控制λ,而TimeLimiter是关于控制任务允许花费的最大时间。

自适应舱壁甚至可以取代RateLimiters。看看这个很棒的演讲,“停止速率限制!容量管理做得对”乔恩·摩尔“

我们目前正在Resilience4j中开发一个Resilience4j,它动态地适应任务的并发限制。该算法的实现与TCP拥塞控制算法相当,TCP拥塞控制算法采用加性加/乘减少(AIMD)方案动态调整拥塞窗口。但AdaptiveBulkhead当然是与协议无关的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64467344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档