Витая: изящно ухудшить производительность в случае перегрузки реактора? - PullRequest
4 голосов
/ 06 августа 2010

Можно ли как-то "обнаружить", что реактор перегружен, и начать сбрасывать соединения, или отказаться от новых соединений? Как мы можем избежать того, что реактор будет полностью перегружен и не сможет его догнать?

Ответы [ 3 ]

1 голос
/ 08 августа 2010

Не простой способ, но вот несколько советов: http://www.mail-archive.com/twisted-python@twistedmatrix.com/msg00389.html

1 голос
/ 10 августа 2010

Я бы подошел к этому по протоколу. Дросселируйте, когда фактическое обслуживание требует этого, а не когда вы думаете, что это будет. Вместо того, чтобы беспокоиться о том, сколько обратных вызовов ожидает тик реактора, я бы беспокоился о том, сколько времени (например) HTTP-запросов занимает выполнение. Количество операций, ожидающих реактора, может быть деталью реализации - например, если один шаблон доступа заканчивался обратными вызовами на длинных списках DeferredLists, а другой имел более линейную цепочку обратных вызовов, время ответа может не отличаться, даже если количество обратных вызовов будет.

Это можно сделать, сохранив метрики времени для завершения логической операции (например, обслуживания HTTP-запроса). Преимущество этого заключается в том, что он дает вам важную информацию до того, как возникнет проблема.

1 голос
/ 08 августа 2010

Если я правильно понимаю витые реакторы, они не распараллеливают все.Какие бы операции не были поставлены в очередь, они запланированы и выполняются одна за другой.

Один выход для вас - иметь пользовательский addCallback, который проверяет, сколько уже было зарегистрировано обратных вызовов, и сбрасывает при необходимости.*

...