Оптимизация длительных процессов
<< Click to Display Table of Contents >> Разработка > Рекомендации по разработке для масштабируемых систем Оптимизация длительных процессов |
Некоторые запросы клиентского приложения, которые обрабатывает веб-сервер, могут быть длительными. Например, выдача прав доступа на документы большому количеству сотрудников и подразделений. Такие длительные запросы уменьшают скорость ответа веб-сервера и увеличивают время ожидания пользователя.
Чтобы оптимизировать длительные процессы и повысить скорость отклика системы, используйте:
Оба механизма позволяют вынести вычисления с веб-сервера на отдельный сервис асинхронных событий (Worker).
Кроме этого, рекомендуется объединять в транзакции логически связанные операции в вычислениях. Например, при возникновении ошибок в фоновом процессе транзакция позволяет откатить до исходного состояния все вычисления, которые выполняются в ней. Таким образом, ошибки в транзакции не влияют на выполнение всего фонового процесса.
Если выполнение операции не может быть передано сервису асинхронных событий, то на веб-сервере она по умолчанию прерывается через 5 минут. Если в программном коде нет обращения к базе данных, в веб-клиенте открыт диалог или модальное окно, то операция выполняется без тайм-аута.
ВАЖНО. Не рекомендуется отключать тайм-аут выполнения операции, так как вместе с этим в системе выключается защита от выполнения длительных запросов и неоптимального кода. Это может привести к ошибкам и потере работоспособности.
Также систему может нагружать массовое удаление документов и субъектов прав. Поэтому рекомендуется отказаться от массового удаления в рабочее время.
Предназначены для выполнения ресурсоемких операций, не требующих немедленного результата. Одновременно можно выполнить вычисления нескольких асинхронных обработчиков в несколько потоков (распараллеливание вычислений).
В Directum RX, например, асинхронный обработчик используется для автоматической выдачи прав доступа на документы.
Предназначены для периодического выполнения работ, которые запускаются по расписанию. Их можно настроить в среде разработки Directum RX или в веб-клиенте на обложке модуля «Администрирование». Фоновые процессы имеют историю выполнения, для этого в журнале записываются и хранятся все события фоновых процессов: запуск, отключение, выполнение, изменение расписания, ошибки в работе процессов и др.
В Directum RX, например, с помощью фонового процесса создается задача для заполнения календаря рабочего времени.
Для работы с данными рекомендуется использовать логически объединенные последовательные операции, которые обрабатываются или отменяются целиком (транзакции). Они обеспечивают целостность выполняемых операций в фоновых процессах и асинхронных обработчиках.
В транзакцию можно передавать данные только простых типов. Чтобы передать сущность, нужно использовать ее идентификатор:
var queueItemsIds = queueItems.Select(q => q.Id).ToList();
foreach (var message in messages)
{
Transactions.Execute(
() =>
{
var transactionQueueItems = ExchangeCore.MessageQueueItems.GetAll(q => queueItemsIds.Contains(q.Id)).ToList();
if (this.ProcessMessage(client, transactionQueueItems, message))
{
var queueItem = queueItems.Single(x => x.ExternalId == message.ServiceMessageId);
queueItem.ProcessingStatus = ExchangeCore.MessageQueueItem.ProcessingStatus.Processed;
queueItem.Save();
}
});
}
© Компания Directum, 2024 |