Имя: Пароль:
1C
1С v8
Высоконагруженные веб-сервисы 1С - скорость работы
0 MaxisUssr
 
02.03.15
09:41
Есть база на PostgreSQL, веб-сервер Apache, опубликован к примеру простейший веб-сервис (чтобы не отвлекаться на обсуждение кода методов, структуры базы и т.д), отдает данные типа 10 строк "Код-наименование". Этот запрос в самом методе веб-сервиса и упаковка в пакет XDTO происходит так - в общем тестируя через SoapUI получаем цифру 77-88 миллисекунд на ответ.
Но вот проблема - если делать нагрузочный тест, к примеру, кол-во запросов за секунду - то я могу получить всего 180 таких запросов , что очень мало.
Во время этого теста проц на сервере 1С загружен на 100%, все остальное вроде не загружено.

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

Или нужно стремиться ускорить выполнение одного запроса?
1 Rebelx
 
02.03.15
10:09
(0) запросы шлешь последовательно? и реально так будет в жизни?
Попробуй параллельно, с разных машин, и смотри как распараллеливается запрос в 1С - должно быть много сеансов.
если не хватает - добавляй сеансы - RTFM
2 MaxisUssr
 
02.03.15
10:13
(1)
Шлю через SoapUI пакет запросов, с разрывом в 1-5 миллисекунд каждый. Сеансов дофига в 1С.
3 shuhard
 
02.03.15
10:14
(0) если есть бюджет, то ответ очевиден - http://www.gilev.ru/
4 Rebelx
 
02.03.15
10:15
(2) дофига это сколько? добавь в ответ информацию о текущем сеансе. Посмотри статистику, сколько реально сеансов работает.
5 Rebelx
 
02.03.15
10:18
(3) нифига не очевиден. или ты думаешь, что они знают ответы на все вопросы? Или если ты не знаешь ответ на какой-нибудь вопрос - сразу лапки к верху, сдаемсяяяя?
6 vde69
 
02.03.15
10:24
(1)>>>77-88 миллисекунд на ответ.

это примерно 1 сек на ответ, по моему ответ очевиден - надо сокразать время на ответы.... хотя-бы, до 0.1 сек....

>>>кол-во запросов за секунду - то я могу получить всего 180 таких запросов

то есть ты имеешь примерно 150 конектов в секуунду...

проблемма в том, что 1с сеанс поднимает долго, я-бы пошел путем поднятия например 100 сеансов и поодержка их в открытом состоянии через всякие кеши, а замеры производил с второй, третей секунды, ибо первая секунда - это инициализация сеансов...
7 vde69
 
02.03.15
10:28
(6) кстати я делал похожую систему, только связь апач-1с я делал через ком, держал в переменных 10 открытых ком соединений... и текущие запросы в апаче определял в уже открытые ком обьекты, правда там с правами заморочка, я делал доп параметры в 1с для каждого запроса отдельные права через прарамтры функции делал...

писал на asp
8 MaxisUssr
 
02.03.15
10:28
(6)
Нет, в 1 секунде 1000 миллисекунд, 77 мс это 0.07 секунд.
Поднять 100 сеансов и поддерживать не вариант - проверяется именно количество различных пользователей, которые коннектятся к базе. Если делаю например 2 секунды то получаю всего 280-300 запросов.
9 Apokalipsec
 
02.03.15
10:29
(8) Железки-то какие?
10 MaxisUssr
 
02.03.15
10:29
(7)
10 соединений - этого хватало? Почему не 100 соединений?
(9)
Железо Xeon 2.4 2 проца , 12 гб памяти, ОС 64 бит.
11 vde69
 
02.03.15
10:31
(8) у тебя есть ID сеанса апача, его передаешь в виде параметра в функцию, по этому ID в 1с определяешь пользователя и его права...

хотя конечно практика может все мои слова опровергнуть...
12 Apokalipsec
 
02.03.15
10:31
распараллеливание, держать несколько веб-расширений, выделить под них отдельный сервер в кластере. Посмотреть на сам запрос,посмотреть его план.
В общем вариантов-то очень много)

У проца все ядра загружены?
Какая платформа? Как сеансы в рабочем процессе живут - все в одном?
13 vde69
 
02.03.15
10:33
(10) у меня было не на столько нагружено... у меня одновременоо 20-30 потоков было всего, мне хватало за глаза и одного сома... но делал на преспективу которая не случилась...
14 MaxisUssr
 
02.03.15
10:36
(4)
Например результат 173 ответа - в 1С в регистре логов вижу те же 173 сеанса - в чем смысл?
15 MaxisUssr
 
02.03.15
10:38
(12)
Запрос пустой совсем. "Выбрать Таб.Наименование, Таб.Код из Справочник.ИмяСпр". И все.
Платформа 8.2.14.528.
16 MaxisUssr
 
02.03.15
10:58
(12)
Где почитать про "Держать несколько веб-расширений, выделить под них отдельный сервер в кластере"?
17 MaxisUssr
 
02.03.15
11:08
(12) Подожди - что-то я запутался - у меня же SOAP веб-сервисы, причем тут веб-расширения?
18 Rebelx
 
02.03.15
11:11
(14) Нет, обманул. надо смотреть не сеансы, а соединения.
(17) веб-сервисы работают через веб-расширение.
1С выделяет пул соединений. по-умолчанию вроде 10
если надо масштабировать - надо увеличить пул.
но лично я не знаю, как апач распределяет запросы по соединениям
19 MaxisUssr
 
02.03.15
11:12
(6)
Особой разницы нет, судя по тесту. Если 100 сеансов пуляю одновременно или например 40 сеансов (которые могут не по одному разу успеть пульнуть запрос) - примерно 160-200 запросов за секунду отрабатывает и там, и там.
20 koreav
 
02.03.15
11:16
(0) Какой процесс грузит до 100%? Схему можно масштабировать поставив два апача, а перед ними балансировщик.
21 MaxisUssr
 
02.03.15
11:22
(20)
Postgre грузит.
22 MaxisUssr
 
02.03.15
11:25
(21)
Ошибся - Rphost конечно же.
23 Rebelx
 
02.03.15
11:28
(22) ну тут ответ очевиден - уперлись же в железо
24 Serginio1
 
02.03.15
11:38
25 Serginio1
 
02.03.15
11:40
Упрости УстановкаПараметровСеанса


v8: Web сервис, момент подключения
Для многих случаев можно для вэб сервисов просто упростить УстановкаПараметровСеанса
26 koreav
 
02.03.15
11:52
Пример схемы с балансировщиком http://habrahabr.ru/post/213739/
в вашем случае каждый апач должен обращаться к отдельному серверу приложений, если затык в rphost
27 MaxisUssr
 
03.03.15
14:31
(25)
Помогло немножко совсем. 0.1 сек. выиграл вроде.
28 Fragster
 
гуру
03.03.15
14:44
а еще можно заюзать вместо вебсервисов http-сервисы. по крайней мере будет контроль над объемом сериализации.
29 Fragster
 
гуру
03.03.15
14:44
(28)+ вплоть до полного её отсутствия
30 MaxisUssr
 
03.03.15
14:50
Функция GetCategories()
    
    Возврат Неопределено;    
    
КонецФункции

отклик даже на такой метод - уже 0.086 сек;
установку параметров сеанса отключил.
31 Fragster
 
гуру
03.03.15
15:07
(30) а на http сервис сколько задержка?
32 Гёдза
 
03.03.15
15:10
(6) веб сервер кэширует соединение с 1с, так что последовательные запросы новый коннект не поднимают
33 MaxisUssr
 
03.03.15
15:17
(31)
У нас 8.2.14... , поэтому HTTP к сожалению нет
34 MaxisUssr
 
04.03.15
12:47
Проверил на 8.3 (поставил файловую базу) - пустой запрос примерно 20 миллисекунд идет, на SOAP тот же пустой запрос 0.7 - 0.8 миллисекунд! Не знаю, как на серверной 8.3 будет себя вести - подозреваю, что также.
35 MaxisUssr
 
04.03.15
13:01
(34)
Ошибка - В SOAP 70-80 миллисекунд, в HTTP - до 20 миллисекунд
36 MM
 
04.03.15
13:34
(35) А если нагрузить http?
Может там и нагрузка на процессор меньше при большом количестве обращений?
37 pumbaEO
 
04.03.15
15:18
5 apache и haproxy с балансировкой robinbobin.
38 MaxisUssr
 
05.03.15
10:25
(36)
Да, хочу нагрузить его, но вот проблема - у нас 8.2 стоит серверная, а на 8.3 лицухи на сервер нету. Вчера вечером-ночьюпробовал поставить агент 8.3 на другой порт - не работал - пишет что нет серверной лицензии.
Попробовал тогда отключи агент 8.2, включить 8.3 на стандартном 1541 порту, лицензию нашел но базу не создавал (видимо что-то еще недоставил, а рушить все, удаляя текущий агент сервера - не могу - люди же работают).

Удалось только в файловом варианте развернуть 8.3 и нагружить http - но там печаль - никакой параллельности вообще, вроде, читал, что в файловой параллельности нет совсем.

Добавил 6 или 8 рабочих процессов на сервер 1С - в результате процы стали немного больше загружены при массовой нагрузке "тяжелыми" запросами (легкие запросы полностью грузили сервер  и при одном раб.процессе)
39 MM
 
05.03.15
10:28
(38) Там надо файл лицензии сделать видимым 8.3, в одном из конфигурационных файлов путь указать. Если уж перемещать файл лицензии не хочется.
40 fisher
 
05.03.15
10:33
(39) Велика вероятность, что для 8.3 придется лицензировать заново. Механизмы лицензирования допиливались и что-то может не совпасть. Мне при переходе с 8.2 на 8.3 на том же железе пришлось генерить лицензии заново.
41 MaxisUssr
 
05.03.15
10:36
(39)
Если отключить агент 8.2 и включить тупо 8.3 на том же порту, как я сделал - он нашел лицензии, но базу не смог создать (видимо не доделал я что-то - а удалять рабочие настройки и агента сервера и консоль 8.2 не стал, т.к сервер-то рабочий).
42 pumbaEO
 
05.03.15
10:45
(41) 1. 8.3. запусти на другом порту.
2. поставь сервер 1с на линухе и соедини их добавив к виндовому серверу 8.3 еще один сервер по ip.
3. в ролях для виндового сервера добавь только роль "Лицензирование", а остальные запрети. Для линуксового все разрешить.
43 fisher
 
05.03.15
11:15
Вообще, интересная ветка. Ежу было понятно, что 1С по определению не годится для публичных сервисов. Только для приватных порталов. Но результаты реальных тестов - это уже конкретная информация.
И я не знаю, как это удалось разработчикам 1С, но давно уже в тестах замечена удивительная тенденция - очень часто узким местом на банальных операциях с СУБД становится не дисковая подсистема (что как бы логично), а процессорные мощности.
44 fisher
 
05.03.15
11:17
Можно, конечно, побыть оптимистом и увидеть причину этого в эффективном кэшировании.
45 MaxisUssr
 
05.03.15
11:18
(43)
Про публичные сервисы - спорное утверждение. Если нам нужно не постоянное получение данных миллионов строк, а какое-то действие (например, принять заявку/оставить отзыв и т.п) - по-моему 1С для этого вполне сгодится для средних (не больших и гигантских) порталов.
46 fisher
 
05.03.15
11:27
(45) Согласен, погорячился. Для общедоступного портала для размещения заказов в компании, где поток заявок заведомо ограничен и хорошо прогнозируем - сгодится вполне.
А вот даже просто для хранения данных, доступ к которым может стать резко популярным - уже болт.
47 MaxisUssr
 
05.03.15
11:38
(46)
Это очень печально - платформа-то в принципе не самая быстрая, но работает стабильно - если удастся разобраться с масштабируемостью (как например совет в (37)) - может быть создан неплохой проект.
48 oleg_km
 
05.03.15
12:23
(47) Ну просто конфу придется затачивать под быстродействие. Например как многие создатели WMS для мгновенного отклика избегают регистров, все делают на документа, блокировки только на изменение текущих остатков. Это слабофункционально, но я у себя так делал модуль инвентаризации - все летает и никаких блокировок.
49 MaxisUssr
 
05.03.15
12:44
(48)
Да, приходится все пихать в пару регистров сведений с примитивными строковыми и числовыми полями. Чтобы быстро считывать это все.
50 Гёдза
 
05.03.15
12:44
Свой фэйсбук на 1с хочешь написать чтоли?
51 MaxisUssr
 
05.03.15
12:46
(50)
Да нет конечно - но даже 300-600 запросов в секунду - очень большая проблема получить. И это вроде как считается немного.
52 Гёдза
 
05.03.15
12:48
(51) последовательных?
53 Гёдза
 
05.03.15
12:48
параллельность достигается не только за счет уменьшения времени 1 процедуры
54 MaxisUssr
 
05.03.15
12:51
(52)
Параллельных конечно
55 Гёдза
 
05.03.15
12:53
(54) но тут уже все от железа зависит
56 Гёдза
 
05.03.15
12:54
На чем затык в железе?
57 MaxisUssr
 
05.03.15
12:59
(56)
Процы загружены на 100% (на мелких запросах) и процентов на 60 на средних запросах (пробовал увеличить пул соединений Apache, в Postgre установил тоже макс.кол-во соединений 10000 - особо не помогло. Помогло немного добавление нескольких рабочих процессов к серверу 1С)
58 fisher
 
05.03.15
15:15
(57) Ну так ты похоже в процы и упираешься. То, о чем я говорил в (43). На сервере приложений 1С оказывается подозрительно много накладных расходов для банальных операций.
59 jk3
 
06.03.15
23:54
(51) Интересно, при линейном увеличении количества параллельных запросов, время ответа растёт линейно, не замеряли?
60 iv_iv_iv
 
07.03.15
02:55
(50)
Да нет конечно - но даже 300-600 запросов в секунду - очень большая проблема получить. И это вроде как считается немного.
------------
вам надо юзать sap - с вашей производительностью.
61 rphosts
 
07.03.15
03:18
(28) +1 Post-запросы быстрее отрабатывают чем Web-сервисы
62 Serginio1
 
07.03.15
12:29
63 MadHead
 
07.03.15
13:32
хотите скорости в данном вопросе, то вам на java. Или что бы все просто и из коробки, то на .net. Net конечно менее гибко и помедленнее, но если проект простой, то меньше времени на кофигурацию потратите
64 MadHead
 
07.03.15
13:34
интегрировать сейчас модно через rest full
65 Serginio1
 
07.03.15
14:48
66 Serginio1
 
07.03.15
15:18
Можно сгенерить классы для Code First
http://www.c-sharpcorner.com/UploadFile/ff2f08/entity-framework-code-first-data-annotations/
67 Serginio1
 
07.03.15
15:21
68 Serginio1
 
07.03.15
15:53
69 Serginio1
 
07.03.15
16:08
70 Serginio1
 
07.03.15
16:14
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.