什么是计算机科学的批量?

nad*_*dia 10 computer-science dispatcher akka

我正在读Akka的调度员,我了解到它用于批量处理.什么是计算机科学的批量?

Jef*_*ung 21

引用JonasBonér 在2016年4月发表的主题演讲中:

隔离故障 - 能够包含和管理故障而不进行级联 - 有时被称为Bulkheading.

在此输入图像描述

数百年来,Bulkheading一直被用于船舶建造行业,作为将船舶划分为隔离的水密隔间的一种方式,因此如果几个舱室充满水,泄漏不会扩散,船舶可以继续运行并到达其目的地.

恢复能力 - 从失败中恢复的能力 - 取决于划分和遏制失败,并且只能通过摆脱同步通信的强耦合来实现.


在Akka系统中,人们通常通过调度程序调整来实现批量处理,正如Jamie Allen在博客文章中所描述,其中以下是摘录:

我在Akka用户中遇到的最大问题之一是如何使用调度程序创建故障区域并防止应用程序的某个部分发生故障而影响另一个部分.这有时被称为隔板模式 ....

将参与者划分为失败区域的关键是识别他们的风险状况.是一项特别危险的任务,比如网络IO?这是一项需要阻止的任务,例如数据库访问吗?在这些情况下,您希望将那些参与者及其线程与那些不那么危险的工作隔离开来.如果某个线程发生某些事情导致它完全死亡并且无法从池中获取,隔离是您唯一的保护,以便不相关的参与者不会受到资源减少的影响.

您还可能希望通过分析来识别繁重的计算区域,并使用诸如路由器(没有共享邮箱,因此没有工作窃取)和BalancingDispatcher(所有"路由"的一个邮箱)等工具来解决这些任务,因此工作窃取在自然界).对于您分配给路由器的那些任务,您可能还希望它们在自己的调度程序上运行,以便强烈的计算任务不会使等待线程执行其工作的其他actor变得饥饿.

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


除了调整调度员之外,在Akka中可以使用断路器来实现批量处理.断路器是可配置的机制,以防止级联故障.该文档提供了以下示例:

例如,我们有一个与远程第三方Web服务交互的Web应用程序.假设第三方超出了他们的容量,他们的数据库在负载下融化.假设数据库以这样的方式失败,即将错误交还给第三方Web服务需要很长时间.这反过来使得呼叫在很长一段时间后失败.回到我们的Web应用程序,用户已经注意到他们的表单提交需要更长时间才能挂起.用户做他们知道要做的事情就是使用刷新按钮,为他们已经运行的请求添加更多请求.这最终导致由于资源耗尽而导致Web应用程序失败.这将影响所有用户,即使那些未使用依赖于此第三方Web服务的功能的用户也是如此.

在Web服务调用上引入断路器会导致请求开始失败,让用户知道出现问题并且他们无需刷新请求.这也将故障行为仅限于那些使用依赖于第三方的功能的用户,其他用户不再受到影响,因为没有资源耗尽.断路器还可以允许精明的开发人员标记使用不可用功能的站点部分,或者在断路器打开时可能适当地显示一些缓存内容.


use*_*003 7

解决方案:用于阻止操作的专用调度程序隔离阻止行为以使其不会影响系统其余部分的最有效方法之一是为所有这些阻止操作准备并使用专用的调度程序。该技术通常被称为“批量处理”或简称为“隔离阻塞”。