Решение проблемы однопоточности модуля веб-сервера при работе с файловой базой
База данных - HighLoad оптимизация
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Вступление
Для небольших организаций традиционна работа с базой данных в файловом режиме. Это недорогой (не требуется приобретение сервера 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.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83157 431 171
Инструменты администратора БД Роли и права Системный администратор Разработчик Пользователь 1С 8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)
Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 17.04.2026, версия 1.4.1, работает в 1С:ФРЕШ!
23180 руб.
06.12.2023 25043 85 14
Поиск данных Инструменты администратора БД Корректировка данных Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Решение для автоматической сверки данных между любыми конфигурациями 1С. Помогает контролировать и проверять обмены, проверять наличие документов при переносах данных, находить изменения в закрытых периодах
9760 руб.
14.11.2025 6135 28 8
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28689 103 46
Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)
Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.
6000 руб.
15.04.2026 4144 12 0
Инструментарий разработчика Инструменты администратора БД Системный администратор Разработчик Аналитик 1С:Предприятие 8 1С 8.3 1С 8.5 1C:ERP 1С:УТ 1С:ДО 1С:Бухгалтерия 3.0 1С:ERP. Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Россия Платные (руб)
Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.
5000 руб.
14.01.2013 217276 1252 0
Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)
Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).
14640 руб.
29.04.2020 52907 145 164
Файловый обмен (TXT, XML, DBF), FTP Поиск данных Инструменты администратора БД Корректировка данных Системный администратор Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)
Данная обработка позволит Вам легко и просто, а главное - быстро, выполнить сравнение данных между ЛЮБЫМИ базами (и РИБ, по правилам конвертаций) по контрольным суммам выбранных объектов баз 1С, работающих на платформах 8.3 и выше. Удобный и понятный интерфейс в виде "мастера". Высокая скорость сравнения достигается за счет специального алгоритма расчета контрольной суммы объекта/записи и сравнения по данным суммам объектов 2х баз через файл. Имеется возможность выбора реквизитов, по которым система будет сравнивать объекты. Сравнение количества записей в движениях документов, возможность сравнивать данные по правилам конвертации и не только! Выбор объектов конфигурации для КАЖДОГО узла в отдельности с индивидуальным отбором для каждого объекта конфигурации, работа с FTP, сохранение или загрузка настроек, сохранение или загрузка результата сравнения, регистрация на обмен объекта и его движений. (Обновление от 12.11.2024, версия 2.2-2.5)
24400 руб.
27.10.2017 47830 33 15
ПС: на личку ответите ?
ПС: апач ничего не держит с вероятностью в 99%, может компонента эта 1С-ная держит конечно.. нужна проверка все равно =)
И соответственно, если у меня 10 баз 1с с 1 организацией, проблем при поднятии 1 apache сервера не возникнет для доступа 10 пользователей (по 1 к каждой базе)?
(8) В 8.3 можно настроить время жизни соединения maxAge и другие параметры:
<pool size="10000"
maxAge="600"
attempts="3"
attemptTimeout="100"
waitTimeout="100"/>
Написать простенький сервис-тунель на Delphi , который будет принимать все входящие коннекты на порт скажем 8080, и распределять их динамически по N веб-сервисам апача... просто циклом отправляя клиентов работать 1ого клиента на первый процесс, второго на второй.. шестого снова на первый, седьмого на второй и тд.. понятно думаю смысл ) 1С:Сервера это конечно не заменит, но тогда можно будет забыть о работе через локалку в файловом варианте )
Chai Nic, можно написать про еще один серьезный плюс такого решения - защищенность файлов базы данных от копирования или повреждения ручками пользователей. Только ради этого стоит применять такой подход. Особенно когда "узкое горлышко" веб-сервера перестает иметь значение.
Вариантов несколько:
1) перезапускать службу. никто не вылетит, просто дольше ожидание произойдет в это время.
2) не закрывать базу а нажать меню - выход или меню - завершить работу пользователя.
3) в конфигураторе установить время отвала сеансов при простое. по умолчанию сутки.
да, для опенсорс разного рода костылинг является вполне стандартными средствами, тут я с вами согласен.
А зачем? Если можно сделать все на одном порту, одном экземпляре, и мы получим ту же самую параллельность работы?
Таки позволяет, кстати, легко и непринужденно. Матчасть нужно знать и любить.
А в описанном случае, чтобы получить все на одном порту, придется еще и фронт-сайд ставить в виде, к примеру, nginx.
Поймите уже, ценность решения - не в его хитрости, а в его простоте. А с гуй/консоль вы вообще форумом ошиблись, такого рода холивары очень любят на ЛОРе.
Кстати сказать, я не специалист по апачу, но теоретически и в нем должна быть возможность нафоркать сколько нужно рабочих процессов.
что имеешь ввиду ?
да ничего вроде не происходит, к сожалению лог не включил чтобы смотреть переподключается ли он.. но сегодня наверное еще раз потестю и включу лог
тестил подключение через тонкий клиент, ну а почему он не должен переключаться в монопольный режим?
Кстати, мне удавалось заархивировать базу даже с включенными юзерами через апач, наблюдается странный глюк, в активных юзерах никого нет (кроме конфигуратора), хотя юзеры сидят и при мне работают в это время в этой базе
как то очень похоже про то что я тебе в личке писал... у меня вот такая же хрень была, ну только в другой ситуации, которую я тебе описывал
а он что не пытается проверить коннект ?
upstream backend {
server ;
server ;
}
дальше мы экспериментировали с Ramdrive
после этого смотрели в сторону виртуализации такой конфигурации
в итоге получилась отказоустойчивая виртуалка с базой в памяти с достаточной многопоточностью и с возможностью восстановления
P.S. Основные трудности будут с аутентификацией через AD
Еще можно использовать вариант, когда веб-клиенту при подключении к единому адресу будет отдаваться html-директива переадресации, вызывая перезагрузку странички с нового адреса. А для тонкого клиента придется писать собственную запускалку, поскольку он не воспринимает переадресацию в html..
делал останов маппера, и его включение через пару секунд, коннект не теряется
Проверю, очень похоже что так и есть
вот это проверить не смогу, я написал только статические маршруты к сожалению, потом узнал что ты пишешь и забил на свое детище )
сделал, не зависло ничего, смотрю в активных юзерах, отключенный через диспетчер сеанс висит в активных юзерах, подключился вновь, создался новый сеанс, то есть сейчас висит (конфигуратор, старый отключенный сеанс и новый включенный).. ждем 20 мин, посмотрю отвалится ли или нет
Для 8.2.19.80 - база БП 2.0
- по прошествии 20 минут (-30) связь не рвется
- если отключить от базы, вроде сессия отключается, не уверен ... так как сейчас висит 4 процесса httpd, вместо 6.
Для 8.3.4.365 - база БП 3.0 (на 8.2 не могу потестить, перевел уже на 8.3, но если нужно ...)
-При загрузке базы, табличка - временный сбой интернет-соединения. Если ее не трогать, можно в базе работать, при закрытии таблички, перезагрузка соединения с базой.
ps было пару раз, что таблички не было и можно было работать, с чем связано и такое поведение - непонятно.
1 получат данные - остальные будут жевать бамбук пока не отвалятся по тайм ауту ?
Или если они подключились под разными пользователями - то параллельно ?
echo LoadModule authz_core_module modules/mod_authz_core.so >> "%CFG_FILE_NAME%"
перед строчкой
echo LoadModule _1cws_module "%MODULE_1C%" >> "%CFG_FILE_NAME%"
Имя журнала: Application
Источник: Apache Service
Дата: 14.02.2020 0:24:37
Код события: 3299
Категория задачи:Отсутствует
Уровень: Ошибка
Ключевые слова:Классический
Пользователь: Н/Д
Компьютер: Nikolai-ПК
Описание:
The Apache service named reported the following error:
>>> \xe0\xe9\xe4\xe5\xed \xf3\xea\xe0\xe7\xe0\xed\xed\xfb\xe9 \xec\xee\xe4\xf3\xeb\xfc. .
Xml события:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Apache Service" />
<EventID Qualifiers="0">3299</EventID>
<Level>2</Level>
<Task>0</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2020-02-13T21:24:37.000000000Z" />
<EventRecordID>32014</EventRecordID>
<Channel>Application</Channel>
<Computer>Nikolai-ПК</Computer>
<Security />
</System>
<EventData>
<Data>The Apache service named</Data>
<Data>
</Data>
<Data>reported the following error:
>>></Data>
<Data>\xe0\xe9\xe4\xe5\xed \xf3\xea\xe0\xe7\xe0\xed\xed\xfb\xe9 \xec\xee\xe4\xf3\xeb\xfc.</Data>
<Data>
</Data>
<Data>
</Data>
<Data>
</Data>
<Data>
</Data>
<Data>
</Data>
</EventData>
</Event>
error 2.2.log
rem ---------------системно-специфичные переменные ----------------------
set MODULE_1C=C:\Program Files (x86)\1cv8\8.3.13.1926\bin\wsap22.dll
set APACHE_PATH=C:\Program Files (x86)\Apache Software Foundation\Apache2.2
rem ---------------определение значений переменных ----------------------
rem Имя публикации базы на веб-сервере
set BASE_NAME=micro
rem Номер порта
set PORT=8000
rem Путь к базе
set BASE_PATH=E:\test\dkz2_2018
rem Путь к веб-серверу с прямым слешем (для апача)
set APACHE_PATH_FSLASH=%APACHE_PATH:\=/%
rem Путь к каталогу с конфигами экземпляров веб-сервера
set CFG_PATH=%APACHE_PATH%\1C_WEB\CFG
rem Путь к каталогу с параметрами публикации базы 1с в веб-модуле
set VRD_PATH=%APACHE_PATH%\1C_WEB\VRD\%BASE_NAME%
rem Имя сервиса web1c
set SERVICE_NAME=Apache#%BASE_NAME%#%PORT%
rem Создадим каталог с конфигами, если его еще нет
IF NOT EXIST "%CFG_PATH%" mkdir "%CFG_PATH%"
rem Создадим каталог с параметрами публикации базы, если его еще нет
IF NOT EXIST "%VRD_PATH%" mkdir "%VRD_PATH%"
rem Определим имя каталога параметров публикации базы с прямым слешем (для апача)
set VRD_PATH_FSLASH=%VRD_PATH:\=/%
rem Опеределим имя конфигурационного файла
set CFG_FILE_NAME=%CFG_PATH%\%SERVICE_NAME%.cfg
rem Определим имя файла параметров публикации
set VRD_FILE_NAME=%VRD_PATH%\Default.vrd
rem Определим имя файла параметров публикации с прямым слешем (для апача)
set VRD_FILE_NAME_FSLASH=%VRD_FILE_NAME:\=/%
А скрипт не создает в этой папке конфига, хз почему.
Опытным путем было установлено, что служба Apache запускается только, если имя базы такое же, как и имя папки, где хранится база.
Он создает всё нужное в папке 1C_WEB - и cfg и vrd, в подкаталоге с именем публикации базы, при этом имя папки базы вообще ни на что не влияет в конфигурации, кроме содержимого vrd-файла.
Хм, похоже на то. Сейчас нормально запустился с разными именами папки и базы. Странно как-то, может я где чего косячил.
А то прям беда - работает 5 человек и при этом виснет - будь здоров.
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 239498
Создание 09.12.13 15:53
Обновление 04.03.22 09:25
Просмотры 73453
Загрузки 190
Рейтинг
100
Комментарии 118
Код открыт Да
Рубрики HighLoad оптимизация Инструменты администратора БД
Кому
Системный администратор
,
Разработчик
Тип файла Приложение (exe)
Платформа 1С:Предприятие 8
Конфигурация Универсальные
Операционная система Windows
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)