Python 扭曲:在反应堆过载的情况下优雅地降低性能?

Python 扭曲:在反应堆过载的情况下优雅地降低性能?,python,performance,twisted,Python,Performance,Twisted,是否有可能“检测”反应堆过载并开始断开连接,或拒绝新的连接?我们如何才能避免反应堆完全过载,无法赶上进度?如果我正确理解扭曲反应堆,它们不会将所有东西并行化。任何排队的操作都会被安排,并一个接一个地完成 一种解决方法是使用一个自定义的addCallback,它检查已经注册了多少回调,并在必要时删除。这不是一个简单的方法,但这里有一些建议:我会根据协议来处理这个问题。在实际服务需要时节流,而不是在您认为需要时节流。与其担心有多少回调等待反应器滴答声,不如担心HTTP请求(例如)需要多长时间才能完成

是否有可能“检测”反应堆过载并开始断开连接,或拒绝新的连接?我们如何才能避免反应堆完全过载,无法赶上进度?

如果我正确理解扭曲反应堆,它们不会将所有东西并行化。任何排队的操作都会被安排,并一个接一个地完成


一种解决方法是使用一个自定义的
addCallback
,它检查已经注册了多少回调,并在必要时删除。

这不是一个简单的方法,但这里有一些建议:

我会根据协议来处理这个问题。在实际服务需要时节流,而不是在您认为需要时节流。与其担心有多少回调等待反应器滴答声,不如担心HTTP请求(例如)需要多长时间才能完成。等待反应器的操作的数量可能是一个实现细节——例如,如果一个访问模式最终在长延迟列表上出现回调,而另一个访问模式具有更线性的回调链,那么响应时间可能不会有什么不同,即使回调的数量可能会增加


这可以通过保持完成逻辑操作(例如为HTTP请求提供服务)的时间度量来实现。这样做的一个优点是,它可以在问题发生之前为您提供重要信息。

是的,我过去做过的一种方法是检查响应时间(例如http请求),并在响应时间增加太多时删除新连接。但这并不完美,因为在我们检测到它的时候,可能已经有数千个延迟堆积起来,所有这些延迟都必须处理,从而进一步降低了反应器的速度。当然,如果您想优雅地降低服务质量,请明智地处理它,并在服务器无法响应之前完成。我的意见是,等待回调的数量不是您想要监视的,我会首先监视其他资源(SQL查询时间、内存、负载、磁盘?),但我仍然会优先考虑请求时间。Twisted应该可以在您的请求耗时过长时轻松有效地拒绝—只需跟踪未完成请求的数量及其开始时间。或者,在代理中执行此操作,这样您就不必担心服务器没有响应。