| 
    
            
         
         | 
    
  | 
Высоконагруженные веб-сервисы 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 
 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |