При публикации файловых баз «1С:Предприятия» на веб-сервере (будь то Apache или IIS) администраторы и разработчики часто сталкиваются с крайне неприятным симптомом. Если один из пользователей запускает тяжелый отчет, расчет себестоимости или любую другую длительную операцию, у всех остальных пользователей работа полностью парализуется. Интерфейс зависает, новые сессии не открываются, а веб-клиент выдает ошибки превышения времени ожидания.
В этой статье мы подробно разберем, почему возникает эта проблема, рассмотрим принцип работы обходных решений (запуск нескольких экземпляров Apache) и проанализируем современную официальную альтернативу от фирмы 1С — Автономный сервер.
Для начала выясним причину такого поведения системы. Разберем по шагам, что происходит «под капотом» при обработке HTTP-запросов к файловой базе 1С:
wsap24.dll для Apache) работает лишь как легковесный транслятор. Он принимает запрос от браузера или тонкого клиента и мгновенно перенаправляет его в кластер серверов 1С (процессам rphost). Процессы кластера сами распределяют нагрузку по множеству рабочих потоков.httpd.exe) или пула приложений IIS (w3wp.exe) загружается полноценный движок СУБД 1С и код самой платформы.Пока поток занят выполнением серверного вызова первого пользователя (например, формированием ведомости по амортизации за 5 лет), веб-расширение не может начать обрабатывать запросы других пользователей. Они просто ждут своей очереди. Если время ожидания в очереди превышает лимиты веб-сервера, пользователи получают ошибку 504 Gateway Timeout или аналогичную.
Чтобы обойти это платформенное ограничение, системные администраторы используют концепцию разделения очередей. Смысл запуска, например, пяти экземпляров Apache заключается в том, что мы создаем 5 независимых очередей обработки запросов.
Рассмотрим подробнее, как функционирует эта схема:
Для конечного пользователя эта кухня должна оставаться скрытой. Мы не можем заставить бухгалтера угадывать, на какой порт ему сегодня заходить. Поэтому перед пулом веб-серверов устанавливается обратный прокси-сервер (например, 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, так как его очередь абсолютно свободна.
Несмотря на то, что этот костыль реально спасает интерфейс от зависания, у него есть критические недостатки, о которых необходимо помнить:
1Cv8.1CD на уровне операционной системы. Если два пользователя на разных портах попытаются одновременно провести документы, один из них все равно будет ждать снятия транзакционной блокировки.wsap24.dll во всех конфигурационных файлах каждого инстанса Apache.Начиная с версии платформы 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).