Способна ли платформа 1С:Предприятие работать с более чем 1000 пользователей через веб-клиент?

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

Каждый раз, когда перед архитектором или разработчиком высоконагруженных систем встает задача автоматизации крупного предприятия с числом одновременно работающих пользователей свыше 1000 человек, возникает закономерный вопрос: справится ли выбранная платформа? Ситуация усложняется, когда в качестве основного интерфейса планируется использовать веб-клиент 1С, а сама конфигурация является полностью самописной. В рамках данной статьи мы подробно разберем, какие технологические вызовы стоят перед такой системой, развеем популярные мифы о блокировках СУБД, детально рассмотрим вопросы лицензирования, а также дадим практические рекомендации по проектированию серверной инфраструктуры и оптимизации кода 1С.

Масштабируемость платформы 1С: реальные показатели производительности

Для начала разберем главный вопрос: способна ли в принципе платформа «1С:Предприятие 8.3» выдержать нагрузку в 1000–1500 одновременно работающих пользователей? Практика крупных внедрений и официальные нагрузочные тесты фирмы «1С» доказывают, что этот рубеж давно пройден.

Рассмотрим конкретные цифры. Современная платформа регулярно проходит корпоративные испытания на сверхнагрузки:

  1. При тестировании систем класса «1С:ERP» на платформе 8.3 под управлением СУБД PostgreSQL и операционной системы Linux была зафиксирована стабильная одновременная работа 12 000 пользователей в единой информационной базе. Индекс производительности APDEX при этом составил более 0,85, что классифицируется как отличный показатель скорости отклика.
  2. В ходе более поздних технологических тестов платформа успешно преодолела порог в 30 000 одновременно работающих пользователей на одном кластере серверов.

Таким образом, сама платформа обладает колоссальным запасом масштабируемости. Однако важно понимать, что при такой нагрузке на первый план выходит не поведение самой платформы «из коробки», а качество архитектуры вашего прикладного решения и глубина оптимизации кода. Если конфигурация написана без учета стандартов разработки высоконагруженных систем, база начнет зависать даже при 50 пользователях.

Мифы о блокировках СУБД: как происходит запись в высоконагруженных системах

Среди разработчиков, не имеющих опыта работы с высоконагруженными базами данных, бытует мнение, что при одновременной записи множества элементов в один справочник или документ СУБД (например, MS SQL Server) неминуемо заблокирует всю таблицу целиком. Выясним причину этого заблуждения и разберем реальные механизмы работы современных СУБД под управлением 1С.

Рассмотрим, почему при массовом создании новых записей (операция INSERT) в современных базах 1С табличные блокировки отсутствуют:

  1. Генерация UUID на сервере приложений: Платформа 1С генерирует уникальный идентификатор (GUID) новой записи на уровне сервера приложений 1С до отправки SQL-запроса в СУБД. Это принципиально отличается от систем, использующих автоинкрементные поля (типа IDENTITY в MS SQL), где СУБД вынуждена блокировать индекс для вычисления следующего порядкового номера.
  2. Режим управляемых блокировок: В современных конфигурациях используется исключительно режим управляемых блокировок. В этом режиме разработчик сам указывает платформе, какие именно диапазоны данных нужно заблокировать на время транзакции, избегая избыточных ожиданий.
  3. Технология RCSI (Read Committed Snapshot Isolation): При работе с MS SQL Server обязательным условием для высоконагруженных баз является включение режима изоляции транзакций с использованием версионирования строк. В этом режиме читающие транзакции никогда не блокируют пишущие, а пишущие — читающие. Наложение блокировок происходит точечно на уровне строк (Row-lock), а не таблиц.

Проанализируем ситуации, когда блокировка всей таблицы (Table Lock) все же может произойти:

Рассмотрим пример правильного наложения управляемой блокировки в коде 1С при записи критически важных данных:


Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.УстановитьЗначение("Организация", ВыбОрганизация);
Блокировка.Заблокировать();

Использование такого подхода гарантирует, что параллельные транзакции по другим организациям будут выполняться СУБД абсолютно независимо и одновременно.

Лицензирование и мультиплексирование: как не нарушить закон и сэкономить

При проектировании системы на 1000+ пользователей критически важным становится вопрос бюджета на лицензии 1С. Нередко возникает идея сэкономить: создать промежуточную базу или веб-сайт (например, на PHP/MySQL), через который пользователи будут вводить данные, а специальный робот под одной сессией будет переносить их в 1С. Разберем, почему такая схема является нарушением лицензионной политики.

Согласно официальному регламенту фирмы «1С», в отношении клиентских лицензий действует **правило мультиплексирования**. Оно гласит: использование технических средств (включая веб-серверы, серверы приложений, пулы соединений и СУБД), которые уменьшают количество пользователей, напрямую или косвенно обращающихся к данным 1С, не уменьшает потребность в лицензиях.

Рассмотрим две схемы интеграции с внешними системами:

  1. Прямой или квази-прямой доступ (Лицензии ТРЕБУЮТСЯ): Если пользователи работают в стороннем веб-интерфейсе, который отправляет HTTP/REST-запросы в 1С для получения или записи данных в режиме реального времени, то каждое такое рабочее место должно быть обеспечено отдельной клиентской лицензией 1С. Даже если физически к 1С подключен только один технический пользователь (робот), лицензировать нужно реальное количество людей на стороне веб-интерфейса.
  2. Изолированная синхронизация (Лицензии НЕ требуются): Если веб-сайт имеет собственную независимую базу данных, пользователи работают исключительно с ней, а обмен данными с 1С происходит пакетно в фоновом режиме по расписанию (например, выгрузка заказов раз в час), то лицензировать пользователей сайта не нужно. В этом случае лицензируется только один сеанс работы робота-обработчика.

Технологические особенности веб-клиента: ловушка "F5" и архитектура веб-серверов

Использование веб-клиента 1С в качестве основного рабочего интерфейса для 1500 пользователей накладывает жесткие требования к архитектуре публикации базы данных. Посмотрим, с какими неочевидными проблемами мы можем столкнуться при эксплуатации такой системы.

Первая серьезная проблема веб-клиента — это поведение пользователей в браузере. Если пользователь сталкивается с задержкой интерфейса, его первой реакцией будет нажатие клавиши обновления страницы (F5) или закрытие вкладки браузера. Разберем, к чему это приводит на сервере:

Для минимизации этого эффекта проанализируем настройки параметров кластера серверов 1С. В консоли администрирования кластера необходимо установить жесткие лимиты для спящих сеансов:

Вторая технологическая задача — это правильное построение веб-фермы. Никогда не публикуйте базу для 1000+ пользователей на одном стандартном веб-сервере Apache или IIS под управлением Windows. Рассмотрим рекомендуемую отказоустойчивую архитектуру публикации:

  1. Фронтенд (Nginx): На внешнем контуре устанавливается прокси-сервер Nginx. Он принимает все входящие HTTPS-соединения от пользователей, занимается терминированием SSL-трафика, сжатием данных и раздачей статических файлов веб-клиента (картинок, стилей CSS, JS-скриптов). Это разгружает внутренние серверы приложений.
  2. Балансировщик нагрузки (Load Balancer): Тот же Nginx распределяет динамические запросы между несколькими бэкенд веб-серверами по алгоритму Round Robin или IP Hash (чтобы запросы одного пользователя всегда уходили на один и тот же веб-сервер).
  3. Бэкенд веб-серверы (IIS или Apache): Пул из 2-3 независимых серверов (лучше всего развернутых на ОС Linux с Apache или IIS на Windows Server), которые занимаются исключительно трансляцией HTTP-запросов к рабочим процессам кластера серверов 1С (rhost).

Проектирование дисковой подсистемы: SSD, RAID и отказоустойчивость

Обсуждая аппаратные требования для 1000+ пользователей, особое внимание уделим дисковой подсистеме сервера СУБД. В исходном обсуждении упоминался выбор между RAID 0+1 и другими конфигурациями. Разберем этот вопрос с точки зрения надежности и производительности транзакционных баз данных (OLTP).

Для систем с интенсивной записью критически важна скорость работы дисков на случайные операции записи (IOPS). Использование обычных жестких дисков (HDD) полностью исключено. Нам понадобятся только твердотельные накопители класса Enterprise SSD (NVMe или SAS).

Рассмотрим особенности выбора RAID-массива под СУБД:

Важное примечание: При выборе SSD дисков для СУБД обращайте внимание на показатель износостойкости DWPD (Drive Writes Per Day) и наличие аппаратной защиты от потери питания (PLP - Power Loss Protection). Обычные пользовательские SSD быстро выйдут из строя из-за выработки ресурса ячеек памяти и могут потерять кэш данных при аварийном отключении электричества.

Практические рекомендации по оптимизации конфигурации

Чтобы самописная финансовая система стабильно работала при 1500 пользователях, рассмотрим базовые правила написания кода, которые необходимо внедрить на проекте с первого дня разработки:

1. Отказ от тяжелых запросов в транзакциях. Все расчеты должны производиться *до* начала транзакции записи. Транзакция должна быть максимально короткой: открыли, быстро записали подготовленный набор данных, закрыли.

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


ПараметрыЗапуска = Новый Массив;
ПараметрыЗапуска.Добавить(ПараметрыДокумента);
ФоновыеЗадания.Выполнить("МодульПроведения.ВыполнитьПроведениеВФоне", ПараметрыЗапуска);

Пользователь в веб-клиенте продолжает комфортно работать с интерфейсом, пока сервер выполняет тяжелые вычисления в фоновом потоке, а результат возвращается по мере готовности через механизм оповещений.

3. Использование разделения итогов для регистров накопления. Если 1000 пользователей одновременно записывают данные, которые обновляют итоги по одному и тому же регистру (например, "Денежные средства"), возникнет очередь ожиданий на блокировках итогов регистра. В свойствах регистра накопления обязательно включайте свойство РазрешитьРазделениеИтогов. Платформа будет записывать итоги с дополнительным внутренним разрезом (номером строки движения), распределяя нагрузку, и объединять их только при чтении.

4. Оптимизация работы с индексами. Любой запрос, используемый в динамических списках или отчетах, должен опираться на существующие индексы СУБД. Регулярно проводите аудит планов запросов и настраивайте технологический журнал 1С для выявления медленных запросов (время выполнения более 1 секунды).

Подводя итог, можно с уверенностью сказать: платформа «1С:Предприятие 8.3» полностью готова к нагрузкам в 1000–1500 пользователей в веб-клиенте. Успех проекта целиком зависит от грамотного администрирования веб-серверов, правильной конфигурации СУБД и профессионализма команды разработчиков, понимающих особенности работы высоконагруженных систем.

← На главную