Вступление
Для небольших организаций традиционна работа с базой данных в файловом режиме. Это недорогой (не требуется приобретение сервера 1с) способ организации совместной работы нескольких пользователей. Однако он имеет серьезные недостатки. Главный из них - сетевая работа с базой данных в режиме разделенного доступа. В результате скорость работы с файлом ограничивается скоростью сети, кроме того, при совместном доступе к сетевому ресурсу windows не в лучшую сторону меняет настройки кэширования данных этого файла, что резко снижает скорость записи. При аварийном прекращении работы сети во время записи данных может произойти порча базы, часто необратимая.
К счастью, при реализации модели управляемых форм в версии 8.2 фирма 1с предоставила возможность работы с файловой базой через веб-сервер. У этого способа есть огромные преимущества:
1. Намного выше скорость работы с данными, поскольку не требуется их передача по сети во время обработки
2. База не боится разрывов сети во время записи, поскольку непосредственная работа с файлом данных происходит через модуль веб-сервера. Разрыв передачи данных по сети может вызвать лишь временное прекращение работы пользователей, но не порчу данных в базе и не тем более не может вызвать разрушение самой базы.
3. Нетребовательность к скорости сети и к быстродействию клиентских компьютеров. Это обеспечивает легкое масштабирование - путем апгрейда лишь одного сервера можно существенно повысить производительность работы.
4. Возможность работы как в тонком клиенте, так и в веб-браузере.
Но при работе в таком режиме можно столкнуться со следующей проблемой. Дело в том, что модуль 1с для веб-сервера — однопоточный. Соответственно, все пользователи 1с, подключенные к этому веб-серверу, встают в единую «очередь» серверных вызовов. Если серверные вызовы длительные, что возможно при росте объема данных в базе или при выполнении сложных запросов, то это может полностью парализовать работу других пользователей — они будут вынуждены ждать.
Вот что написано по этому вопросу на сайте 1с: "Прямо в адресное пространство веб-сервера загружается компонент для работы с файловой базой данных и сами данные информационной базы. При этом нагрузка на веб-сервер значительно возрастает, а пользователи одной информационной базы не имеют возможности работать параллельно. Все их запросы к базе данных выстраиваются в одну очередь. " (с)
Но решить эту проблему можно достаточно просто. Нужно использовать вместо одного веб-сервера несколько, вплоть до того, что каждому клиенту выделить свой собственный серверный процесс. Однако, 1с не предоставляет возможности автоматической публикации конфигурации через веб-модуль на нескольких экземплярах сервера. Тем не менее, для сервера Apachе это можно осуществить путем ручного редактирования файлов конфигурации. Для автоматизации этого процесса и предназначена данная разработка.
Разработка представляет собой cmd-файл (скрипт), облегчающий работу по созданию нового экземпляра веб-сервера Apache с публикацией файловой базы.
Описание скрипта:
При запуске скрипт принимает в качестве параметров три значения:
- имя базы, под которым она будет опубликована на экземпляре веб-сервера
- порт, на котором будет работать экземпляр
- каталог, где находится файловая база данных
В качестве имени базы следует указывать строку из латинских символов и цифр (ограничения аналогичны интернет-адресам) без кавычек. Русские буквы и пробелы не допускаются. Порт может быть любым — важно, чтобы он был не занят другим приложением и не был заблокирован брандмауэром. Каталог базы, если содержит пробелы, должен быть в кавычках.
Предварительно скрипт нужно настроить под свою систему, указав в нём, в разделе системно-специфичных переменных, следующие данные:
MODULE_1C — полный путь к модулю веб-сервера 1с
вариант: set MODULE_1C=C:\Program Files\1cv82\8.2.18.82\bin\wsap22.dll
APACHE_PATH — путь к каталогу Apache
вариант: set APACHE_PATH=C:\Program Files\Apache Software Foundation\Apache2.2
Запуск скрипта с отсутствующим путём к базе данных вызывает удаление регистрации экземпляра веб-сервера, связанного с указанной базой и портом.
Пример использования
Задача: Нужно создать инфраструктуру для работы 5 пользователей в одной файловой базе через веб-сервер без взаимного ожидания выполнения серверных процессов.
Решение: Создать 5 экземпляров веб-сервера Apache и каждому клиенту сопоставить свой порт.
1. Настраиваем скрипт, указав в переменных MODULE_1C и APACHE_PATH актуальные для системы параметры.
2. Запускаем скрипт последовательно 5 раз, меняя порт
c:\test>web_server_1c.cmd buh_base 8001 d:\bases\buh_base
c:\test>web_server_1c.cmd buh_base 8002 d:\bases\buh_base
c:\test>web_server_1c.cmd buh_base 8003 d:\bases\buh_base
c:\test>web_server_1c.cmd buh_base 8004 d:\bases\buh_base
c:\test>web_server_1c.cmd buh_base 8005 d:\bases\buh_base
3. На клиентах создаем ярлыки подобного содержания:
1cv8c.exe ENTERPRISE /Wshttp://192.168.0.1:8001/buh_base
...
1cv8c.exe ENTERPRISE /Wshttp://192.168.0.1:8005/buh_base
Примечание
Для удобства обновления платформы и уменьшения затрат времени лучше сделать следующее:
- На сервере создать символическую ссылку на каталог, где установлена актуальная версия платформы 1с. Это наиболее удобно сделать с помощью Far Manager.
- В параметрах обработки прописать путь к модулю 1с для веб-сервера, именно используя этот каталог-ссылку, чтобы в конфигурационных файлах не было привязки к конкретному имени каталога 1с (с номером версии).
- Данный каталог-ссылку открыть для общего доступа по сети на чтение.
- На клиентах в локальной сети 1с не ставить, а настроить всем ярлык, ссылающийся непосредственно на тонкого клиента 1cv8c.exe на сервере. Он грузится достаточно быстро для этого.
Таким образом, действия, которые необходимо предпринять при обновлении платформы 1с, ограничатся корректировкой символической ссылки на новый каталог 1с и перезапуском процессов Apache.