IE2017

Решение проблемы однопоточности модуля веб-сервера при работе с файловой базой

Администрирование - Оптимизация БД (HighLoad)

Решение проблемы однопоточности модуля веб-сервера при работе с файловой базой путем запуска нескольких экземпляров веб-сервера Apache на одном физическом сервере. Предлагаемый скрипт автоматизирует процесс настройки.

Вступление

  Для небольших организаций традиционна работа с базой данных в файловом режиме. Это недорогой (не требуется приобретение сервера 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.  

 

Скачать файлы

Наименование Файл Версия Размер
Скрипт по созданию экземпляров веб-сервера Apache для поддержки файловой базы 1с 8.2
.cmd 4,35Kb
09.12.13
94
.cmd 0.1 4,35Kb 94 Скачать

См. также

Комментарии
1. Dmitry Afanasyev (afanasko) 35 09.12.13 16:10 Сейчас в теме
А как обстоит дело с блокировками при таком варианте работы? Транзакции работают?
2. Александр Бреднев (Chai Nic) 112 09.12.13 16:21 Сейчас в теме
(1) afanasko, транзакции и блокировки работают так же, как в файловой базе - проверил. По сути, каждый экземпляр веб-сервера - это клиент для базы.
3. Dmitry Afanasyev (afanasko) 35 09.12.13 16:26 Сейчас в теме
(2) Chai Nic, тогда это очень круто :). Если еще смастерить "сервер", который автоматически экземпляры апача генерить будет для каждого коннекта - то зачем будет нужен микросервер от 1С?
4. Алексей Белоусов (AllexSoft) 09.12.13 16:32 Сейчас в теме
Спасибо! как раз есть задумки на этот счет, я сам уже давно догадался использовать несколько процессов апача, но каждому свой ярлык делать не айс... и вот какие мысли есть по этому поводу:
Написать простенький сервис-тунель на Delphi , который будет принимать все входящие коннекты на порт скажем 8080, и распределять их динамически по N веб-сервисам апача... просто циклом отправляя клиентов работать 1ого клиента на первый процесс, второго на второй.. шестого снова на первый, седьмого на второй и тд.. понятно думаю смысл ) 1С:Сервера это конечно не заменит, но тогда можно будет забыть о работе через локалку в файловом варианте )
5. Александр Бреднев (Chai Nic) 112 09.12.13 16:34 Сейчас в теме
(3) afanasko, да, у меня тоже есть мысль написать сервис-диспетчер, который бы слушал один порт, принимая на него запросы клиентов, и пробрасывал бы соединение на наименее загруженный веб-сервер. Но это надо будет дельфи или си вспоминать)
6. kiruha Дронов (kiruha) 360 09.12.13 20:01 Сейчас в теме
А как там дальше. Вот 5 пользователей ушли с работы, утром пришли, кто то выдернул шнур по глупости из розетки. Сервер перегрузили или нет. Как там все будет ?
7. kiruha Дронов (kiruha) 360 09.12.13 20:04 Сейчас в теме
Особенно учитывая что на 5 юзерах штатных админов и 1С ников может не быть
8. Александр Бреднев (Chai Nic) 112 09.12.13 20:26 Сейчас в теме
(6) kiruha, насколько я в курсе, модуль веб-сервера периодически принимает от клиентов пакеты "keep alive", если какое-то время их не получает - считает что сеанс умер и отрубает его (есть подозрение на 20 минут). В этом смысле ничего не меняется, что с одним сервисом, что с несколькими на одной базе. Каждый будет работать по тому же принципу. В общем, по сути вообще ничего не меняется, можно эту функцию настроить на сервере, а работать по старинке - на одном апаче.. это если некому ярлыки пользователям раскидать по уму. Хуже не будет в любом случае.
9. logdog (logdog) 10.12.13 01:44 Сейчас в теме
(2) Извините, я правильно понимаю, что для базы в которой заведены 10 организаций,и работают 10 пользователей, использование веб-клиента приведет к видимым тормозам, т.е. будет еще хуже, чем при работе на терминальном сервере?
И соответственно, если у меня 10 баз 1с с 1 организацией, проблем при поднятии 1 apache сервера не возникнет для доступа 10 пользователей (по 1 к каждой базе)?

(8) В 8.3 можно настроить время жизни соединения maxAge и другие параметры:
<pool size="10000"
maxAge="600"
attempts="3"
attemptTimeout="100"
waitTimeout="100"/>
11. Владимир Литвиненко (VladimirL) 572 10.12.13 07:21 Сейчас в теме
Хорошее решение, но требуется ручное распределение пользователей по веб-серверам. Если написать автораспределение подключений по сервисам, то получится аналог сервера 1С для файлового варианта. Сервисы Апача вместо rphost, распределяющая прога - вместо rmngr.

Chai Nic, можно написать про еще один серьезный плюс такого решения - защищенность файлов базы данных от копирования или повреждения ручками пользователей. Только ради этого стоит применять такой подход. Особенно когда "узкое горлышко" веб-сервера перестает иметь значение.
12. Александр Бреднев (Chai Nic) 112 10.12.13 08:06 Сейчас в теме
(9) logdog, однопоточность модуля веб-сервера проявляется лишь в контексте одной информационной базы. Если на одном экземпляре апача висит несколько информационных баз - их серверные вызовы выполняются независимо.
13. kiruha Дронов (kiruha) 360 10.12.13 10:21 Сейчас в теме
(11) VladimirL,
+1
Вообщем нужно хотя бы простое автоматическое подключение к разным.
Вероятно можно реализовать через файлики настроек, типа поиска ключа.

Типа установил и забыл
14. Александр Бреднев (Chai Nic) 112 10.12.13 10:45 Сейчас в теме
(13) kiruha, автоматическое решение нужно, но оно не получится таким уж простым. Дело в том, что клиент не устанавливает постоянное tcp-соединение с сервером, сеанс поддерживается лишь на прикладном уровне. Алгоритм менеджера должен быть примерно такой - клиент подключается к менеджеру (по tcp), тот смотрит в таблицу трансляции, если для клиента в ней записи нет - выбирается свободный (или менее загруженный) рабочий сервис, данные транслируются, и в таблицу трансляции записываются сведения "клиент такой-то подключен к серверу такому-то тогда-то". При последующих запросах уже используются данные из таблицы. Периодически таблица трансляции проверяется на записи, время жизни которых превысило некий порог - они удаляются. Как-то так..
15. Maxim Goncharov (maxx) 608 10.12.13 12:01 Сейчас в теме
(5)Скажите не сильно разбираюсь в Apache, a нельзя установить 5 раз Apache , типа 5 каталогов ProgramFiles\Apache1 ProgramFiles\Apache2 ProgramFiles\Apache3 ProgramFiles\Apache4 ProgramFiles\Apache5 со своими конф. файлом своим портом или будут проблемы?
16. Алексей Белоусов (AllexSoft) 10.12.13 12:37 Сейчас в теме
(14) Chai Nic, а откуда инфа о том что соединение не висит постоянно ?
17. Александр Бреднев (Chai Nic) 112 10.12.13 12:59 Сейчас в теме
(15) maxx, можно конечно и так сделать, но зачем? Апач нормально работает с указанием конфигурационного файла.

(16) AllexSoft, это можно увидеть в соединениях процессов 1cv8c или httpd через Process Explorer или netstat.
VladimirL; AllexSoft; +2 Ответить 1
18. Алексей Белоусов (AllexSoft) 10.12.13 13:21 Сейчас в теме
(17) Chai Nic, если он переподключается постоянно, то будет ли разница в контексте какого сервера апача он подключиться в дальнейшем ? ведь база то одна все равно и апачи на одном сервере вияст, все темпы будут одни и тд... может и смысла нет в таблице трансляции ?
ПС: на личку ответите ?
19. Александр Бреднев (Chai Nic) 112 10.12.13 13:26 Сейчас в теме
(18) AllexSoft, неее, к какому угодно, я думаю, нельзя, ведь контекст приложения (параметры сеанса и тому подобное) держит именно модуль веб-сервера, а он на каждом серверном процессе свой.
20. Алексей Белоусов (AllexSoft) 10.12.13 13:36 Сейчас в теме
(19) Chai Nic, нее.. я думаю что веб-сервер то как раз ничего не держит в случае апача... ибо при отвале коннекта он бы все чистил у себя - для него это просто отключившийся клиент. А вот 1С где то держит это, чувствую что держит она это в темпах у себя, как всегда все на файликах-темпах в 1С же... ))
ПС: апач ничего не держит с вероятностью в 99%, может компонента эта 1С-ная держит конечно.. нужна проверка все равно =)
21. Александр Бреднев (Chai Nic) 112 10.12.13 13:47 Сейчас в теме
(20) AllexSoft, разумеется, апач ничего не держит. Но он в данном случае всего лишь "запускалка" для модуля 1с. И вот именно этот модуль и создает временные файлы, кроме того, хранит что-то, относящееся к запущенным сеансам, в своей оперативной памяти. А разные экземпляры апача - разные модули 1с. Сеансы, открытые на одном из них, на другом модуле будут чужими, скорее всего просто коннект отвалится с ошибкой.
VladimirL; +1 Ответить
22. logdog (logdog) 10.12.13 13:54 Сейчас в теме
Для запуска веб-клиента, нужен только апатч или он должен быть в связке с nginx?
23. Алексей Белоусов (AllexSoft) 10.12.13 14:14 Сейчас в теме
24. logdog (logdog) 10.12.13 15:20 Сейчас в теме
(23)Есть еще такой продукт Apache Traffic Server 4.0 - это замена апатчу (можно ли на нем поднимать веб-сервер для 1С)?
25. Алексей Белоусов (AllexSoft) 10.12.13 15:23 Сейчас в теме
(24) logdog, думаю что не получится, я пробовал ставить Denver, не получилось ) а с обычным стандартным апачем взлетело сразу без мучений
26. logdog (logdog) 10.12.13 15:46 Сейчас в теме
(25)Ну, Denver - это "комбайн", а нам ни базы данных, ни php не нужно.
27. Александр Бреднев (Chai Nic) 112 10.12.13 15:51 Сейчас в теме
(26) logdog, да даже из всего огромного количества модулей апача нужен лишь один mod_alias в дополнение к модулю 1с...
VladimirL; logdog; +2 Ответить 1
28. logdog (logdog) 10.12.13 17:54 Сейчас в теме
(27) Я бы еще mod_ssl.so добавил. (но и mod_auth_* нужны)
29. Александр Бреднев (Chai Nic) 112 10.12.13 18:00 Сейчас в теме
(28) logdog, ну это всё-таки не обязательно, в 99% случаев с https не связываются, поскольку с базой работа ведется внутри локальной сети или vpn..
30. Алексей Белоусов (AllexSoft) 10.12.13 18:13 Сейчас в теме
у меня кстати так и не удалось завести Аапач+SSL + 1C ( не хочет видеть 1С его и все
31. logdog (logdog) 10.12.13 19:30 Сейчас в теме
(30)Тут статья была, Вы поищите, я когда-то ради теста настроил - работало.
32. Алексей Белоусов (AllexSoft) 10.12.13 21:09 Сейчас в теме
(31) logdog, сначала сам, потом по ней пытался... не захотел долго возиться, но с первого раза не взлетело
33. logdog (logdog) 10.12.13 21:47 Сейчас в теме
Интересует вопрос по тонкой настройке apache:
Cейчас висят два процесса httpd (почему два?) и один из них отжирает около 250 метров памяти, хотя 3 часа как отключились от веб-клиента (
34. Александр Бреднев (Chai Nic) 112 10.12.13 22:19 Сейчас в теме
(33) logdog, а ничего тут не сделаешь, память занимает не апач, а серверный модуль 1с. И занимает её он не просто так, а кэширует в памяти часть метаданных. Так, чтобы при повторном подключении клиенту не приходилось ждать загрузки. Что касается двух процессов на одну службу - так и должно быть, один как я понимаю служебный, а второй - собственно рабочий.
35. logdog (logdog) 10.12.13 22:26 Сейчас в теме
(34) Тогда вопрос с точки зрения лицензий, этот висящий процесс занимает клиентскую лицензию 1C? И закрытие браузера клиентом, отнюдь не означает освобождение лицензии (она освобождается, только тогда, когда время жизни соединения истечет)?
36. Александр Бреднев (Chai Nic) 112 10.12.13 23:21 Сейчас в теме
(35) logdog, клиентскую лицензию в случае веб-браузера занимает пользовательский сеанс 1с, а не серверный процесс. Внутри одного серверного процесса может работать и несколько сеансов 1с, при этом каждому нужна лицензия. По поводу времени освобождения лицензии после завершения сеанса (нормального или аварийного) - тут ничего пока сказать не могу, надо проверять.
37. logdog (logdog) 11.12.13 13:02 Сейчас в теме
(34)Проверил, к сожалению - это верно до истечения времени жизни сессии. До 320, после 250 - память просто не освобождается.
38. Александр Бреднев (Chai Nic) 112 11.12.13 13:52 Сейчас в теме
(37) logdog, я не думаю, что это так уж важно. А вообще, можно перезапускать сервисы по ночам планировщиком, заодно и бэкап сделать во время остановки.
39. Антон Стеклов (asved.ru) 33 17.12.13 04:58 Сейчас в теме
А на IIS то же самое делается вполне стандартными средствами.
40. Александр Бреднев (Chai Nic) 112 17.12.13 07:56 Сейчас в теме
(39) asved.ru, так и на апаче вполне стандартными.. или что вы понимаете под "стандартными средствами"?
41. Алексей Белоусов (AllexSoft) 17.12.13 10:08 Сейчас в теме
42. Антон Стеклов (asved.ru) 33 17.12.13 10:12 Сейчас в теме
(40) Chai Nic, (41) AllexSoft, количество рабочих процессов куазывается в настройках пула приложения.

так и на апаче вполне стандартными

да, для опенсорс разного рода костылинг является вполне стандартными средствами, тут я с вами согласен.

Решение: Создать 5 экземпляров веб-сервера Apache и каждому клиенту сопоставить свой порт.
43. Александр Бреднев (Chai Nic) 112 17.12.13 10:42 Сейчас в теме
(42) asved.ru, ваши личные предпочтения (gui vs комстрока) к теме обсуждения не относятся, просьба не устраивать оффтопик. Суть не в количестве рабочих процессов, а в создании изолированных экземпляров веб-сервера, слушающих разные порты и независимо загружающих одинесовскую дллку. Позволяет IIS такое?
44. Алексей Белоусов (AllexSoft) 17.12.13 11:18 Сейчас в теме
(42) asved.ru, кажется вы не прониклись идеей, тема слишком специфична к сожалению... сам пытался подобрать что то более менее готовое, но увы ничего... разве что на роутере (или софт-роутере) настраивать порт форвардинг, но это опять немного не то
45. Антон Стеклов (asved.ru) 33 17.12.13 11:32 Сейчас в теме
(43) Chai Nic,

Суть не в количестве рабочих процессов, а в создании изолированных экземпляров веб-сервера, слушающих разные порты и независимо загружающих одинесовскую дллку. Позволяет IIS такое?


А зачем? Если можно сделать все на одном порту, одном экземпляре, и мы получим ту же самую параллельность работы?
Таки позволяет, кстати, легко и непринужденно. Матчасть нужно знать и любить.

А в описанном случае, чтобы получить все на одном порту, придется еще и фронт-сайд ставить в виде, к примеру, nginx.

Поймите уже, ценность решения - не в его хитрости, а в его простоте. А с гуй/консоль вы вообще форумом ошиблись, такого рода холивары очень любят на ЛОРе.
46. Александр Бреднев (Chai Nic) 112 17.12.13 11:51 Сейчас в теме
(45) asved.ru, "можно сделать все на одном порту, одном экземпляре, и мы получим ту же самую параллельность работы" - каким образом, если wsap22.dll - однопоточная?
47. Антон Стеклов (asved.ru) 33 17.12.13 12:03 Сейчас в теме
(46) Chai Nic, Вы путаете однопоточность ISAPI-компонента и однопоточность веб-сервера. Никто нам не мешает вызывать функцию однопоточной DLL столько раз, сколько мы хотим, не дожидаясь завершения предыдущего вызова.

Кстати сказать, я не специалист по апачу, но теоретически и в нем должна быть возможность нафоркать сколько нужно рабочих процессов.
48. Алексей Белоусов (AllexSoft) 17.12.13 12:24 Сейчас в теме
Кстати сказать, я не специалист по апачу, но теоретически и в нем должна быть возможность нафоркать сколько нужно рабочих процессов

что и делает ТС... говорю же, вы не прониклись идеей, ну или не внимательно читали
49. Александр Бреднев (Chai Nic) 112 17.12.13 12:40 Сейчас в теме
(47) asved.ru, "Никто нам не мешает вызывать функцию однопоточной DLL столько раз, сколько мы хотим, не дожидаясь завершения предыдущего вызова" - это всё слова... можете привести рабочий пример настройки ииса, позволяющей во время серверного вызова выполнять серверные вызовы других сеансов 1с?
50. Александр Бреднев (Chai Nic) 112 19.12.13 15:45 Сейчас в теме
Прошу обратить внимание на мою новую публикацию на ту же тему.

http://infostart.ru/public/242527/
51. Алексей Белоусов (AllexSoft) 20.12.13 16:00 Сейчас в теме
(50) Chai Nic, пропало куда то...
52. Александр Бреднев (Chai Nic) 112 20.12.13 16:01 Сейчас в теме
Тема пока убрана.. обнаружились баги, которые пока непонятно как решать.
53. Алексей Белоусов (AllexSoft) 20.12.13 16:03 Сейчас в теме
(52) Chai Nic, расскажешь про баги?
54. Александр Бреднев (Chai Nic) 112 20.12.13 16:13 Сейчас в теме
(53) AllexSoft, при обычной работе всё нормально, а вот при простое клиента сервер 1с ведет себя непредсказуемо.. В версии 8.2 клиент после простоя более 20 минут просто теряет сеанс (вылетает ошибка что сеанс закрыт), в версии 8.3 клиент виснет, а серверный процесс при этом грузит проц.
55. Алексей Белоусов (AllexSoft) 20.12.13 16:24 Сейчас в теме
в версии 8.3 клиент виснет, а серверный процесс при этом грузит проц.

как то очень похоже про то что я тебе в личке писал... у меня вот такая же хрень была, ну только в другой ситуации, которую я тебе описывал
8.2 клиент после простоя более 20 минут просто теряет сеанс (вылетает ошибка что сеанс закрыт)

а он что не пытается проверить коннект ?
56. Александр Бреднев (Chai Nic) 112 20.12.13 16:37 Сейчас в теме
(55) "а он что не пытается проверить коннект ?"
Да скорее всего пытается, но таким способом, который несовместим с редиректором..
57. Алексей Белоусов (AllexSoft) 20.12.13 16:48 Сейчас в теме
(56) Chai Nic, интересно очень... на выходных покопаюсь
58. Алексей Лустин (lustin) 853 21.12.13 23:54 Сейчас в теме
(0) все таки в статье не хватает эксперимента с nginx - он вам даст единый адрес для входа в базу.

upstream backend {
server http://192.168.0.1:8001/buh_base ;
server http://192.168.0.1:8002/buh_base ;
}

дальше мы экспериментировали с Ramdrive
http://blog.a-netz.de/2013/02/persistent-storage-with-ramdisks/

после этого смотрели в сторону виртуализации такой конфигурации
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1013628

в итоге получилась отказоустойчивая виртуалка с базой в памяти с достаточной многопоточностью и с возможностью восстановления

P.S. Основные трудности будут с аутентификацией через AD
59. Александр Бреднев (Chai Nic) 112 22.12.13 08:36 Сейчас в теме
(58) lustin, к сожалению, нельзя единый адрес использовать.. Клиент, подключающийся к веб-серверу, должен подключаться именно к конкретному экземпляру веб-сервера, а не к перенаправителю. Это уже проверено. Соответствие веб-модуля с клиентом должно быть взаимно-однозначным. Иначе возникают глюки, описанные в (54).

Еще можно использовать вариант, когда веб-клиенту при подключении к единому адресу будет отдаваться html-директива переадресации, вызывая перезагрузку странички с нового адреса. А для тонкого клиента придется писать собственную запускалку, поскольку он не воспринимает переадресацию в html..
60. logdog (logdog) 23.12.13 03:34 Сейчас в теме
(54) Chai Nic, Да, оно (
(55) А в 1С эти баги отправляли?
61. Александр Бреднев (Chai Nic) 112 23.12.13 08:00 Сейчас в теме
(60) logdog, вряд ли это баги с точки зрения 1с.. они же не декларировали возможность работы на нескольких серверах через трансляцию с одного порта.
62. Алексей Белоусов (AllexSoft) 23.12.13 10:19 Сейчас в теме
(61) Chai Nic, вчера на весь день тест маппера поставил своего, проблемы как у тебя не наблюдаю, при простое (тестил до 2х часов) все работает и не отваливается
63. Александр Бреднев (Chai Nic) 112 23.12.13 10:30 Сейчас в теме
(62) AllexSoft, хм.. ну тогда даже не знаю, в чем может быть проблема... А ты пробовал отрубать клиентские процессы жестко? Что происходит, когда истекает 20-минутный таймаут веб-модуля? Работает ли переход в монопольный режим, например для удаления помеченных объектов?
64. Алексей Белоусов (AllexSoft) 23.12.13 10:38 Сейчас в теме
(63) Chai Nic,
А ты пробовал отрубать клиентские процессы жестко?

что имеешь ввиду ?
Что происходит, когда истекает 20-минутный таймаут веб-модуля?

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

тестил подключение через тонкий клиент, ну а почему он не должен переключаться в монопольный режим?
Кстати, мне удавалось заархивировать базу даже с включенными юзерами через апач, наблюдается странный глюк, в активных юзерах никого нет (кроме конфигуратора), хотя юзеры сидят и при мне работают в это время в этой базе
65. Александр Бреднев (Chai Nic) 112 23.12.13 10:44 Сейчас в теме
Ну прервать процесс 1cv8c.exe в диспетчере задач, имитировав этим зависание клиентского компа или разрыв сети.. Из списка сеансов через 20 минут сеанс удаляется? Желательно проверить вариант, когда отрубаемый процесс редиректится на другой порт, чем тот, с которого смотрим список сеансов.
66. Алексей Белоусов (AllexSoft) 23.12.13 10:53 Сейчас в теме
(65) Chai Nic,
Ну прервать процесс 1cv8c.exe в диспетчере задач, имитировав этим зависание клиентского компа или разрыв сети..

делал останов маппера, и его включение через пару секунд, коннект не теряется
Из списка сеансов через 20 минут сеанс удаляется?

Проверю, очень похоже что так и есть
Желательно проверить вариант, когда отрубаемый процесс редиректится на другой порт, чем тот, с которого смотрим список сеансов.

вот это проверить не смогу, я написал только статические маршруты к сожалению, потом узнал что ты пишешь и забил на свое детище )
67. Александр Бреднев (Chai Nic) 112 23.12.13 10:58 Сейчас в теме
(66) AllexSoft, "останов маппера, и его включение через пару секунд" - это не то, нужна именно "внезапная смерть клиента".
68. Алексей Белоусов (AllexSoft) 23.12.13 11:05 Сейчас в теме
(67) Chai Nic,
внезапная смерть клиента

сделал, не зависло ничего, смотрю в активных юзерах, отключенный через диспетчер сеанс висит в активных юзерах, подключился вновь, создался новый сеанс, то есть сейчас висит (конфигуратор, старый отключенный сеанс и новый включенный).. ждем 20 мин, посмотрю отвалится ли или нет
69. Александр Бреднев (Chai Nic) 112 23.12.13 11:07 Сейчас в теме
(68) AllexSoft, суть в том, что повторное подключение (которое выводит список сеансов) должно быть через другой экземпляр веб-сервиса.
70. Алексей Белоусов (AllexSoft) 23.12.13 11:56 Сейчас в теме
(69) Chai Nic, я список сеансов смотрю через конфигуратор, так что ему все равно через какой экземпляр подключился новый коннект
ПС: через 20 мин отключенный сеанс отвалился... новый сеанс висит до сих пор
71. Александр Бреднев (Chai Nic) 112 23.12.13 12:48 Сейчас в теме
Я смотрел через другой сеанс, от другого клиентского ip и соответственно, с рабочим процессом на другом экземпляре апача (на другом порту).
72. Александр Бреднев (Chai Nic) 112 23.12.13 12:48 Сейчас в теме
В общем, ничего больше сказать не могу. Если у вас это каким-то образом работает - рад за вас.
73. logdog (logdog) 23.12.13 13:14 Сейчас в теме
(62) AllexSoft, версию 8.2 или 8.3 тестили?
74. Алексей Белоусов (AllexSoft) 23.12.13 13:18 Сейчас в теме
75. Алексей Белоусов (AllexSoft) 23.12.13 13:20 Сейчас в теме
(72) Chai Nic, может у тебя пакеты keep-alive не отрабатываются правильно или что то в этом духе ?
76. Александр Бреднев (Chai Nic) 112 23.12.13 13:30 Сейчас в теме
(75) AllexSoft, у меня вообще не делается разницы между пакетами. Есть tcp-соединение, оно и транслируется, пока не закончится. На каждое соединениние между клиентом и портом редиректора создается такое же соединение между редиректором и конкретным портом апача, и между ними передаются данные.
77. Александр Бреднев (Chai Nic) 112 23.12.13 13:51 Сейчас в теме
Странно.. вот сейчас попробовал - ничего не виснет.. но и зависший сеанс не отключается через 20 минут .. ничего не делал.
78. logdog (logdog) 23.12.13 16:37 Сейчас в теме
(77)(74)
Для 8.2.19.80 - база БП 2.0
- по прошествии 20 минут (-30) связь не рвется
- если отключить от базы, вроде сессия отключается, не уверен ... так как сейчас висит 4 процесса httpd, вместо 6.
Для 8.3.4.365 - база БП 3.0 (на 8.2 не могу потестить, перевел уже на 8.3, но если нужно ...)
-При загрузке базы, табличка - временный сбой интернет-соединения. Если ее не трогать, можно в базе работать, при закрытии таблички, перезагрузка соединения с базой.
ps было пару раз, что таблички не было и можно было работать, с чем связано и такое поведение - непонятно.
79. kiruha Дронов (kiruha) 360 24.12.13 12:36 Сейчас в теме
А в SQL варианте веб сервер работает многопоточно или тоже по умолчанию в один поток ?
80. Алексей Белоусов (AllexSoft) 24.12.13 12:38 Сейчас в теме
(79) kiruha, в один поток, но там очереди не бывает, так как он всего лишь передатчик на 1C:Сервер, вот там очередь будет ну или на SQL Server, тут смотря что выполняется... поэтому для клиент-серверной смысла не имеет никакого
BTRVODKA; +1 Ответить
81. kiruha Дронов (kiruha) 360 24.12.13 12:45 Сейчас в теме
Если ,например, 50 клиентов обращаются к веб сервису 1С в SQL варианте - идет отработка кода вебсервиса -
1 получат данные - остальные будут жевать бамбук пока не отвалятся по тайм ауту ?
Или если они подключились под разными пользователями - то параллельно ?
82. Алексей Белоусов (AllexSoft) 24.12.13 12:51 Сейчас в теме
(81) kiruha, нет, ибо передача данных всегда быстрее чем их получение\обработка...
хотя вот если у тебя обмены идут через веб-сервисы есть смысл выделить статический второй экземпляр апача конкретно под обмен
83. Александр Бреднев (Chai Nic) 112 24.12.13 12:54 Сейчас в теме
(81) kiruha, нет, в клиент-сервере всё будет нормально - там веб-модуль всего лишь посредник по приему-передаче данных, по сути выполняющий функцию обертки серверных вызовов в http-протокол. А в файловой версии в состав веб-модуля входит встроенный сервер 1с, а вот у него один поток обслуживания серверных вызовов для конкретной базы. В принципе ничто не мешало им сделать его многопоточным, но они не захотели создавать конкурента классическому своему серверу, разумеется!
84. kiruha Дронов (kiruha) 360 24.12.13 13:39 Сейчас в теме
85. logdog (logdog) 26.12.13 16:05 Сейчас в теме
(83) А под классическим сервером что имеется ввиду?
86. Александр Бреднев (Chai Nic) 112 26.12.13 16:23 Сейчас в теме
(85) logdog, обычный сервер 1с для sql-базы
87. Юрий Лазаренко (TitanLuchs) 01.02.14 22:17 Сейчас в теме
Ух ты, недавно как раз возник вопрос подвисания 1С, когда кто-то из юзеров начинает запускать мегаотчеты и мегаобработки. Попробуем потестить, автору - спасибо!
88. Александр Бреднев (Chai Nic) 112 14.11.14 17:44 Сейчас в теме
В версии 1с 8.3.5 было исправлено много багов, поэтому публикация http://infostart.ru/public/242527/ становится вновь актуальна. Проверил - версия 8.3.1119 с редиректором (МикроСервер 1с) работает нормально, вылетов и зависаний 1с не замечено. В общем, пробуйте!
Оставьте свое сообщение