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

Решение проблемы однопоточности модуля веб-сервера при работе с файловой базой путем запуска нескольких экземпляров веб-сервера 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 Files1cv828.2.18.82inwsap22.dll

APACHE_PATH — путь к каталогу Apache

вариант: set APACHE_PATH=C:Program FilesApache Software FoundationApache2.2

 

Запуск скрипта с отсутствующим путём к базе данных вызывает удаление регистрации экземпляра веб-сервера, связанного с указанной базой и портом.

 

Пример использования

 

Задача: Нужно создать инфраструктуру для работы 5 пользователей в одной файловой базе через веб-сервер без взаимного ожидания выполнения серверных процессов.

Решение: Создать 5 экземпляров веб-сервера Apache и каждому клиенту сопоставить свой порт.

 

1. Настраиваем скрипт, указав в переменных MODULE_1C и APACHE_PATH актуальные для системы параметры.

2. Запускаем скрипт последовательно 5 раз, меняя порт

c: est>web_server_1c.cmd buh_base 8001 d:asesuh_base 

 

c: est>web_server_1c.cmd buh_base 8002 d:asesuh_base

 

c: est>web_server_1c.cmd buh_base 8003 d:asesuh_base

 

c: est>web_server_1c.cmd buh_base 8004 d:asesuh_base

 

c: est>web_server_1c.cmd buh_base 8005 d:asesuh_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.  

 

87 Comments

  1. afanasko

    А как обстоит дело с блокировками при таком варианте работы? Транзакции работают?

    Reply
  2. Chai Nic

    (1) afanasko, транзакции и блокировки работают так же, как в файловой базе — проверил. По сути, каждый экземпляр веб-сервера — это клиент для базы.

    Reply
  3. afanasko

    (2) Chai Nic, тогда это очень круто :). Если еще смастерить «сервер», который автоматически экземпляры апача генерить будет для каждого коннекта — то зачем будет нужен микросервер от 1С?

    Reply
  4. AllexSoft

    Спасибо! как раз есть задумки на этот счет, я сам уже давно догадался использовать несколько процессов апача, но каждому свой ярлык делать не айс… и вот какие мысли есть по этому поводу:

    Написать простенький сервис-тунель на Delphi , который будет принимать все входящие коннекты на порт скажем 8080, и распределять их динамически по N веб-сервисам апача… просто циклом отправляя клиентов работать 1ого клиента на первый процесс, второго на второй.. шестого снова на первый, седьмого на второй и тд.. понятно думаю смысл ) 1С:Сервера это конечно не заменит, но тогда можно будет забыть о работе через локалку в файловом варианте )

    Reply
  5. Chai Nic

    (3) afanasko, да, у меня тоже есть мысль написать сервис-диспетчер, который бы слушал один порт, принимая на него запросы клиентов, и пробрасывал бы соединение на наименее загруженный веб-сервер. Но это надо будет дельфи или си вспоминать)

    Reply
  6. kiruha

    А как там дальше. Вот 5 пользователей ушли с работы, утром пришли, кто то выдернул шнур по глупости из розетки. Сервер перегрузили или нет. Как там все будет ?

    Reply
  7. kiruha

    Особенно учитывая что на 5 юзерах штатных админов и 1С ников может не быть

    Reply
  8. Chai Nic

    (6) kiruha, насколько я в курсе, модуль веб-сервера периодически принимает от клиентов пакеты «keep alive», если какое-то время их не получает — считает что сеанс умер и отрубает его (есть подозрение на 20 минут). В этом смысле ничего не меняется, что с одним сервисом, что с несколькими на одной базе. Каждый будет работать по тому же принципу. В общем, по сути вообще ничего не меняется, можно эту функцию настроить на сервере, а работать по старинке — на одном апаче.. это если некому ярлыки пользователям раскидать по уму. Хуже не будет в любом случае.

    Reply
  9. logdog

    (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″/>

    Reply
  10. Vladimir Litvinenko

    Хорошее решение, но требуется ручное распределение пользователей по веб-серверам. Если написать автораспределение подключений по сервисам, то получится аналог сервера 1С для файлового варианта. Сервисы Апача вместо rphost, распределяющая прога — вместо rmngr.

    Chai Nic, можно написать про еще один серьезный плюс такого решения — защищенность файлов базы данных от копирования или повреждения ручками пользователей. Только ради этого стоит применять такой подход. Особенно когда «узкое горлышко» веб-сервера перестает иметь значение.

    Reply
  11. Chai Nic

    (9) logdog, однопоточность модуля веб-сервера проявляется лишь в контексте одной информационной базы. Если на одном экземпляре апача висит несколько информационных баз — их серверные вызовы выполняются независимо.

    Reply
  12. kiruha

    (11) VladimirL,

    +1

    Вообщем нужно хотя бы простое автоматическое подключение к разным.

    Вероятно можно реализовать через файлики настроек, типа поиска ключа.

    Типа установил и забыл

    Reply
  13. Chai Nic

    (13) kiruha, автоматическое решение нужно, но оно не получится таким уж простым. Дело в том, что клиент не устанавливает постоянное tcp-соединение с сервером, сеанс поддерживается лишь на прикладном уровне. Алгоритм менеджера должен быть примерно такой — клиент подключается к менеджеру (по tcp), тот смотрит в таблицу трансляции, если для клиента в ней записи нет — выбирается свободный (или менее загруженный) рабочий сервис, данные транслируются, и в таблицу трансляции записываются сведения «клиент такой-то подключен к серверу такому-то тогда-то». При последующих запросах уже используются данные из таблицы. Периодически таблица трансляции проверяется на записи, время жизни которых превысило некий порог — они удаляются. Как-то так..

    Reply
  14. maxx

    (5)Скажите не сильно разбираюсь в Apache, a нельзя установить 5 раз Apache , типа 5 каталогов ProgramFilesApache1 ProgramFilesApache2 ProgramFilesApache3 ProgramFilesApache4 ProgramFilesApache5 со своими конф. файлом своим портом или будут проблемы?

    Reply
  15. AllexSoft

    (14) Chai Nic, а откуда инфа о том что соединение не висит постоянно ?

    Reply
  16. Chai Nic

    (15) maxx, можно конечно и так сделать, но зачем? Апач нормально работает с указанием конфигурационного файла.

    (16) AllexSoft, это можно увидеть в соединениях процессов 1cv8c или httpd через Process Explorer или netstat.

    Reply
  17. AllexSoft

    (17) Chai Nic, если он переподключается постоянно, то будет ли разница в контексте какого сервера апача он подключиться в дальнейшем ? ведь база то одна все равно и апачи на одном сервере вияст, все темпы будут одни и тд… может и смысла нет в таблице трансляции ?

    ПС: на личку ответите ?

    Reply
  18. Chai Nic

    (18) AllexSoft, неее, к какому угодно, я думаю, нельзя, ведь контекст приложения (параметры сеанса и тому подобное) держит именно модуль веб-сервера, а он на каждом серверном процессе свой.

    Reply
  19. AllexSoft

    (19) Chai Nic, нее.. я думаю что веб-сервер то как раз ничего не держит в случае апача… ибо при отвале коннекта он бы все чистил у себя — для него это просто отключившийся клиент. А вот 1С где то держит это, чувствую что держит она это в темпах у себя, как всегда все на файликах-темпах в 1С же… ))

    ПС: апач ничего не держит с вероятностью в 99%, может компонента эта 1С-ная держит конечно.. нужна проверка все равно =)

    Reply
  20. Chai Nic

    (20) AllexSoft, разумеется, апач ничего не держит. Но он в данном случае всего лишь «запускалка» для модуля 1с. И вот именно этот модуль и создает временные файлы, кроме того, хранит что-то, относящееся к запущенным сеансам, в своей оперативной памяти. А разные экземпляры апача — разные модули 1с. Сеансы, открытые на одном из них, на другом модуле будут чужими, скорее всего просто коннект отвалится с ошибкой.

    Reply
  21. logdog

    Для запуска веб-клиента, нужен только апатч или он должен быть в связке с nginx?

    Reply
  22. AllexSoft

    (22) logdog, только апач

    Reply
  23. logdog

    (23)Есть еще такой продукт Apache Traffic Server 4.0 — это замена апатчу (можно ли на нем поднимать веб-сервер для 1С)?

    Reply
  24. AllexSoft

    (24) logdog, думаю что не получится, я пробовал ставить Denver, не получилось ) а с обычным стандартным апачем взлетело сразу без мучений

    Reply
  25. logdog

    (25)Ну, Denver — это «комбайн», а нам ни базы данных, ни php не нужно.

    Reply
  26. Chai Nic

    (26) logdog, да даже из всего огромного количества модулей апача нужен лишь один mod_alias в дополнение к модулю 1с…

    Reply
  27. logdog

    (27) Я бы еще mod_ssl.so добавил. (но и mod_auth_* нужны)

    Reply
  28. Chai Nic

    (28) logdog, ну это всё-таки не обязательно, в 99% случаев с https не связываются, поскольку с базой работа ведется внутри локальной сети или vpn..

    Reply
  29. AllexSoft

    у меня кстати так и не удалось завести Аапач+SSL + 1C ( не хочет видеть 1С его и все

    Reply
  30. logdog

    (30)Тут статья была, Вы поищите, я когда-то ради теста настроил — работало.

    Reply
  31. AllexSoft

    (31) logdog, сначала сам, потом по ней пытался… не захотел долго возиться, но с первого раза не взлетело

    Reply
  32. logdog

    Интересует вопрос по тонкой настройке apache:

    Cейчас висят два процесса httpd (почему два?) и один из них отжирает около 250 метров памяти, хотя 3 часа как отключились от веб-клиента (

    Reply
  33. Chai Nic

    (33) logdog, а ничего тут не сделаешь, память занимает не апач, а серверный модуль 1с. И занимает её он не просто так, а кэширует в памяти часть метаданных. Так, чтобы при повторном подключении клиенту не приходилось ждать загрузки. Что касается двух процессов на одну службу — так и должно быть, один как я понимаю служебный, а второй — собственно рабочий.

    Reply
  34. logdog

    (34) Тогда вопрос с точки зрения лицензий, этот висящий процесс занимает клиентскую лицензию 1C? И закрытие браузера клиентом, отнюдь не означает освобождение лицензии (она освобождается, только тогда, когда время жизни соединения истечет)?

    Reply
  35. Chai Nic

    (35) logdog, клиентскую лицензию в случае веб-браузера занимает пользовательский сеанс 1с, а не серверный процесс. Внутри одного серверного процесса может работать и несколько сеансов 1с, при этом каждому нужна лицензия. По поводу времени освобождения лицензии после завершения сеанса (нормального или аварийного) — тут ничего пока сказать не могу, надо проверять.

    Reply
  36. logdog

    (34)Проверил, к сожалению — это верно до истечения времени жизни сессии. До 320, после 250 — память просто не освобождается.

    Reply
  37. Chai Nic

    (37) logdog, я не думаю, что это так уж важно. А вообще, можно перезапускать сервисы по ночам планировщиком, заодно и бэкап сделать во время остановки.

    Reply
  38. asved.ru

    А на IIS то же самое делается вполне стандартными средствами.

    Reply
  39. Chai Nic

    (39) asved.ru, так и на апаче вполне стандартными.. или что вы понимаете под «стандартными средствами»?

    Reply
  40. AllexSoft

    (39) asved.ru, например как?

    Reply
  41. Chai Nic

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

    Reply
  42. AllexSoft

    (42) asved.ru, кажется вы не прониклись идеей, тема слишком специфична к сожалению… сам пытался подобрать что то более менее готовое, но увы ничего… разве что на роутере (или софт-роутере) настраивать порт форвардинг, но это опять немного не то

    Reply
  43. asved.ru

    (43) Chai Nic,

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

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

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

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

    Поймите уже, ценность решения — не в его хитрости, а в его простоте. А с гуй/консоль вы вообще форумом ошиблись, такого рода холивары очень любят на ЛОРе.

    Reply
  44. Chai Nic

    (45) asved.ru, «можно сделать все на одном порту, одном экземпляре, и мы получим ту же самую параллельность работы» — каким образом, если wsap22.dll — однопоточная?

    Reply
  45. asved.ru

    (46) Chai Nic, Вы путаете однопоточность ISAPI-компонента и однопоточность веб-сервера. Никто нам не мешает вызывать функцию однопоточной DLL столько раз, сколько мы хотим, не дожидаясь завершения предыдущего вызова.

    Кстати сказать, я не специалист по апачу, но теоретически и в нем должна быть возможность нафоркать сколько нужно рабочих процессов.

    Reply
  46. AllexSoft
    Кстати сказать, я не специалист по апачу, но теоретически и в нем должна быть возможность нафоркать сколько нужно рабочих процессов

    что и делает ТС… говорю же, вы не прониклись идеей, ну или не внимательно читали

    Reply
  47. Chai Nic

    (47) asved.ru, «Никто нам не мешает вызывать функцию однопоточной DLL столько раз, сколько мы хотим, не дожидаясь завершения предыдущего вызова» — это всё слова… можете привести рабочий пример настройки ииса, позволяющей во время серверного вызова выполнять серверные вызовы других сеансов 1с?

    Reply
  48. Chai Nic

    Прошу обратить внимание на мою новую публикацию на ту же тему.

    http://infostart.ru/public/242527/

    Reply
  49. AllexSoft

    (50) Chai Nic, пропало куда то…

    Reply
  50. Chai Nic

    Тема пока убрана.. обнаружились баги, которые пока непонятно как решать.

    Reply
  51. AllexSoft

    (52) Chai Nic, расскажешь про баги?

    Reply
  52. Chai Nic

    (53) AllexSoft, при обычной работе всё нормально, а вот при простое клиента сервер 1с ведет себя непредсказуемо.. В версии 8.2 клиент после простоя более 20 минут просто теряет сеанс (вылетает ошибка что сеанс закрыт), в версии 8.3 клиент виснет, а серверный процесс при этом грузит проц.

    Reply
  53. AllexSoft
    в версии 8.3 клиент виснет, а серверный процесс при этом грузит проц.

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

    8.2 клиент после простоя более 20 минут просто теряет сеанс (вылетает ошибка что сеанс закрыт)

    а он что не пытается проверить коннект ?

    Reply
  54. Chai Nic

    (55) «а он что не пытается проверить коннект ?»

    Да скорее всего пытается, но таким способом, который несовместим с редиректором..

    Reply
  55. AllexSoft

    (56) Chai Nic, интересно очень… на выходных покопаюсь

    Reply
  56. lustin

    (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

    Reply
  57. Chai Nic

    (58) lustin, к сожалению, нельзя единый адрес использовать.. Клиент, подключающийся к веб-серверу, должен подключаться именно к конкретному экземпляру веб-сервера, а не к перенаправителю. Это уже проверено. Соответствие веб-модуля с клиентом должно быть взаимно-однозначным. Иначе возникают глюки, описанные в (54).

    Еще можно использовать вариант, когда веб-клиенту при подключении к единому адресу будет отдаваться html-директива переадресации, вызывая перезагрузку странички с нового адреса. А для тонкого клиента придется писать собственную запускалку, поскольку он не воспринимает переадресацию в html..

    Reply
  58. logdog

    (54) Chai Nic, Да, оно (

    (55) А в 1С эти баги отправляли?

    Reply
  59. Chai Nic

    (60) logdog, вряд ли это баги с точки зрения 1с.. они же не декларировали возможность работы на нескольких серверах через трансляцию с одного порта.

    Reply
  60. AllexSoft

    (61) Chai Nic, вчера на весь день тест маппера поставил своего, проблемы как у тебя не наблюдаю, при простое (тестил до 2х часов) все работает и не отваливается

    Reply
  61. Chai Nic

    (62) AllexSoft, хм.. ну тогда даже не знаю, в чем может быть проблема… А ты пробовал отрубать клиентские процессы жестко? Что происходит, когда истекает 20-минутный таймаут веб-модуля? Работает ли переход в монопольный режим, например для удаления помеченных объектов?

    Reply
  62. AllexSoft

    (63) Chai Nic,

    А ты пробовал отрубать клиентские процессы жестко?

    что имеешь ввиду ?

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

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

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

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

    Кстати, мне удавалось заархивировать базу даже с включенными юзерами через апач, наблюдается странный глюк, в активных юзерах никого нет (кроме конфигуратора), хотя юзеры сидят и при мне работают в это время в этой базе

    Reply
  63. Chai Nic

    Ну прервать процесс 1cv8c.exe в диспетчере задач, имитировав этим зависание клиентского компа или разрыв сети.. Из списка сеансов через 20 минут сеанс удаляется? Желательно проверить вариант, когда отрубаемый процесс редиректится на другой порт, чем тот, с которого смотрим список сеансов.

    Reply
  64. AllexSoft

    (65) Chai Nic,

    Ну прервать процесс 1cv8c.exe в диспетчере задач, имитировав этим зависание клиентского компа или разрыв сети..

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

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

    Проверю, очень похоже что так и есть

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

    вот это проверить не смогу, я написал только статические маршруты к сожалению, потом узнал что ты пишешь и забил на свое детище )

    Reply
  65. Chai Nic

    (66) AllexSoft, «останов маппера, и его включение через пару секунд» — это не то, нужна именно «внезапная смерть клиента».

    Reply
  66. AllexSoft

    (67) Chai Nic,

    внезапная смерть клиента

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

    Reply
  67. Chai Nic

    (68) AllexSoft, суть в том, что повторное подключение (которое выводит список сеансов) должно быть через другой экземпляр веб-сервиса.

    Reply
  68. AllexSoft

    (69) Chai Nic, я список сеансов смотрю через конфигуратор, так что ему все равно через какой экземпляр подключился новый коннект

    ПС: через 20 мин отключенный сеанс отвалился… новый сеанс висит до сих пор

    Reply
  69. Chai Nic

    Я смотрел через другой сеанс, от другого клиентского ip и соответственно, с рабочим процессом на другом экземпляре апача (на другом порту).

    Reply
  70. Chai Nic

    В общем, ничего больше сказать не могу. Если у вас это каким-то образом работает — рад за вас.

    Reply
  71. logdog

    (62) AllexSoft, версию 8.2 или 8.3 тестили?

    Reply
  72. AllexSoft

    (73) logdog, 8.2.18..

    Reply
  73. AllexSoft

    (72) Chai Nic, может у тебя пакеты keep-alive не отрабатываются правильно или что то в этом духе ?

    Reply
  74. Chai Nic

    (75) AllexSoft, у меня вообще не делается разницы между пакетами. Есть tcp-соединение, оно и транслируется, пока не закончится. На каждое соединениние между клиентом и портом редиректора создается такое же соединение между редиректором и конкретным портом апача, и между ними передаются данные.

    Reply
  75. Chai Nic

    Странно.. вот сейчас попробовал — ничего не виснет.. но и зависший сеанс не отключается через 20 минут .. ничего не делал.

    Reply
  76. logdog

    (77)(74)

    Для 8.2.19.80 — база БП 2.0

    — по прошествии 20 минут (-30) связь не рвется

    — если отключить от базы, вроде сессия отключается, не уверен … так как сейчас висит 4 процесса httpd, вместо 6.

    Для 8.3.4.365 — база БП 3.0 (на 8.2 не могу потестить, перевел уже на 8.3, но если нужно …)

    -При загрузке базы, табличка — временный сбой интернет-соединения. Если ее не трогать, можно в базе работать, при закрытии таблички, перезагрузка соединения с базой.

    ps было пару раз, что таблички не было и можно было работать, с чем связано и такое поведение — непонятно.

    Reply
  77. kiruha

    А в SQL варианте веб сервер работает многопоточно или тоже по умолчанию в один поток ?

    Reply
  78. AllexSoft

    (79) kiruha, в один поток, но там очереди не бывает, так как он всего лишь передатчик на 1C:Сервер, вот там очередь будет ну или на SQL Server, тут смотря что выполняется… поэтому для клиент-серверной смысла не имеет никакого

    Reply
  79. kiruha

    Если ,например, 50 клиентов обращаются к веб сервису 1С в SQL варианте — идет отработка кода вебсервиса —

    1 получат данные — остальные будут жевать бамбук пока не отвалятся по тайм ауту ?

    Или если они подключились под разными пользователями — то параллельно ?

    Reply
  80. AllexSoft

    (81) kiruha, нет, ибо передача данных всегда быстрее чем их получениеобработка…

    хотя вот если у тебя обмены идут через веб-сервисы есть смысл выделить статический второй экземпляр апача конкретно под обмен

    Reply
  81. Chai Nic

    (81) kiruha, нет, в клиент-сервере всё будет нормально — там веб-модуль всего лишь посредник по приему-передаче данных, по сути выполняющий функцию обертки серверных вызовов в http-протокол. А в файловой версии в состав веб-модуля входит встроенный сервер 1с, а вот у него один поток обслуживания серверных вызовов для конкретной базы. В принципе ничто не мешало им сделать его многопоточным, но они не захотели создавать конкурента классическому своему серверу, разумеется!

    Reply
  82. kiruha

    AllexSoft,Chai Nic — Спасибо!

    Reply
  83. logdog

    (83) А под классическим сервером что имеется ввиду?

    Reply
  84. Chai Nic

    (85) logdog, обычный сервер 1с для sql-базы

    Reply
  85. TitanLuchs

    Ух ты, недавно как раз возник вопрос подвисания 1С, когда кто-то из юзеров начинает запускать мегаотчеты и мегаобработки. Попробуем потестить, автору — спасибо!

    Reply
  86. Chai Nic

    В версии 1с 8.3.5 было исправлено много багов, поэтому публикация http://infostart.ru/public/242527/ становится вновь актуальна. Проверил — версия 8.3.1119 с редиректором (МикроСервер 1с) работает нормально, вылетов и зависаний 1с не замечено. В общем, пробуйте!

    Reply
  87. Chai Nic

    Внимание! При использовании последних версий apache 2.4 поменялся минимально необходимый перечень модулей, необходимых для работы модуля 1с. Таким образом, чтобы применить решение для Apache 2.4, нужно перед использованием исправить cmd-файл, добавив строчку

    echo LoadModule authz_core_module modules/mod_authz_core.so >> «%CFG_FILE_NAME%»

    перед строчкой

    echo LoadModule _1cws_module «%MODULE_1C%» >> «%CFG_FILE_NAME%»

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *