Я работаю над приложением, в котором мне может потребоваться зарегистрировать весь трафик, достигающий сервера. Эта функция может быть включена или выключена, или может использоваться, когда исключены исключения.Вход в асинхронный сервер Tornado (python)
В любом случае, меня беспокоит проблема блокировки операций ввода-вывода на диске и их влияние на производительность сервера. Бизнес-логика, применяемая при обработке запроса (в основном, HTTP-запросы POST), является асинхронной, так что каждый вызов сети или db выполняется асинхронно.
С другой стороны, меня беспокоит задержка в потоке, пока она ждет завершения операции ввода-вывода диска. Зарегистрированные сообщения могут быть от нескольких байтов до нескольких КБ, но в некоторых случаях несколько МБ. Нет необходимости в том, чтобы поток приостанавливался, пока данные записываются на диск, HTTP-запрос может быть завершен в этот момент, и нет причин, по которым нить ioloop не будет работать с другой задачей, пока данные записываются на диск.
Так что мои вопросы:
- утра я слишком беспокоюсь по этому вопросу? записывается на стандартный вывод и позже перенаправляет его в файл «достаточно хорошо»?
- Каков общий подход или тот, который вы нашли наиболее практичным для регистрации в приложениях на основе торнадо? даже для простой регистрации, а не (крайний) случай, описанный выше?
- - это, по сути, идеальный случай для организации очередей сообщений журнала и их потребления из выделенного потока?
- Скажите, что я выгружаю ведение журнала в другую тему (например, «Не может кто-нибудь еще это сделать?»), Если поток, который выполняет регистрацию диска, ждет завершения операции с диском io, ли Linux Ядро воспринимает эту точку как возможность переключения контекста?
Любые комментарии или предложения очень ценятся,
Эрез
Спасибо, Бен. Это был тот ответ, который я искал. – ErezK