问题标签 [resiliency]
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.
amazon-web-services - Kinesis Producer 回调函数 - 保证交付?
每天向 Kinesis 流式传输数十亿条消息。
我们正在寻找一种实现方式,使我们能够以完全一次保证的方式向 Kinesis 传递消息。
我们的生产者框架要求流接收器是幂等的,以保证一次性交付,而 Kinesis 不是。因此,我们目前至少收到一次交货。(重复是可能的,我们确实看到了它们,当流式微批处理由于生产者端的任何原因必须重新启动时)
我们开始研究 Kinesis Producer Library (KPL)回调函数。基本上,我们将根据每条消息中存在的密钥跟踪 DynamoDB 中已传递的消息和未传递的消息的状态。如果我们知道已经发送了一条消息,我们将跳过它以重新尝试传递。然后似乎完全一次是可能的..有两个问题:
1) 我们唯一的问题——我们失去回调函数调用的可能性有多大(例如网络故障等),或者回调函数本身失败了(例如我们遇到了 DynamoDB 限制/中断等)——是这记录在某处?我知道机会并不高,但我们想设计一个系统,能够对这些预期的事情有弹性。
2)时间。假设 Kinesis 出于某种原因延迟调用了回调函数(5-15 毫秒就足以打破上述回调函数中的一些假设,这些假设在 DynamoDB 中保持交付状态)。虽然我们还没有收到关于交付的确认,但我们的流媒体制作者框架已经尝试重新交付它认为尚未交付。这个潜在问题的任何解决方法?
附言。我们知道一种解决方法是在应用程序端(来自该 kinesis 流的接收器)进行重复数据删除,但这不在我们的项目范围内,我们很难要求恰好一次进入该 Kinesis 流。
hangfire - 使用 Hangfire(共享任务/对象)的多个服务实例,可能吗?
出于冗余原因,我需要使用相同的数据库运行同一服务的多个实例。
我发现了一些关于“Hangfire 多个实例”的问题,但与我的目的不同:通常是关于在同一数据库上为不同任务运行多个实例,或类似于此。
我需要知道当 2 个或更多 Hangfire 实例使用同一个数据库(我们想使用 MongoDB)时是否存在并发问题,以及这是否是使服务具有弹性的解决方案。
目标是让实例在另一个实例出现故障时处理所有工作。
任何建议都可以涵盖这种情况。
openshift - Chaos Toolkit 是否支持基于 CRI-O 的运行时?例如它可以在 OpenShift Container Platform v4.3 上运行吗?
请有人确认 Chaos Toolkit ( https://github.com/chaostoolkit ) 是否可以在 OpenShift Container Platform 4.3 版上运行?它基于 CRI-O 运行时。正如之前在 Gremlin、Ops-Monkey、Pumba 和 Litmus 上尝试过的那样,但它们似乎都不起作用,原因似乎是 CRI-O 运行时。是否有人可以确认 Chaos Toolkit 是否肯定可以在 OCP v4.3 上运行?并且还可以建议任何其他开源替代品吗?再次感谢。
问候,维杰
c# - WaitRetryForever 不适用于 Polly.Net Resiliency 中的自定义异常
我有以下Retry
和Circuit Breaker
政策:
如果我使用自定义异常,则在记录以下内容后重试失败:
- 断路器记录:断开电路 10000 毫秒!
如果我使用标准Exception
类型,它工作正常。即使断路器打开,重试也会触发:
amazon-web-services - 使用 SQS 回退 DynamoDB
我们有一个同步 REST 端点,除了将项目保存到 DynamoDB 数据库之外,它还会进行其他处理,以供以后使用。
如果由于任何类型的异常导致数据库保存失败,则要求不出错。
我们如何处理整个区域中 dynamo db 出现故障的情况(罕见但可能)。发布到 SQS 并通过 ping 它(ListTables 或 ping)有一个单独的进程消耗并保存到 DynamoDB 是正确的模式吗?
我们应该退回到另一个区域还是发布到 SQS?是否值得使用resilience4j断路器模式?
amazon-s3 - 我们应该处理 lambda 容器崩溃吗?
阅读了很多关于 AWS Lambda 的错误处理的内容,但没有任何内容涉及正在运行的 Lambda 容器刚刚崩溃的主题。
这是一种可能性,因为它看起来像吗?我正在使用 Lambdas 构建一个事件驱动的系统,由文件上传到 S3 触发,我不确定如果 lambda 已经死亡,我是否应该在逻辑中构建拾取处理。
例如,在 S3 上创建文件对象 -> S3 通知 Lambda 事件 -> Lambda 实例在它可以开始处理之前发生崩溃 -> 事件现在永远消失了*(假设这里,我不确定这是否是真的,但可以'找不到任何相反的说法)。
我正在讨论构建逻辑以协调 S3 上的内容和每天处理的内容,以便我可以检测到 Lambda 死亡(死亡并且无法向 DLQ 写入故障)的(尽管很少见)场景,我们需要处理这些文件。这值得吗?S3 会以某种方式知道 lambda 已死并且需要将事件放在它自己的 DLQ 上吗?
c# - C# Polly 带回退的轮换策略
我正在使用 Flurl 创建多个 HTTP 客户端,每个客户端调用不同的端点,每个客户端的响应返回一个通用数据模型。我想创建一个 polly 政策:
- 每个请求在每个 HTTP 客户端之间轮换以分配负载
- 如果特定 HTTP 客户端失败太多次,则触发断路器并将其从轮换中删除,发送带有错误的松弛消息
- 其余的 HTTP 客户端继续轮换请求。
我正在使用 .net core 和服务容器来设置策略注册表,我很好奇这会是什么样子?我没有看到任何与轮换政策相关的内容。
c# - 从 Polly 基础知识开始
我对 Polly 很陌生,我试图从最基础的开始了解它是如何工作的。
为了测试重试次数,我尝试创建一个有 33% 的代码(打印)以生成 DivideByZeroException。生成错误时,它会上升到 policy.Execute 似乎不由 Polly 管理。
有人可以帮我调整这段代码吗?我正在使用 .Net Framework 4.7.2。
c# - 如何在 EF Core 中具有范围 Dbcontext 时实现数据库弹性?
根据 CQRS 模式,我有一个简单的命令,如下所示:
_context.SaveChanges()
现在我有一个要求,如果它因异常而失败,则最多尝试5 次。为此,我可以简单地在方法中有一个 for 循环:
要求是将方法作为一个单元执行。问题是,一旦_context.SaveChanges()
抛出异常,_context
就不能用同样的方法重新尝试逻辑。文档说:
丢弃当前的 DbContext。创建一个新的 DbContext 并从数据库中恢复应用程序的状态。通知用户上一个操作可能没有成功完成。
但是,在 中Startup.cs
,我有AppDbContext
as 范围的依赖项。为了重新尝试方法逻辑,我需要一个新的实例,AppDbContext
但被注册为作用域将不允许这样做。
我想到的一种解决方案是制作AppDbContext
瞬态。但我有一种感觉,通过这样做,我将为自己打开一整套新问题。有人可以帮我吗?