首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是计算机科学中的舱壁?

什么是计算机科学中的舱壁?
EN

Stack Overflow用户
提问于 2017-11-12 16:09:47
回答 2查看 5.5K关注 0票数 24

我在阿克卡阅读调度员,并了解到它被用于舱壁目的。什么是计算机科学中的舱壁?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-12 18:13:43

解决方案:用于阻塞操作的专用调度程序是隔离阻塞行为(使其不影响系统其他部分)的最有效方法之一,它是为所有阻塞操作准备和使用专用调度程序。这种技术通常被称为“散装标题”或简单地称为“隔离阻塞”。

票数 12
EN

Stack Overflow用户

发布于 2017-11-13 02:38:27

引用乔纳斯·邦纳尔2016年4月给出的主旨演讲的话:

隔离失败--能够控制和管理失败而不需要级联--是一种模式,有时被称为“冒头”( Bulkheading )。

作为一种将船舶划分为孤立的水密舱室的方法,几个世纪以来,船头在造船工业中一直被使用,这样,如果有几个舱室被水填满,泄漏就不会扩散,船舶就可以继续工作并到达目的地。 复原力--从失败中痊愈的能力--取决于隔断和对失败的遏制,只有通过打破同步通信的强耦合才能实现。

在Akka系统中,人们通常通过调度器调优来实现大容量,正如Jamie在博客帖子中所描述的,以下是其中的一个摘录:

我在Akka的用户中遇到的最大问题之一是如何使用调度程序创建故障区域,并防止应用程序的某个部分的故障影响另一个部分。这有时被称为舱壁模式..。 将参与者划分为失败区域的关键是确定他们的风险简介。任务是否特别危险,如网络IO?是否需要阻塞(如数据库访问)的任务?在这种情况下,您希望将这些参与者及其线程与那些不那么危险的工作隔离开来。如果线程发生了什么事情,导致线程完全死亡,无法从池中获得,那么隔离是您唯一的保护,这样不相关的参与者就不会受到资源减少的影响。 您还可能希望通过分析来识别计算量较大的区域,并使用路由器(没有共享邮箱,因此不会窃取工作)和BalancingDispatcher (所有“路由者”的一个邮箱,因此本质上是窃取工作)等工具将这些任务分解出来。对于分配给路由器的那些任务,您还可能希望它们对自己的调度程序进行操作,这样密集的计算任务就不会使等待线程执行其工作的其他参与者饥饿。

Akka文档还描述了使用调度程序管理阻塞

除了调优调度员之外,在Akka中,还可以使用断路器来实现大容量。断路器是防止级联故障的可配置机构。文档给出了以下示例:

例如,我们有一个web应用程序与远程第三方web服务交互。假设第三方已经超卖了他们的容量,他们的数据库在负载下就会融化。假设数据库失败时需要很长时间才能将错误返回给第三方web服务。这反过来又会使呼叫在很长一段时间后失败。回到我们的web应用程序,用户已经注意到,他们的表单提交似乎需要更长的时间挂。好的,用户所知道的就是使用刷新按钮,在他们已经在运行的请求中添加更多的请求。这最终导致web应用程序因资源耗尽而失败。这将影响所有用户,甚至那些不使用依赖于这个第三方web服务的功能的用户。 在web服务调用中引入断路器会导致请求开始快速失败,让用户知道有什么问题,他们不需要刷新他们的请求。这也将故障行为仅限于那些使用依赖于第三方的功能的用户,其他用户不再受影响,因为没有资源耗尽。断路器也可以让精明的开发人员标记网站中使用不可用功能的部分,或者在断路器打开时酌情显示一些缓存的内容。

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

https://stackoverflow.com/questions/47250947

复制
相关文章

相似问题

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