Эффективное обновление прогресса работы в веб-приложении - PullRequest
1 голос
/ 18 мая 2010

Создание веб-приложения (в моем случае Django, но я думаю, что вопрос более общий), которое администрирует кластер работников, выполняющих задания в очереди, необходимо отслеживать ход выполнения каждого задания.

Когда я сделал это с использованием базы данных UPDATE (в данном случае PostgreSQL), это сильно повлияло на производительность базы данных, потому что каждый UPDATE создает новую строку в таблице, а в моем случае только очистка БД удаляет устаревшие строки. Выполнение 30 заданий и создание отчетов о ходе выполнения каждые 1 минуту БД может потребовать очистки (а это означает огромные замедления на стороне интерфейса для всех сотрудников, работающих с системой) каждые 10 дней.

Потому что информация о прогрессе не критична, т.е. оно не должно быть постоянным, как вы будете выполнять обновления выполнения заданий без использования дополнительной базы данных? Существует 30 рабочих серверов, каждый из которых выполняет 1 или 2 задания одновременно, 1 интерфейсный сервер, который обслуживает веб-приложение для пользователей, и 1 сервер базы данных.

Ответы [ 2 ]

1 голос
/ 01 июня 2010

Если вы выполняете вставку / обновление / получение на основе ключей (например, каждый раз, когда вы получаете доступ к строкам по идентификатору), вы можете использовать инфраструктуру кэширования Django с любым из серверных компонентов кэша, быть разделенным между серверами. Амвинтер предложил memcached. В дистрибутиве django есть серверная часть кэша memcached. Но memecached не гарантирует, что он не потеряет ваши данные. Например, вы можете пытаться хранить большие объемы данных, и memcached начнет терять ваши данные, когда достигнет определенного предела памяти. Так что имейте это в виду. Для memcached есть расширение, которое позволяет сохранять данные (забыл, как они назывались).

Вы также можете рассмотреть redis как бэкэнд кеша или MongoDB

1 голос
/ 18 мая 2010

Существует пакет под названием memcached , который устанавливает быстрый сервер для поиска значения ключа. Он используется большими кластерными сайтами, такими как Википедия.

Позволяет обмениваться часто изменяемыми данными по всему кластеру без дополнительной нагрузки на БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...