Более интерактивная упаковка ZODB - PullRequest
5 голосов
/ 02 марта 2011

Текущие функциональные возможности управления пакетом данных ZMI немного грубы.

1) Возможно ли иметь какой-то индикатор прогресса для веб-интерфейса? Например. один рассказывает, сколько минут / часов осталось, и дает хотя бы какую-то оценку

2) Как упаковка ZODB влияет на отзывчивость сайта? Все транзакции заблокированы?

3) Любые сценарии командной строки с индикатором прогресса доступны, чтобы вы могли сделать это из клиента командной строки ZEO?

4) По крайней мере, какие-то маркеры журнала для выхода из системы ... [INFO] 30% готово ... 3:15 до конца

Ответы [ 4 ]

7 голосов
/ 06 марта 2011

Анатомия упаковки

Упаковка ZODB FileStorage - это процесс выборочного копирования данных из одного файла в другой (только транзакции, которые «моложе» указанного возраста).Перед началом копирования в память встроена некоторая программная часть индекса.Таким образом, вся упаковка ZODB содержит следующие шаги:

  1. Индекс пакета сборки
  2. Копирование транзакций во временный файл
  3. Добавление транзакций, которые были выполнены после начала упаковки
  4. Замена исходного FileStorage упакованным и повторное его открытие в режиме чтения / записи

Обычно я наблюдаю за процессом с помощью комбинации top, vmstat / dstat, watch ls -la var/filestorage.

Как уже упоминал Гейр, у вас может быть отдельный ZEO-клиент, посвященный упаковке.Это было разумно, так как вы вызывали упаковку из заблокированного до завершения упаковки.Теперь нет необходимости, если вы используете ZEO.ZEO-сервер предоставляет утилиту zeopack, которая подключается напрямую к ZEO (нет необходимости в выделенном клиенте ZEO) и инициирует упаковку FileStorage.Одним из преимуществ является отсутствие необходимости в пароле, только правильные разрешения для доступа к сокету управления ZEO.

Процесс упаковки

Поскольку упаковка выполняется сервером ZEO (даже не сервером, а самим FileStorage), возможностьправильное сообщение о прогрессе клиенту ZEO ограничено.Протокол ZEO не был предназначен для передачи информации такого типа.

IMHO FileStorage сам по себе может быть более многословным при передаче через файл журнала того, что он делает прямо сейчас.Может быть встроен какой-то прогресс. И если вы чувствуете, что вам нужен индикатор прогресса, то вы можете создать какой-то канал обратной связи через модуль регистрации обратно в ZEO-клиент / Zope-экземпляр, чтобы передать его обратно в браузер.

Производительность при упаковке

Поскольку упаковка FileStorage является довольно интенсивной работой с диском, она снижает пропускную способность дисковой подсистемы.Кроме того, он удаляет дисковый кэш (в случае большего FileStorage), который влияет на производительность диска даже после завершения упаковки, так как кэши должны быть снова разогреты.Возможные улучшения, которые приводят к увеличению времени упаковки, но меньшему влиянию на систему в FileStorage:

  • возврат к O_DIRECT операциям (не трогать файловый кеш)
  • уменьшение приоритета планирования диска (ionice в Linux) для потока, выполняющего упаковку
  • скорость дросселирования упаковки
3 голосов
/ 03 марта 2011

Рекомендуемый способ упаковки для больших сайтов - запускать его на отдельном экземпляре ZEO, предназначенном для таких задач, а это вовсе не прослушивание http-запросов.

Это также устранит необходимость в любом из запрошенных умений.

2 голосов
/ 03 марта 2011

1) Нет такого индикатора, и, возможно, его будет сложно реализовать (я бы хотел, чтобы хотя бы какой-нибудь индикатор прогресса прошел через систему регистрации Zope)

2) не блокируется, а зависит отНа этапе упаковки вы можете увидеть высокую загрузку ввода-вывода и использование процессора

3) нет

4) нет

2 голосов
/ 03 марта 2011

Это не вопрос, а запрос функции.Он должен быть либо введен в http://plone.uservoice.com/, либо даже лучше в https://bugs.launchpad.net/zope2, поскольку ZMI является специфической функцией Zope 2.

...