В процессе разработки и эксплуатации систем на платформе 1С:Предприятие часто возникает потребность в оперативной обработке данных. Иногда разработчики пытаются решить эту задачу «в лоб», устанавливая расписание регламентного задания с интервалом в 1 секунду. Однако на практике такая настройка либо не работает вовсе, либо приводит к серьезным проблемам с производительностью сервера. Рассмотрим подробнее, почему так происходит, и разберем правильные способы реализации высокочастотных задач.
Проанализируем сначала базовые механизмы платформы. Возможность установить интервал «1 секунда» в консоли регламентных заданий существует, так как интерфейс универсален, но внутренние механизмы исполнения имеют жесткие рамки. Выясним причину, по которой это не работает в разных режимах работы базы данных:
Если специфика вашей задачи (например, нагрузочное тестирование или мониторинг очереди) действительно требует ежесекундной активности, профессиональным решением будет создание одного фонового задания, которое работает постоянно. Разберем по шагам, как это реализовать.
Вместо настройки расписания мы запускаем один раз процедуру, внутри которой организуем цикл. Для того чтобы процесс не «съел» все процессорное время и давал серверу передышку, используем метод Приостановить() (доступен в новых версиях платформы).
Посмотрим на пример реализации такой процедуры:
Процедура ВыполнятьПостоянно() Экспорт
Пока Истина Цикл
// Проверяем флаг остановки, чтобы можно было завершить процесс корректно
Если НужноОстановитьПроцесс() Тогда
Прервать;
КонецЕсли;
Попытка
// Выполняем полезную нагрузку (например, вызов сервиса интеграции)
ВыполнитьИнтеграцию();
Исключение
ЗаписьЖурналаРегистрации("ОшибкаЦикла", УровеньЖурналаРегистрации.Ошибка, , , КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
// Засыпаем на 1 секунду
Приостановить(1);
КонецЦикла;
КонецПроцедуры
Для управления таким заданием (остановки или запуска) рекомендуется использовать константу или запись в РегистрСведений. Функция НужноОстановитьПроцесс() будет просто считывать это значение. Это гораздо безопаснее и стабильнее, чем попытки ежесекундного перезапуска через планировщик.
Рассмотрим ситуацию, описанную автором темы: необходимость частого обращения к сервисам интеграции. Начиная с версии платформы 8.3.18, в 1С появился объект СервисыИнтеграции. Проанализируем, почему это лучше регламентных заданий.
Традиционная модель «опроса» (polling), когда 1С каждую секунду спрашивает внешнюю систему «есть ли данные?», крайне неэффективна. Сервисы интеграции работают по событийной модели через брокеры сообщений (например, RabbitMQ или MQTT). В этом случае:
Использование РегламентныеЗадания для «пинания» сервисов интеграции считается архитектурной ошибкой в современной разработке на 1С.
Если ваша цель — нагрузочное тестирование (как упоминалось в обсуждении), то лучше всего использовать внешние инструменты. Выясним причину: внутренний планировщик 1С предназначен для бизнес-задач, а не для имитации высоконагруженных потоков.
Рассмотрим вариант с использованием HTTP-сервисов. Вы можете опубликовать в 1С метод, который выполняет нужные действия, и вызвать его извне с помощью скрипта на Python или специализированного ПО типа JMeter. Внешний скрипт может посылать сотни запросов в секунду, обходя все внутренние ограничения планировщика 1С.
Пример простейшего вызова из внешнего скрипта позволит вам подать нагрузку именно в том объеме, который требуется для теста, не создавая при этом «зависших» фоновых заданий внутри самой платформы.
Проанализируем, к чему может привести игнорирование рекомендаций и настойчивая попытка запустить обычное регламентное задание слишком часто. Главная проблема — накопление сеансов.
Каждый запуск регламентного задания — это создание нового сеанса на сервере 1С. Если ваше задание по какой-то причине (блокировка, сетевая задержка, большой объем данных) не успело завершиться за 1 секунду, планировщик может запустить еще один экземпляр. Через несколько минут вы получите десятки спящих или конфликтующих сеансов. Это приведет к:
Выясним, какой метод выбрать в зависимости от задачи:
Помните, что платформа 1С спроектирована как учетная система, и использование механизмов РегламентныеЗадания для задач реального времени требует осторожности и глубокого понимания архитектуры сервера.