问题标签 [exponential-backoff]
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.
python - 为python api客户端内置指数退避?
我注意到在http.py中很多方法都支持 num_retries,我认为这是指数退避的一种实现(以防 API 返回错误)。每次调用 .execute() 方法时都想使用它而不是编写自己的退避算法。但是,它似乎不适用于此代码。有人对以可重用的方式处理此退避有一个方便的想法吗?
回溯(最近一次通话最后):文件“”,第 1 行,文件“/Users/mryerse001/Documents/GitHub/updateEmail_to_OU_Mappings/main.py”,第 122 行,get_pubsub_messages 成功 = get_ou(email) 文件“/Users/ mryerse001/Documents/GitHub/updateEmail_to_OU_Mappings/main.py”,第 87 行,在 get_ou num_retries=5 文件“/Users/mryerse001/Documents/GitHub/updateEmail_to_OU_Mappings/venv/lib/python3.7/site-packages/googleapiclient/discovery. py",第 717 行,在方法 raise TypeError('Got an unexpected keyword argument "%s"' % name) TypeError: Got an unexpected keyword argument "num_retries"
amazon-dynamodb - 重试因 ProvisionedThroughputExceededException 而失败的请求时,标准 AmazonDynamoDBClient 是否使用指数回退?
我AmazonDynamoDBClient
使用以下方法创建了一个标准AmazonDynamoDBClientBuilder
:
在AmazonDynamoDBClient 的文档中,它提到:
ProvisionedThroughputExceededException
- 您的请求率太高。适用于 DynamoDB 的 AWS 开发工具包会自动重试收到此异常的请求。您的请求最终会成功,除非您的重试队列太大而无法完成。减少请求的频率并使用指数退避。
在重试由于ProvisionedThroughputExceededException
? 或者这是我需要手动配置的东西?
python-3.x - 装饰器 backoff.on_predicate 未按预期等待
我正在检查调用之间的恒定间隔,发现在这个无限循环中,连续调用之间的时间不是 5 秒,而是随机变化的,尽管小于 5 秒。不明白,为什么。
输出:
throttling - 为什么使用指数退避算法进行速率受限的系统节流?
我正在处理一个每分钟具有最大请求率的 CDN 系统(因为所有对象的大小都差不多,所以没有比特率限制)
坦率地说,我还不知道它是#/clock 分钟,还是计算的速率。
我有一个守护进程,可以按需下载线程中的项目(而不是独立工作者)。这是该系统的正确模型。
“他们”建议在达到限制时使用指数退避,但这对我来说没有任何意义。指数退避的主要用途是解决资源冲突问题。我想如果我有独立的工人,这可能是有道理的。
但是对于单个守护程序系统(再次,这里是正确的使用模型),为什么这比等待下一个时钟分钟或仅使用速率调节机制更好?
是否有一些 Knuth “第一次拟合等同于最佳拟合”的证据表明这是一个很好的机制?这当然是最容易实现的!
rabbitmq - 为延迟重试的指数退避配置 NServiceBus(使用 RabbitMQ 传输)
我正在尝试配置 NServiceBus 以实现延迟重试的指数退避方案。例如:
1) 在 2^0 分钟内第一次失败重试
2) 在 2^1 分钟内第二次失败重试
3) 在 2^2 分钟内第三次失败重试
我在 github 上发现了一个问题,似乎表明使用自定义可恢复性策略可以实现指数退避,但我无法从 Particular 的文档中确定如何实现这一点。
谁能指出我为 NServiceBus 设置自定义可恢复性策略的正确方向,该策略将为延迟重试启用指数退避?
java - RxJava retryWhen(指数退避)不起作用
所以我知道这已经被问过很多次了,但是我尝试了很多东西,但似乎没有任何效果。
让我们从这些博客/文章/代码开始:
- https://blog.danlew.net/2016/01/25/rxjavas-repeatwhen-and-retrywhen-explained/
- https://jimbaca.com/rxjava-retrywhen/
- http://blog.inching.org/RxJava/2016-12-12-rx-java-error-handling.html
- https://pamartinezandres.com/rxjava-2-exponential-backoff-retry-only-when-internet-is-available-5a46188ab175
- https://gist.github.com/wotomas/35006d156a16345349a2e4c8e159e122
还有许多其他人。
简而言之,它们都描述了如何使用 retryWhen 来实现指数退避。像这样的东西:
甚至库中的文档也同意它: https ://github.com/ReactiveX/RxJava/blob/3.x/src/main/java/io/reactivex/rxjava3/core/Observable.java#L11919 。
但是,我已经尝试过这个和一些非常相似的变体,不值得在这里描述,而且似乎没有任何效果。有一种方法可以使示例起作用并且正在使用阻塞订阅者,但我想避免阻塞线程。
因此,如果对前一个 observable 应用一个阻塞订阅者,如下所示:
它按预期工作。但因为那不是想法。如果我们尝试:
流程只运行一次,因此不是我想要实现的。
这是否意味着它不能像我尝试的那样使用?从文档来看,尝试完成我的要求似乎不是问题。
知道我错过了什么吗?
TIA。
编辑:我有两种测试方法:
一种测试方法(使用testng):
来自 Kafka 消费者(使用 Spring Boot):
这只是对观察者的订阅,但重试逻辑是我在帖子前面描述的。
java - 在 couchbase 上发生服务器故障时更新 CAS 值
我正在尝试在我的应用程序中处理一些 couchbase 异常。upsert 方法可以抛出一个TemporaryFailureException指示服务器端的临时故障。是否存在文档的 CAS 值会被更新的情况?如果发生此异常,我将使用指数退避重试固定次数。如果 CAS 值已更新,那么在下次重试时,我需要确保下一次传递更新后的 CAS 值,否则我将收到 CASMismatchException。
那么是否可以保证在服务器端出现故障时不会更新 CAS 值?
go - 使用 goroutine 处理退避
一个程序使用 N 个并发工作人员作为从通道消费数据的 goroutine 将数据发送到 API(生产者/消费者模式)。API 表示它无法使用 HTTP 状态代码处理更多,并要求退避。
- 在退避间隔过去之前,如何阻止所有工作人员?
- 我把那些重试失败的请求放在哪里?
非常感谢任何指向这个可能已经解决的问题的链接/指针!
java - 发送 FCM 通知时自定义/停止退避/重试选项。
由于通知失败的默认退避/重试,我的线程保持阻塞的时间更长,这会影响我的应用程序的正流。我不希望重试或最小化它。用于创建 FirebaseApp 的逻辑是:
之后,我设置数据并向 FCM 服务器发送请求:
我读了一个建议,有人告诉我Retry-After
标题会对此有所帮助,我不确定在我的代码中添加到哪里。请建议我,提前谢谢。
go - Google Pub/Sub 的 RetryPolicy 中配置的指数退避如何工作?
该cloud.google.com/go/pubsub
库最近发布(在 v1.5.0 中,参见https://github.com/googleapis/google-cloud-go/releases/tag/pubsub%2Fv1.5.0)支持新的RetryPolicy
服务器端功能。当前的文档(https://godoc.org/cloud.google.com/go/pubsub#RetryPolicy)为
我读过维基百科的文章,虽然它描述了离散时间的指数退避,但我看不出这篇文章与MinimumBackoff
和MaximumBackoff
参数的具体关系。有关这方面的指导,我参考了github.com/cenkalti/backoff
https://pkg.go.dev/github.com/cenkalti/backoff/v4?tab=doc#ExponentialBackOff的文档。该库定义ExponentialBackoff
为
其中每个随机间隔计算为
RetryInterval
当前的重试间隔在哪里,据我所知,它从 的值开始并以InitialInterval
为上限MaxInterval
。
我是否正确理解MinimumBackoff
andMaximumBackoff
对应于InitialInterval
and MaxInterval
in github.com/cenkalti/backoff
?也就是说,MinimumBackoff
是初始等待时间,MaximumBackoff
是重试之间允许的最大时间量?
为了测试我的理论,我编写了以下简化程序:
如果我分别使用 flag-defaultMinimumBackoff
和MaximumBackoff
5s 和 60s 运行它,我会得到以下输出:
而如果我分别用 1s 和 2s 运行它MinimumBackoff
,MaximumBackoff
我得到
在后一个示例中,nack 之间的时间似乎非常一致~3s,这大概代表了在MaximumBackoff
2s 内完成它的“最大努力”?我仍然不清楚的是是否有任何随机化,是否有乘数(从第一个例子来看,重试之间的时间似乎不是每次都加倍),以及是否有等价的MaxElapsedTime
没有更多的重试?