Есть ли смысл в многопоточном веб-сервере для файловой базы 1С?

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

При публикации файловых баз «1С:Предприятия» на веб-сервере (будь то Apache или IIS) администраторы и разработчики часто сталкиваются с крайне неприятным симптомом. Если один из пользователей запускает тяжелый отчет, расчет себестоимости или любую другую длительную операцию, у всех остальных пользователей работа полностью парализуется. Интерфейс зависает, новые сессии не открываются, а веб-клиент выдает ошибки превышения времени ожидания.

В этой статье мы подробно разберем, почему возникает эта проблема, рассмотрим принцип работы обходных решений (запуск нескольких экземпляров Apache) и проанализируем современную официальную альтернативу от фирмы 1С — Автономный сервер.

Анатомия проблемы: почему веб-сервер работает в один поток

Для начала выясним причину такого поведения системы. Разберем по шагам, что происходит «под капотом» при обработке HTTP-запросов к файловой базе 1С:

  1. В клиент-серверном варианте (SQL) модуль веб-сервера (например, wsap24.dll для Apache) работает лишь как легковесный транслятор. Он принимает запрос от браузера или тонкого клиента и мгновенно перенаправляет его в кластер серверов 1С (процессам rphost). Процессы кластера сами распределяют нагрузку по множеству рабочих потоков.
  2. В файловом варианте кластера серверов нет. Роль «сервера» вынужден брать на себя сам веб-сервер. В адресное пространство процесса Apache (httpd.exe) или пула приложений IIS (w3wp.exe) загружается полноценный движок СУБД 1С и код самой платформы.
  3. Главная проблема заключается в том, что библиотека расширения веб-сервера 1С для файлового режима спроектирована как строго однопоточная для конкретной информационной базы. Все поступающие запросы от всех пользователей выстраиваются в одну жесткую очередь.

Пока поток занят выполнением серверного вызова первого пользователя (например, формированием ведомости по амортизации за 5 лет), веб-расширение не может начать обрабатывать запросы других пользователей. Они просто ждут своей очереди. Если время ожидания в очереди превышает лимиты веб-сервера, пользователи получают ошибку 504 Gateway Timeout или аналогичную.

Решение «в лоб»: запуск нескольких экземпляров Apache (мульти-Apache)

Чтобы обойти это платформенное ограничение, системные администраторы используют концепцию разделения очередей. Смысл запуска, например, пяти экземпляров Apache заключается в том, что мы создаем 5 независимых очередей обработки запросов.

Рассмотрим подробнее, как функционирует эта схема:

  1. На одном физическом или виртуальном сервере устанавливается и настраивается несколько независимых служб веб-сервера Apache. Каждая служба работает на своем уникальном сетевом порту (например, 8081, 8082, 8083 и так далее).
  2. В каждом экземпляре Apache создается идентичная публикация одной и той же файловой базы данных.
  3. Поскольку это разные процессы ОС с разными экземплярами библиотеки 1С, у каждого из них формируется своя собственная независимая очередь запросов.

Для конечного пользователя эта кухня должна оставаться скрытой. Мы не можем заставить бухгалтера угадывать, на какой порт ему сегодня заходить. Поэтому перед пулом веб-серверов устанавливается обратный прокси-сервер (например, Nginx) или специализированный балансировщик (вроде «МикроСервера 1С»).

Проанализируем пример конфигурации Nginx, который распределяет запросы пользователей по трем инстансам Apache:


upstream backend_1c {
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
    keepalive 32;
}

server {
    listen 80;
    server_name 1c-web.local;

    location / {
        proxy_pass http://backend_1c;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

При такой схеме запрос от пользователя Васи уходит на порт 8081, а запрос от пользователя Петрухи — на порт 8082. Если Вася запускает тяжелый отчет, его процесс на порту 8081 зависает. Однако Петруха продолжает комфортно работать через порт 8082, так как его очередь абсолютно свободна.

Ограничения и минусы мульти-серверного подхода

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

Современное официальное решение: Автономный сервер 1С

Начиная с версии платформы 8.3.14, фирма 1С представила штатный инструмент для решения проблемы однопоточности файловых баз — Автономный сервер (исполняемый файл ibsrv.exe).

Рассмотрим, почему это решение гораздо эффективнее кустарных методов с мульти-Apache:

Запуск автономного сервера выполняется из командной строки. Рассмотрим пример команды для запуска базы в режиме автономного сервера:

ibsrv.exe --db-path="C:\1C_Bases\Accounting" --port=8080 --as-service

После выполнения этой команды база станет доступна по адресу http://localhost:8080, при этом запросы пользователей будут обрабатываться параллельно в рамках одного процесса.

Важное ограничение лицензирования: Без клиент-серверной лицензии автономный сервер позволяет одновременно работать только трем пользователям. Если вам требуется качественная многопоточная работа для большего количества пользователей (например, для 5-10 человек), настоятельно рекомендуется отказаться от файлового режима, приобрести недорогую лицензию «1С:Сервер МИНИ на 5 подключений» и развернуть полноценную СУБД (например, бесплатный PostgreSQL).

← На главную