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

blmhpbnm  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(176)

我在Akka阅读了关于dispatchers的文章,我了解到它是用于隔舱的。在计算机科学中,隔舱是什么?

px9o7tmv

px9o7tmv1#

引用乔纳斯·博内尔在2016年4月发表的一篇keynote address文章中的话:
故障隔离--能够 * 包含和管理故障 * 而不使其级联--是一种有时称为 * 隔离 * 的模式。

隔舱在造船业中已经使用了几个世纪,作为一种将船舶分隔成隔离的水密舱的方式,以便如果几个舱充满水,泄漏不会扩散,船舶可以继续运行并到达目的地。
恢复能力(从故障中恢复的能力)取决于故障的划分和遏制,并且只能通过从同步通信的强耦合中解脱出来来实现。
在Akka系统中,通常通过调度程序调优来实现隔板,如Jamie艾伦在blog post中所描述的,以下是其中的摘录:
我在Akka用户中遇到的最大问题之一是如何使用调度程序创建故障区域,并防止应用程序一部分的故障影响另一部分。这有时被称为隔板模式......。
将执行元划分到故障区域的关键是确定其风险配置文件。某个任务是否特别危险(如网络IO)?它是否需要阻塞(如数据库访问)?在这些情况下,您需要将这些执行元及其线程与执行危险性较低的工作的线程隔离开来。如果某个线程发生了某种情况,导致它完全停止运行,并且无法从池中使用,隔离是唯一的保护措施,这样不相关的参与者就不会受到资源减少的影响。
您还可能希望通过分析来确定计算量大的区域,并使用Routers等工具将这些任务分解(没有共享邮箱,因此不会窃取工作)和BalancingDispatcher(所有“路由对象”都有一个邮箱,因此实际上是工作窃取)。对于分配给路由器的那些任务,您可能还希望它们在自己的调度程序上操作,以便密集的计算任务不会使等待线程执行其工作的其他参与者挨饿。
Akka文档还介绍了如何使用调度程序来管理阻塞。
除了调整调度程序之外,Akka中还可以使用circuit breakers来实现隔离。断路器是一种可配置的机制,用于防止级联故障。文档中给出了以下示例:
举个例子,我们有一个Web应用程序与远程第三方Web服务交互。假设第三方超额销售了他们的容量,他们的数据库在负载下崩溃了。假设数据库发生故障,需要很长时间才能将错误返回给第三方Web服务。这反过来又会使调用在很长一段时间后失败。返回到我们的Web应用程序。用户已经注意到他们的表单提交花费了更长的时间,看起来像是挂起了。用户做了他们知道该做的事情,那就是使用刷新按钮,向他们已经运行的请求添加更多的请求。这最终会导致Web应用程序由于资源耗尽而失败。这将影响所有用户,甚至那些不使用依赖于此第三方Web服务的功能的用户。
在Web服务调用上引入断路器将导致请求开始快速失败,让用户知道出现了问题,他们不需要刷新请求。这还将失败行为限制为仅那些使用依赖于第三方的功能的用户,其他用户不再受到影响,因为没有资源耗尽。断路器还可以允许精明的开发人员标记网站中使用不可用功能的部分,或者在断路器断开时适当地显示一些缓存的内容。

mitkmikd

mitkmikd2#

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

相关问题