问题标签 [fault-tolerance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 如何发现一个 Scala 远程演员死了?
在 Scala 中,当另一个(远程)actor 终止时,可以通过设置 trapExit 标志并以第二个 actor 作为参数调用 link() 方法来通知一个 actor。在这种情况下,当远程参与者通过调用 exit() 结束其工作时,第一个参与者通过接收退出消息得到通知。
但是当远程参与者以不那么优雅的方式终止时会发生什么(例如,它正在运行的 VM 崩溃)?换句话说,本地参与者如何发现远程参与者不再可用?当然,我希望(如果可能的话)可以通过类似于退出消息的消息通知本地参与者,但这似乎不可行。我错过了什么吗?我应该不断地轮询远程参与者的状态(在这种情况下,我不知道哪种方法是最好的方法)还是有更聪明的解决方案?
java - 如何在 Java 中隔离不受信任的本机代码?
我有一个我不信任的 C 库(从某种意义上说,它可能经常崩溃)。我从 Java 进程中调用它。
为了防止 C 库崩溃带来整个 Java 应用程序。下来,我认为最好为这个库生成一个专用的 Java 进程,并让它与 Java 应用程序交互。通过套接字编程或 RMI。然后,如果发生崩溃,我可以生成另一个并继续处理。
是ProcessBuilder
要走的路吗?或者还有其他更简单的方法吗?
谢谢!
c++ - 不能让 C++ 应用程序“崩溃证明”吗?
假设我们有一个用 C++ 编写的 SDK,它接受一些二进制数据(如图片)并执行一些操作。难道不能让这个SDK“防撞”吗?崩溃主要是指由于用户传递的无效输入(例如异常短的垃圾数据),操作系统在内存访问冲突时强制终止。
我没有使用 C++ 的经验,但是当我用谷歌搜索时,我发现了几种听起来像解决方案的方法(使用向量而不是数组,配置编译器以便执行自动边界检查等)。
当我向开发人员介绍这个时,他说这仍然是不可能的。不是我不相信他,但如果是这样,像 Java 这样的语言是如何处理这个的?我认为 JVM 每次都会执行边界检查。如果是这样,为什么不能手动在 C++ 中做同样的事情?
更新
“防崩溃”并不是说应用程序不会终止。我的意思是它不应该在没有发生情况的信息的情况下突然终止(我的意思是它会转储核心等,但是不可能显示“参数 x 无效”等消息吗?)
mpi - MPICH/OpenMPI 中的容错
我有两个问题-
Q1。除了检查点/回滚之外,还有更有效的方法来处理 MPI 中的错误情况吗?我看到如果一个节点“死亡”,程序会突然停止。有没有办法在节点死亡后继续执行?(如果以准确性为代价,则没有问题)
Q2。我在“http://stackoverflow.com/questions/144309/what-is-the-best-mpi-implementation”中读到,OpenMPI 具有更好的容错性,最近 MPICH-2 也提出了类似的功能..有人知道它们是什么以及如何使用它们吗?是“模式”吗?他们可以在第一季度所述的情况下提供帮助吗?
请回复。谢谢你。
mapreduce - MapReduce 中的容错
我正在阅读有关 Hadoop 以及它的容错性的信息。我阅读了 HDFS 并阅读了如何处理主节点和从节点的故障。但是,我找不到任何提到 mapreduce 如何执行容错的文档。特别是当包含 Job Tracker 的主节点宕机或任何从节点宕机时会发生什么?
如果有人可以向我指出一些详细解释这一点的链接和参考资料。
scala - 如果抛出异常,Akka Actor 不会终止
我目前正在尝试开始使用 Akka,但遇到了一个奇怪的问题。我的演员有以下代码:
这就是我开始我的工人的方式:
这就是我关闭一切的方式:
现在发生的情况是,如果我向工作人员发送 n > 0 的消息(不抛出异常),一切正常并且应用程序正常关闭。但是,只要我向它发送一条导致异常的消息,应用程序就不会终止,因为仍然有一个演员在运行,但我不知道它来自哪里。
如果有帮助,这是相关线程的堆栈:
PS:没有终止的线程不是任何工作线程,因为我添加了一个 postStop 回调,它们每个都正确停止。
PPS:Actors.registry.shutdownAll
解决问题,但我认为shutdownAll应该只作为最后的手段,不是吗?
c# - 请帮我设计这个事件报告系统
我正在尝试设计一个通过 Web 服务向数据库报告活动事件的系统。Web 服务和数据库已经构建(COTS 软件)——我所要做的就是提供事件源。
但是,问题是事件源需要容错。我们有多个可以与之通信的复制数据库,因此如果我正在与之通信的 Web 服务或数据库出现故障,该软件可以快速切换到另一个启动的数据库。
我需要帮助的是所有数据库都关闭的情况。我已经设计了一个队列,它将在事件堆积时保留它们(并在连接恢复后将它们爆发),但队列是一个内存结构:如果我的应用程序在这种状态下崩溃,或者如果断电等,则队列中的所有事件都丢失。这是无法接受的。我需要的是一种持久化事件的方法,以便当数据库重新联机时,我可以发送一连串排队的事件,即使在断电或崩溃的情况下也是如此。
我知道我不想重新实现队列本身以将文件系统用作后备存储。这会起作用(我已经尝试过了)-但是随着硬盘驱动器成为瓶颈,这种方法会大大降低系统速度。但除此之外,我想不出一种方法来设计这个系统,使所有事件仅在无法访问数据库时安全地存储在硬盘上。
有没有人有任何想法?=)
azure - 我可以对 Azure 上的全球时间做出哪些假设?
我希望我的 Azure 角色在发生突然故障时重新处理数据。我考虑以下选项。
对于要处理的每个数据块,我都有一个数据库表行,我可以添加一个表示“来自处理节点的最后一次 ping 的时间”的列。因此,当一个节点抓取一个数据块进行处理时,它会将“处理”状态和那个时间设置为“当前时间”,然后节点负责更新那个时间,比如每分钟更新一次。然后定期某个节点会询问“所有处理状态和 ping 时间大于 10 分钟的块”,并认为这些块已被废弃,并以某种方式将它们排队等待重新处理。
我有一个非常严重的担忧。上述方法要求节点具有或多或少相同的时间。我可以依靠所有 Azure 节点以某种合理的精度(比如几秒钟)具有相同的时间吗?
ruby - 电子邮件服务提供商 (ESP) 的故障转移解决方案?
我们正在寻找能够让我们透明地使用多个电子邮件服务提供商(“ESP”,例如 ConstantContact、JangoMail、Sailthru、SendGrid、VerticalResponse 等)的库、项目或服务。我们选择的任何 ESP 都会不时出现问题,并且由于我们业务的需求,我们需要有一个故障转移解决方案来避免交付失败。
我们正在寻找的基本功能:
- 将电子邮件传递委托给 ESP
- 从一个 ESP 到另一个 ESP 的自动故障转移(仅将一封电子邮件发送给给定的订阅者,而不是重复的)
- 能够检查已配置 ESP 的交付状态(打开率、跳出率、列表大小等)
换句话说,我们想要一个通过使用多个 ESP 来提供容错和恢复的层。如果它是一个库,我们希望它用 Ruby 编写(但我们可能愿意考虑其他语言)。 是否有提供此功能的现有项目或服务?
我们的用例: 我们每天向订阅者发送许多对时间敏感的电子邮件。但是,我们使用的 ESP 可能会下降,但我们仍然需要非常及时地发送电子邮件(在发布后的几秒钟内)。如果初始交付失败,我们希望转移到二级、三级等 ESP 以从故障中恢复。
在寻找现有解决方案时,我空手而归。不过,这两篇博客文章抓住了我们的部分动机:如何确保您的电子邮件被送达,使用多个服务提供商来降低风险并避免失败
apache-flex - Flex AMF 离线模式?
我目前正在使用 Flex (Flash Builder 4) 并将 Web 服务连接到 Apache PHP Zend AMF 服务器以检索数据。
这很好用,但我想知道哪些选项可用于容错。
我知道我可能可以设置第二台服务器,如果应用程序无法访问第一台服务器,它会切换到该服务器。对此有任何想法都会很好,但我也在考虑尝试给每台机器一些容忍度。
例如,如果他们至少有能力向应用程序输入数据,那将是一个开始。因此,如果他们单击“保存”并且无法访问服务器,则会将其缓存或存储到本地文件,直到服务器备份。尽管无法进行数据查找可能是一个大问题。
也许已经有一些图书馆或我可以看的东西来做到这一点?