Возможно ли использовать 1С для обработки 100 миллионов документов в сутки и как спроектировать такую систему?

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

При проектировании систем экстремального масштаба (порядка 1000 организаций, 100 000 счетов ежедневно по каждой) разработчики неизбежно сталкиваются с вопросом: выдержит ли платформа 1С:Предприятие такие нагрузки? Если произвести математический расчет, мы увидим, что 100 миллионов документов в сутки требуют регистрации примерно 1157 документов в секунду (при условии работы 24/7). Это серьезный вызов для любой СУБД и прикладного решения. Разберем детально, как реализовать такую задачу и какие архитектурные подходы использовать.

Анализ нагрузки и выбор архитектурной стратегии

Рассмотрим ситуацию объективно: ни одна типовая конфигурация (ERP, УХ или Бухгалтерия) «из коробки» не справится с подобным потоком данных. Основная проблема заключается в блокировках таблиц СУБД, механизмах автонумерации и избыточности метаданных. Чтобы система взлетела, нам необходимо применить принципы горизонтального масштабирования и разделения ответственности.

Проанализируем основные подходы к архитектуре:

  1. Технология 1С:Fresh (Multi-tenancy): Вместо одной гигантской базы данных мы используем разделение. Каждая организация (или группа организаций) работает в своем независимом хранилище. Платформа 1С позволяет управлять такими инстансами централизованно.
  2. Шардинг и распределенные базы: Разберем вариант создания 1000 независимых информационных баз, объединенных через РИБ (Распределенные информационные базы) только на уровне НСИ (нормативно-справочной информации). Оперативные данные (счета и платежи) хранятся в узлах, а в центральный узел передаются только консолидированные агрегаты.
  3. Разделение на «Загрузочную» и «Аналитическую» базы: Посмотрим на опыт крупных внедрений, где одна база работает исключительно на прием данных (минимальные индексы, отсутствие сложных движений), а вторая — на построение отчетов, куда данные перетекают асинхронно.

Оптимизация метаданных и кода для Highload

Выясним причину замедления системы при записи документов. Стандартный объект Документ в 1С обладает большим количеством «накладных расходов». Чтобы обеспечить скорость 1000+ документов в секунду, нам придется пойти на радикальные меры по оптимизации метаданных:

1. Отказ от типовых механизмов нумерации. Стандартный механизм нумерации при записи объекта создает исключительную блокировку на таблицу IrrelevantNumbers. При параллельной работе сотен сеансов это создаст «бутылочное горлышко». Мы должны отключить автонумерацию и контроль уникальности, либо генерировать номера на стороне внешней системы.

2. Минимизация реквизитного состава. Каждый реквизит, помеченный как «Индексировать», замедляет вставку записи. Проанализируем структуру документа: необходимо оставить только жизненно важные поля. Весь дополнительный контент лучше упаковывать в одну строку JSON или ХранилищеЗначений, если по ним не требуется поиск в СУБД.

3. Технология пакетной загрузки через буфер. Рассмотрим эффективный алгоритм записи данных, который позволяет избежать блокировок:

  1. Данные из внешних систем (банки, API) поступают в систему и записываются в «легкую» таблицу (например, РегистрСведений или упрощенный Справочник-буфер) в несколько потоков.
  2. Регламентное задание считывает накопленные данные порциями по 1000–5000 записей.
  3. Запись в основные таблицы документов производится пакетно в рамках одной транзакции, что значительно снижает нагрузку на лог транзакций SQL-сервера.

Пример структуры асинхронной обработки данных:


// Пример упрощенной записи данных в буферную таблицу
Процедура ЗагрузитьПакетДанных(СтруктураДанных)
    НоваяЗапись = РегистрыСведений.БуферВходящихСчетов.СоздатьМенеджерЗаписи();
    НоваяЗапись.ID_Внешний = СтруктураДанных.Идентификатор;
    НоваяЗапись.ДанныеJSON = СтруктураДанных.ТекстJSON; // Содержит все реквизиты счета
    НоваяЗапись.ДатаПоступления = ТекущаяДатаСеанса();
    НоваяЗапись.Записать();
КонецПроцедуры

Проектирование проведения и работы с регистрами

Традиционное проведение документа с контролем остатков на таких объемах невозможно. Разберем, как реализовать учет движений:

Использование оборотных регистров: Вместо регистров остатков, которые требуют блокировок для расчета текущего значения, следует использовать исключительно регистры накопления с видом «Обороты». Это позволит СУБД выполнять вставку записей параллельно без ожидания освобождения ресурсов другими транзакциями.

Отложенное проведение: Запись документа и создание движений должны быть разнесены во времени. Сначала мы подтверждаем факт регистрации документа (HTTP 200 OK для внешней системы), а затем фоновые процессы в 1С формируют движения по регистрам в моменты минимальной активности или параллельными потоками по разным организациям.

Проанализируем пример распараллеливания через фоновые задания:


// Логика распределения задач по потокам
Процедура РаспределитьОбработкуПоПотокам()
    ВыборкаОрганизаций = Справочники.Организации.Выбрать();
    Пока ВыборкаОрганизаций.Следующий() Цикл
        ПараметрыЗапуска = Новый Массив;
        ПараметрыЗапуска.Добавить(ВыборкаОрганизаций.Ссылка);
        ФоновыеЗадания.Выполнить("МодульОбработки.ПровестиДокументыПоОрганизации", ПараметрыЗапуска);
    КонецЦикла;
КонецПроцедуры

Требования к инфраструктуре и СУБД

Работа с 100 млн документов в день требует «железа» уровня Tier-1. Обычные серверы здесь не справятся. Рассмотрим ключевые требования:

Заключение: стоит ли выбирать 1С?

Подводя итог, можно сказать: 1С:Предприятие 8.3 — это мощная платформа, способная переварить такие объемы, но только при условии полного отказа от типовых подходов. Это должна быть «самописка», спроектированная экспертами по производительности (1С:Эксперт по технологическим вопросам). Если бюджет позволяет нанять команду высококвалифицированных разработчиков и закупить топовое серверное оборудование, 1С обеспечит гибкость бизнес-логики, недостижимую на «чистом» SQL или других платформах. Однако, если задача сводится только к простой регистрации логов, стоит рассмотреть NoSQL решения или специализированные банковские платформы.

← На главную