Rub*_*ace 3 project-reactor spring-webflux resilience4j
我对Bulkhead模式的理解是它是一种隔离线程池的方式。因此,与不同服务的交互使用不同的线程池:如果共享同一个线程池,一个服务不断超时可能会耗尽整个线程池,从而中断与其他(健康)服务的通信。通过使用不同的,可以减少影响。
根据我的理解,我认为没有任何理由将此模式应用于非阻塞应用程序,因为线程不会被阻塞,因此线程池也不会耗尽。
如果有人能澄清这一点,以防我遗漏了什么,我将不胜感激。
编辑(解释为什么它不重复):
还有另一个(更通用的)问题询问为什么将 Circuit-Breaker 和 Bulkhead 模式与 Reactor 一起使用。这个问题以非常通用的方式得到了回答,解释了为什么所有 Resilience4J 装饰器在使用 Reactor 时都是相关的。
另一方面,我的问题是隔板模式特有的,因为我不明白它在线程不被阻塞的情况下的好处。
小智 8
Bulkhead 模式不仅仅是隔离线程池。
\n想想利特尔定律:L = \xce\xbb * W
在哪里:
\nL\xe2\x80\x93 队列系统中的平均并发任务数
\xce\xbb\xe2\x80\x93 每单位时间到达排队系统的平均任务数
W\xe2\x80\x93 任务在排队系统中花费的平均服务时间
Bulkhead 模式更多地是L为了防止资源耗尽而进行控制。这可以通过使用以下方法来完成:
即使非阻塞应用程序也需要您可能想要限制的每个并发任务的资源。信号量可以帮助限制并发任务的数量。
\nRateLimiter 模式用于控制\xce\xbb任务允许花费的最长时间,而 TimeLimiter 模式用于控制任务允许花费的最长时间。
自适应隔板甚至可以取代速率限制器。看看Jon Moore 的精彩演讲“停止速率限制!容量管理做得正确”
\n我们目前正在 Resilience4j 中开发 AdaptiveBulkhead,它可以动态调整任务的并发限制。该实现与 TCP 拥塞控制算法相当,后者使用加法增加/乘法减少 (AIMD) 方案来动态调整拥塞窗口。\n但是 AdaptiveBulkhead 当然与协议无关。
\n| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |