Twisted:反应器过载时如何优雅降级性能?

4 投票
3 回答
505 浏览
提问于 2025-04-16 02:25

有没有办法“检测”反应器是否过载,然后开始断开连接或者拒绝新的连接呢?我们怎么才能避免反应器完全过载,导致无法跟上处理速度呢?

3 个回答

1

如果我理解得没错,Twisted的反应器并不是把所有事情都并行处理。它会把排队的操作一个一个地安排好,然后逐个执行。

你可以考虑自己写一个 addCallback 方法,这个方法可以检查已经注册了多少个回调,如果需要的话就不再添加新的回调。

1

我会根据协议来处理这个问题。也就是说,只有在真正需要的时候才限制服务,而不是你觉得什么时候需要。与其担心有多少个回调在等待反应器的处理,不如关注一下HTTP请求(比如说)花了多长时间才能完成。等待反应器的操作数量可能只是实现上的细节——比如说,如果一种访问模式导致了很多长时间的DeferredLists回调,而另一种模式则是比较线性的回调链,那么响应时间可能并不会有太大差别,尽管回调的数量却不同。

可以通过记录完成一个逻辑操作(比如处理一个HTTP请求)的时间来实现这一点。这样做的好处是,它能在问题发生之前给你提供重要的信息。

1

没有简单的方法,但这里有一些建议:http://www.mail-archive.com/twisted-python@twistedmatrix.com/msg00389.html

撰写回答