Содержание:
- Многопоточный конвейер
- Назначение
- Распараллеливание вычислений
- Асинхронная обработка данных
- Внутренние очереди в 1С
- Почему МТР
- Проверенное решение
- Как начать
Многопоточный конвейер (MTP / Multi-threaded pipeline)
За годы работы в 1С мне посчастливилось принять участие в проектировании и запуске в эксплуатацию нескольких высоконагруженных систем. На каждом из проектов внедрения приходилось решать схожие задачи по разработке удобных инструментов для упрощения процесса разработки и повышения производительности 1С.
Мы активно использовали фоновые задания, но сталкивались с одной и той же рутиной: нужно следить за потоками, их ошибками и зависаниями, писать систему логирования. Решать, как перезапустить выполнение большой задачи, если процесс прервался на середине и часть данных уже обработана.
Для решения этих задач был разработан Многопоточный конвейер (MTP / Multi-threaded pipeline) - встраиваемый фреймворк, который берет на себя всю работу по управлению многопоточной и асинхронной обработкой внутри 1С.
Назначение
Многопоточный конвейер предназначен для решения трех фундаментальных задач:
- Параллельные вычисления.
Увеличение производительности высоконагруженных систем за счет отказоустойчивой многопоточной обработки данных. - Асинхронная обработка.
Механика отложенного фонового исполнения заданий, повышение скорости работы интерфейса пользователя. - Внутренние очереди в 1С.
Реализация в 1С классической концепции Internal Message Queue. Стабилизация нагрузки на систему.
Распараллеливание вычислений
Многопоточный конвейер используется для решения тяжелых ресурсоемких задач, которые можно разбить на изолированные порции. Каждая порция может быть обработана независимо во множество параллельных потоков.
📌 Кейс
Выполнить ресурсоемкую операцию над тысячами объектов.
🛠 Стандартный подход
Обработать объекты в цикле. Решение задачи в один поток занимает часы. При возникновении ошибки на середине процесса приходится начинать всё сначала или писать сложную логику продолжения.
🔥 Решение c MTP
Создание в цикле задания на многопоточную обработку. Каждое такое задание - это Пакет данных. Многопоточный конвейер обработает созданные Пакеты данных множеством параллельных фоновых заданий.
👍 Результат
- Производительность: кратное сокращение времени обработки.
- Отказоустойчивость: авто-контроль работы фоновых заданий, повторная обработка.
- Изоляция ошибок: ошибка обработки одного Пакета данных не влияет на остальные.
- Легко продолжить после ошибки: вы исправляете код обработчика и перезапускаете только те пакеты, которые завершились со статусом «Ошибка».
Асинхронная обработка данных
Многопоточный конвейер используется для решения задач асинхронного запуска фоновых процессов обработки данных при наступлении определенных событий.
📌 Кейс
Пользователь записывает документ, после чего должна выполниться тяжелая операция (обновиться итоговая таблица или вызваться внешний API).
🛠 Стандартный подход**
После записи документа выполнить действие в сеансе пользователя. Синхронное выполнение блокирует интерфейс (вызывает его зависание). При одновременной работе нескольких пользователей возникают ошибки взаимоблокировки.
🔥 Решение c MTP
При записи документа создаем задание на асинхронную обработку - Пакет данных. Создание пакета - легкая процедура, не вызывающая взаимоблокировок или подвисаний интерфейса. Созданные пакеты обрабатываются многопоточным конвейером в фоне.
👍 Результат
- Комфорт пользователя: пользователь продолжает работу мгновенно, не получает сообщений об ошибках.
- Обход ошибок: механика повторной обработки пакетов штатно решает проблемы взаимоблокировок, недоступности сторонних сервисов.
- Надежность: Пакеты данных будут гарантированно обработаны во множество потоков, даже если возникнет аварийная ситуация на СУБД или кластере 1С.
Внутренние очереди в 1С
Многопоточный конвейер реализует классическую механику внутренних очередей (Internal Message Queue), широко используемую при создании модулей на других языках программирования.
В высоконагруженных системах частой задачей является стабилизация нагрузки на систему. Необходимо, чтобы определенная механика не заняла всю вычислительную мощность связки кластер 1С / СУБД, так как это может привести всю систему в неработоспособное состояние. Необходимо уметь сглаживать пиковые нагрузки.
Наиболее распространённые примеры стабилизации "рваной" нагрузки на 1С при помощи многопоточного конвейера:
- Экранирование запросов по API
- Работа с брокерами сообщений RabbitMQ/Kafka
Экранирования запросов по API
📌 Кейс
В 1С опубликована API для получения данных по запросу. Есть сторонний модуль, который может вызывать это API с различной частотой.
🛠 Стандартный подход
Формирование ответа на запрос и его отправка в момент обращения к API.
😞 Почему стандартное решение не подходит
Синхронная обработка 5-10 одновременных запросов вполне приемлемый вариант. Однако когда сторонний модуль одновременно совершает 1000 запросов приводит к зависанию 1С. По сути база данных не управляет своей загрузкой. Сторонний модуль определяет на сколько загрузить 1С своими запросами. При этом он не обладает информацией о приемлемом режиме работы 1С.
👍 Решение c MTP
При получении запроса создавать задание на отправку результата - Пакет данных. В Способе обработки пакетов мы фиксируем, что обработка должна идти не более чем в 5 потоков. Такой подход стабилизирует систему:
- Быстрый прием.
Создание пакета - легкая операция, которая не вызовет критической нагрузки на 1С, даже при высокой частоте запросов. - Лимитирование нагрузки.
Сколько бы не накопилось Пакетов в состоянии "К обработке", их обработка будет идти не более чем в 5 потоков. Система отработает все задания в том темпе, в котором она может это делать без ущерба для смежных процессов.
Работа с брокерами сообщений RabbitMQ/Kafka
📌 Кейс
1C получает данные по шине. Публикация объектов для 1С производится с различной частотой.
🛠 Стандартный подход
Сериализация объектов при чтении JSON объектов с шины данных.
😞 Почему стандартное решение не подходит
Массовая публикация объектов может привести 1С или брокер сообщений в неработоспособное состояние:
- Быстрая вычитка сообщений с шины приведет к неработоспособности 1С, т.к. она не справится загрузкой сериализации.
- Ограничение скорости чтения с шины под производительность 1С приведет к накоплению в очереди большого объема данных, а это в свою очередь приведет к деградации брокер сообщений.
👍 Решение MTP
При чтении входящих сообщений c шины, полученные объекты сериализовать не сразу, а складывать в Пакеты данных (данные пакетов - JSON объекта с шины). Непосредственную сериализацию производить при обработке Пакетов данных в предсказуемом темпе.
- Быстрое чтение шины.
Вычитка данных с шины происходит очень быстро, так как она лимитирована только скоростью записи Пакетов данных. Быстрое вычитывание очереди с бокера сообщений позволяет снизить нагрузку на сам брокер. Зачастую брокер сообщений - это InMemory база данных, а значит скорость чтения косвенно уменьшает объемы потребляемой брокером оперативной памяти. - Удобство отладки.
Такой подход предоставляет максимальный комфорт отладки обменов. Ошибка сериализации одного объекта не тормозит весь процесс. Пакет данных в состоянии "Ошибка" легко можно повторно обработать, после исправления кода обработчика пакетов.
Почему MTP
👍 Производительность
Полная утилизация ресурсов кластера 1С и СУБД. Кратный рост производительности за счет параллелизма выполнения операций.
👍 Надежность
Автоматический контроль работы фоновых заданий. Механика повторной обработки Пакетов данных при ошибках блокировки или аварийных ситуациях на сервере 1С.
👍 Удобство
Настройка многопоточной обработки в интерфейсе. Автоматическое логирование процесса обработки данных. Инструменты для групповой обработки произвольных данных.
👍 Простота внедрения
Распространяется в виде комплекта поставки с поддержкой поставщика. Вам не нужно менять структуру вашей базы — MTP встраивается как подсистема в любую базу данных 1С без необходимости её доработки.
Проверенное решение
Многопоточный конвейер используется на большом количестве крупнейших предприятий России в различных отраслях (ритейл, электроэнергетика, логистика).
![]() |
В компании СДЭК многопоточный конвейер - это ключевой инструмент. Он встроен во все базы данных на платформе 1С (~20 штук). Его использование - это внутренний стандарт разработки. |
На базе MTP в СДЭК реализованы различные механики, переведенные в многопоточный режим:
- Сериализация объектов, полученных с шины данных RabbitMQ (реализация внутренних очередей в 1С).
- Восстановление последовательностей взаиморасчетов (в регламентированном и управленческом учетах).
- Обмены между системами 1С с использованием КД2.
- Многопоточная трансляция данных оперативного/регламентированного учета в управленческий учет и МСФО.
Широчайшее применение многопоточный конвейер получил при реализации сложной бизнес-логики:
- Формирование актов и отправка их клиентам (на почту, в ЭДО).
- Процедуры закрытия периодов расчетов в оперативном и регламентированном учете.
- Взаимодействия с внешними сервисами.
На базе многопоточного конвейера построены две биллинговые платформы СДЭК, обрабатывающие колоссальные объемы данных. Об этом я подробнее рассказывал в докладе на INFOSTART TEAM EVENT 2026.
С чего начать
Конфигурация имеет открытый исходный код и распространяется бесплатно по лицензии MIT. Исходный код конфигурации опубликован на GitHub.
📌 Документация: все подробности настройки, описание интерфейса и примеры кода доступны в Wiki проекта на GitHub.
📌 Релизы: готовый дистрибутив можно скачать в разделе Releases.
📌 Обратная связь: если вы нашли баг или хотите предложить улучшение — заводите задачу на GitHub.
Вступайте в нашу телеграмм-группу Инфостарт
