gifts2017

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

Опубликовал Александр Бреднев (Chai Nic) в раздел Администрирование - Оптимизация БД (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
84
.cmd 0.1 4,35Kb 84 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

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

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

Типа установил и забыл
14. Александр Бреднев (Chai Nic) 10.12.13 10:45
(13) kiruha, автоматическое решение нужно, но оно не получится таким уж простым. Дело в том, что клиент не устанавливает постоянное tcp-соединение с сервером, сеанс поддерживается лишь на прикладном уровне. Алгоритм менеджера должен быть примерно такой - клиент подключается к менеджеру (по tcp), тот смотрит в таблицу трансляции, если для клиента в ней записи нет - выбирается свободный (или менее загруженный) рабочий сервис, данные транслируются, и в таблицу трансляции записываются сведения "клиент такой-то подключен к серверу такому-то тогда-то". При последующих запросах уже используются данные из таблицы. Периодически таблица трансляции проверяется на записи, время жизни которых превысило некий порог - они удаляются. Как-то так..
15. Maxim Goncharov (maxx) 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) 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) 10.12.13 13:26
(18) AllexSoft, неее, к какому угодно, я думаю, нельзя, ведь контекст приложения (параметры сеанса и тому подобное) держит именно модуль веб-сервера, а он на каждом серверном процессе свой.
20. Алексей Белоусов (AllexSoft) 10.12.13 13:36
(19) Chai Nic, нее.. я думаю что веб-сервер то как раз ничего не держит в случае апача... ибо при отвале коннекта он бы все чистил у себя - для него это просто отключившийся клиент. А вот 1С где то держит это, чувствую что держит она это в темпах у себя, как всегда все на файликах-темпах в 1С же... ))
ПС: апач ничего не держит с вероятностью в 99%, может компонента эта 1С-ная держит конечно.. нужна проверка все равно =)
21. Александр Бреднев (Chai Nic) 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) 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) 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) 10.12.13 22:19
(33) logdog, а ничего тут не сделаешь, память занимает не апач, а серверный модуль 1с. И занимает её он не просто так, а кэширует в памяти часть метаданных. Так, чтобы при повторном подключении клиенту не приходилось ждать загрузки. Что касается двух процессов на одну службу - так и должно быть, один как я понимаю служебный, а второй - собственно рабочий.
35. logdog (logdog) 10.12.13 22:26
(34) Тогда вопрос с точки зрения лицензий, этот висящий процесс занимает клиентскую лицензию 1C? И закрытие браузера клиентом, отнюдь не означает освобождение лицензии (она освобождается, только тогда, когда время жизни соединения истечет)?
36. Александр Бреднев (Chai Nic) 10.12.13 23:21
(35) logdog, клиентскую лицензию в случае веб-браузера занимает пользовательский сеанс 1с, а не серверный процесс. Внутри одного серверного процесса может работать и несколько сеансов 1с, при этом каждому нужна лицензия. По поводу времени освобождения лицензии после завершения сеанса (нормального или аварийного) - тут ничего пока сказать не могу, надо проверять.
37. logdog (logdog) 11.12.13 13:02
(34)Проверил, к сожалению - это верно до истечения времени жизни сессии. До 320, после 250 - память просто не освобождается.
38. Александр Бреднев (Chai Nic) 11.12.13 13:52
(37) logdog, я не думаю, что это так уж важно. А вообще, можно перезапускать сервисы по ночам планировщиком, заодно и бэкап сделать во время остановки.
39. Антон Стеклов (asved.ru) 17.12.13 04:58
А на IIS то же самое делается вполне стандартными средствами.
40. Александр Бреднев (Chai Nic) 17.12.13 07:56
(39) asved.ru, так и на апаче вполне стандартными.. или что вы понимаете под "стандартными средствами"?
41. Алексей Белоусов (AllexSoft) 17.12.13 10:08
42. Антон Стеклов (asved.ru) 17.12.13 10:12
(40) Chai Nic, (41) AllexSoft, количество рабочих процессов куазывается в настройках пула приложения.

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

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

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

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


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

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

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

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

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

http://infostart.ru/public/242527/
51. Алексей Белоусов (AllexSoft) 20.12.13 16:00
(50) Chai Nic, пропало куда то...
52. Александр Бреднев (Chai Nic) 20.12.13 16:01
Тема пока убрана.. обнаружились баги, которые пока непонятно как решать.
53. Алексей Белоусов (AllexSoft) 20.12.13 16:03
(52) Chai Nic, расскажешь про баги?
54. Александр Бреднев (Chai Nic) 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) 20.12.13 16:37
(55) "а он что не пытается проверить коннект ?"
Да скорее всего пытается, но таким способом, который несовместим с редиректором..
57. Алексей Белоусов (AllexSoft) 20.12.13 16:48
(56) Chai Nic, интересно очень... на выходных покопаюсь
58. Алексей Лустин (lustin) 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) 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) 23.12.13 08:00
(60) logdog, вряд ли это баги с точки зрения 1с.. они же не декларировали возможность работы на нескольких серверах через трансляцию с одного порта.
62. Алексей Белоусов (AllexSoft) 23.12.13 10:19
(61) Chai Nic, вчера на весь день тест маппера поставил своего, проблемы как у тебя не наблюдаю, при простое (тестил до 2х часов) все работает и не отваливается
63. Александр Бреднев (Chai Nic) 23.12.13 10:30
(62) AllexSoft, хм.. ну тогда даже не знаю, в чем может быть проблема... А ты пробовал отрубать клиентские процессы жестко? Что происходит, когда истекает 20-минутный таймаут веб-модуля? Работает ли переход в монопольный режим, например для удаления помеченных объектов?
64. Алексей Белоусов (AllexSoft) 23.12.13 10:38
(63) Chai Nic,
А ты пробовал отрубать клиентские процессы жестко?

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

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

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

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

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

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

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