Для ограничения доступа к документам сервер Vivaldi выдает разрешенные к просмотру страницы в виде графических изображений, а не в виде PDF-документа целиком. Преобразование страниц документа в графическое изображение называется растеризацией, требует затрат процессорного времени и оперативной памяти и дает значительную нагрузку на сервер.
При множестве документов в хранилище, частом его обновлении и дополнении новыми экземплярами, а также при большом количестве одновременно работающих читателей падает производительность серверного ПО. Нагрузка на оборудование зависит от качества и валидности файлов, расположенных в хранилище. При обращении к документам, отсканированным с избыточным разрешением и/или сохраненным без включения дополнительной оптимизации (сжатие изображений), сервер испытывает избыточную нагрузку на процессор и оперативную память. Если одновременно работает много пользователей, то время отклика сервера увеличивается, вызывая дискомфорт. Для контроля состояния хранилища и своевременного обнаружения проблемных файлов было спроектировано и разработано специальное ПО в виде сервиса Windows.
При первом запуске сервис выполняет обход всех документов, находящихся в хранилище, и производит замеры времени растеризации каждой страницы, сохраняя полученные данные. Если время растеризации страницы превышает заранее заданный порог, документ признается проблемным, и в локальную базу заносится соответствующая запись.
При повторном запуске сервис повторно обходит все хранилище на предмет изменений, произошедших со времени остановки сервиса. Документы, замеры по которым были произведены ранее, исключается из повторной обработки, если дата модификации документа раньше даты выполнения предыдущих замеров.
Сервис в рабочем состоянии постоянно мониторит хранилище на предмет изменения и добавления новых документов и при обнаружении обрабатывает добавленные или измененные экземпляры.
Сервис сохраняет статистическую информацию:
- общее количество документов в хранилище;
- общее количество проблемных документов;
- количество обработанных и проблемных документов, обнаруженных с момента последней отправки отчета;
- список всех проблемных документов в хранилище с указанием количества и номеров проблемных страниц.
Отправка статистики производится по заданному в настройках расписанию.
Сервис проектировался и разрабатывался с учетом возможности работы с большим объемом данных. Для увеличения скорости обработки документов сервис создавался как многопоточное приложение с контролем максимальной нагрузки, оказываемой на сервер.
Для точных замеров времени растеризации страниц оказалось недостаточным использовать стандартные средства языка программирования, и было найдено решение — использование системных функций WinAPI для замеров времени выполнения кода.
Корректность работы и отказоустойчивость проверялись на хранилище, содержащем 600 000 документов. Время растеризации одной страницы колеблется от нескольких десятков миллисекунд до нескольких десятков секунд.