问题标签 [circuit-breaker]

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.

0 投票
1 回答
1299 浏览

c# - 为什么我可以在 C# 中编写一个什么都不做的通用 catch 语句?

可能重复:
为什么我不能在 C# 中捕获通用异常?

我最近一直在审查和编写断路器代码。以下方法编译,但从未输入 catch 块。我有很多变通方法,这不是获得正确行为(过滤异常)的唯一方法,但我很好奇为什么它会编译并且不起作用


这是一个应该进入前一个方法的catch块的测试。

0 投票
3 回答
957 浏览

c# - 断路器模式中的异常过滤有哪些实现?

断路器模式,来自《Release It!》一书 ,在远程服务失败(或恢复)时保护远程服务免受请求,并帮助客户端管理重复的远程服务失败。我喜欢Davy Brion 的有状态断路器,而Ayende 的延迟超时修复非常干净。

但是,我还没有看到很多过滤哪些异常会导致断路器故障计数增加的实现。


不要担心显示锁定,除非您的实现特别依赖于巧妙的锁定。仅供参考,Phil Haack 似乎拥有最新版本的 TimedLock,用于 Davy Brion 的文章。

0 投票
1 回答
441 浏览

c# - 延迟超时解决断路器正在抛出 ArgumentOutOfRangeException

Ayende 发布了对 Davy Brion断路器的修改,其中他将超时分辨率更改为惰性模型。

但是,构造函数可能会失败,因为 aTimeSpan可以快速溢出 a 的最大值DateTime。例如,当断路器的超时是 TimeSpan 的最大值时。

System.ArgumentOutOfRangeException 被捕获

Message="添加或减去的值导致无法表示的日期时间。"

...

在 System.DateTime.op_Addition(DateTime d, TimeSpan t)

我们如何避免这个问题并保持预期的行为?

0 投票
2 回答
6083 浏览

c# - 如何使用断路器?

我正在寻找方法使远程调用不受我控制的服务,直到连接成功。我也不想简单地设置一个计时器,每n秒/分钟执行一次操作,直到成功。经过大量研究,断路器模式似乎非常适合。

我找到了一个使用 Castle Windsor 拦截器的实现,看起来很棒。唯一的问题是我不知道如何使用它。从我发现的有关该主题的几篇文章中,我能找到的唯一用法示例是简单地使用断路器来调用一个动作一次,这似乎不是很有用。由此看来,我似乎需要简单地在循环中使用断路器来运行我的操作while(true)

如何使用 Windsor 拦截器执行调用外部服务的操作,直到它成功而不会猛击我们的服务器?

有人可以填写缺失的部分吗?

这是我能想到的

基于此,我想我现在理解了这个概念以及如何应用它。

0 投票
1 回答
2119 浏览

design-patterns - 断路器设计模式实施建议

我正在为大型分布式系统(在 AWS 上)实施断路器设计模式。

Netflix 在这里给出了很好的描述:http: //techblog.netflix.com/2011/12/making-netflix-api-more-resilient.html

我需要一些关于后端监控数据库实施的建议。基本上,我需要一个可以执行以下操作的数据库/守护程序/服务:

  1. 每秒存储数千次写入。
  2. 快速汇总数千条记录(最后几秒钟)或以其他方式维护状态的滚动平均计算等(最好带有一些缓存)。
  3. 存储两周的数据或步骤 2 中的计算结果。

是否有适合此任务的现有数据库或其他软件?我怀疑 Netflix 会给我他们的;)

0 投票
0 回答
648 浏览

c# - 如何对断路器进行单元测试?

我正在使用外部服务对我的页面进行元标记。我为它实现了断路器以及后备,并且运行良好。现在我想为它编写单元测试。有什么想法吗?

我正在粘贴我的部分代码供您查看:

统一注册

后备实施:

0 投票
1 回答
4421 浏览

search - 重要条款导致 CircuitBreakingException

我有一个中等大小的弹性搜索索引(1.46T 或 ~1e8 文档)。它运行在 4 台服务器上,每台服务器都有 64GB Ram 在弹性和操作系统之间平均分配(用于缓存)。

我想尝试新的“重要术语”聚合,所以我启动了以下查询......

它应该将指定的文档正文与索引的其余部分进行比较,并找到对文档重要但在索引中不常见的术语。

不幸的是,这总是导致

ElasticsearchException[org.elasticsearch.common.breaker.CircuitBreakingException:数据太大,数据将大于[25741911654]字节的限制];

嵌套:UncheckedExecutionException[org.elasticsearch.common.breaker.CircuitBreakingException:数据太大,数据将大于[25741911654]字节的限制];

嵌套:CircuitBreakingException[数据太大,数据将大于[25741911654]字节的限制];

一两分钟后,似乎暗示我没有足够的记忆。

有问题的弹性服务器实际上是虚拟机,所以我关闭了其他虚拟机并给每个弹性实例 96GB 和每个操作系统另外 96GB。

发生了同样的问题(不同的数字,花费的时间更长)。我手头没有可用内存超过 192GB 的硬件,所以不能再高了。

聚合不意味着对整个索引使用吗?我在查询格式方面犯了错误吗?

0 投票
1 回答
1154 浏览

scala - 演员之间的 Akka 断路器共享

我有一个演员池正在使用的共享外部资源(比如文件存储)。每次对文件存储发出新请求时,都会创建一个新参与者,以使用传入的外部系统的引用来填充请求。

我为每个参与者创建一个断路器的当前方法违背了目的,因为为每个“请求”创建了一个新参与者,该“请求”对该外部资源执行一系列操作。

不理想 - CB 实例太多;

更好的方法 - 传递一个 CB ref;

从父参与者传递断路器引用是否安全,该父参与者还维护对外部系统的引用并在路由器池中的多个参与者之间共享此断路器,动态创建或以其他方式创建?

0 投票
1 回答
1403 浏览

java - Akka 和询问模式。当 Actor 突然停止时,我可以返回 Future 吗?

我目前有使用 Ask Pattern 调度请求的代码。分派的请求将生成一个 Akka Actor,它发送一个 HTTP 请求,然后返回响应。我正在使用 Akka 的断路器 API 来管理我调用的上游 Web 服务的问题。

如果断路器处于打开状态,则所有后续请求都会快速失败,这是预期的效果。然而,当actor快速失败时,它只是抛出一个CircuitBreakerOpenException,停止actor,但是控制不会返回到发出初始请求的代码,直到生成AskTimeoutException。

这是发送请求的代码

这是断路器

当执行此代码块并且电路打开时,它无法快速抛出异常,但是我想将控制权返回给处理未来的代码,而无需等待超时。

这可能吗?

0 投票
1 回答
159 浏览

c# - 断路器的例外太多?

我只是在阅读有关缓慢异常的一些答案。我完全同意异常可以而且应该使用而不是返回代码的想法,尽管每个异常都相当慢(尽管不一定很明显)。

我在服务中实现了一个断路器,该服务连接到在每个页面请求上被多次调用的第 3 方。在失败的情况下,这意味着将抛出许多异常(并且日志也将被填充)。

这会是一个问题吗?