Logger Entity в движке приложения - PullRequest
2 голосов
/ 01 сентября 2011

Является ли жизнеспособным наличие логгера в движке приложения для записи логов? У меня будет приложение с ~ 1500req / sec, и я собираюсь сделать это с помощью очереди задач. Всякий раз, когда я получаю запрос, я создаю задачу и помещаю ее в очередь для записи чего-либо в объект журнала (со свойствами даты и строки).

Мне это нужно, потому что мне нужно разместить на сайте статистику, которая, по моему мнению, сделает это таким образом, а чтение журналов с помощью бэкэнда позже решит проблему. Было бы здорово, если бы у меня был программный доступ к журналам движка приложения (из журналов), но, поскольку он недоступен, я не вижу другого способа сделать это ..

Обратная связь приветствуется

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

Есть несколько способов сделать это:

  1. Накопление журналов и запись их в одно хранилище данных, помещенное в конце запроса. Это опция с наибольшей задержкой, но только незначительно - операции с хранилищами данных выполняются довольно быстро. Это решение также потребляет наименьшее количество ресурсов из всех вариантов.
  2. Накапливайте журналы и ставьте в очередь задачу очереди задач, которая записывает их в хранилище данных (или выполняет с ними все, что вы хотите). Это немного быстрее (очереди задач обычно бывают быстрыми), но немного сложнее и ограничено 100 КБ данных (что, надеюсь, не должно быть ограничением).
  3. Поставьте в очередь задачу извлечения с данными, и у вас будет обычная задача выталкивания или серверная часть, использующая очередь и пакетно-вставленная в хранилище данных. Это сложнее, чем вариант 2, но также более эффективно.
  4. Запустите бэкэнд, который накапливает и записывает журналы, и выполняет URLFetch-вызовы к нему для хранения журналов. Обработчик urlfetch может записывать данные в память сервера и возвращать асинхронно, что делает его самым быстрым с точки зрения дополнительной задержки пользователя (менее 1 мс для вызова urlfetch)! Это потребует ожидания Python 2.7, так как вам потребуется многопоточность для асинхронной обработки записей журнала.

Возможно, вы также захотите взглянуть на API перспективного поиска, который может позволить вам выполнить некоторую фильтрацию и предварительную обработку данных журнала.

0 голосов
/ 07 сентября 2011

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

Затем вы можете запустить анализ больших изображений на основе совокупности статистических данных за 5-минутный интервал, которые могут быть более управляемыми, чем анализ часов с данными 1500req / s.

...