Вход | Регистрация


1С:Предприятие ::

Метки: 

Высоконагруженные веб-сервисы на 1С

Я
   anchar007
 
08.12.17 - 09:04
Всем привет!
Интересует возможность создания веб-сервиса на 1С, который мог бы обрабатывать не меньше 100 запросов в секунду (от 1-2 потоков).
В общем я тестировал файловую и серверную базу на локальном ПК i3-6100 3.7 ГГц, 8Гб ОЗУ, SSD.
Файловая база с элементарным веб-сервисом типа "По номеру номенклатуры вернуть её наименование" может обрабатывать примерно 150 запросов в секунду.
Серверная с таким же веб-сервисом обрабатывает примерно 110 запросов в секунду.
Но если в веб-сервис добавить арифметические действия, например "за период от N до M вернуть наименование номенклатуры и её стоимость, которая вычисляется на основании нескольких параметров", то производительность падает очень сильно. Файловая база обрабатывает максимум 2 запроса в секунду. Причем, если закомментировать участок кода с арифметическими операциями вычисления стоимости, то снова больше 100 запросов в секунду.
Вопроса два:
1) Может кто-нибудь делал/читал/слышал что-то подобное и расскажет как увеличить производительность веб-сервиса в 1С?
2) Нашел статью http://catalog.mista.ru/public/540168/ про настройку metadata.js. Попробовал разобраться, но видимо без знания javascript там делать нечего. Может есть ещё примеры интеграции 1С с другими базами данных для увеличения производительности?
 
 
   Волшебник
 
Модератор
1 - 08.12.17 - 09:06
Аккумулируйте все ваши 100 запросов в один запрос.
   Asmody
 
2 - 08.12.17 - 09:07
(1) 100 запросов от разных клиентов надо понимать
   Asmody
 
3 - 08.12.17 - 09:08
(0) А точно надо тащить это непосредственно из 1С?
   Волшебник
 
Модератор
4 - 08.12.17 - 09:08
(2) Значит нужен промежуточный агрегатор.
   Asmody
 
5 - 08.12.17 - 09:13
Я бы подготовленные данные выгружал в быстрое внешнее хранилище регламентным. А отдавал каким-нибудь простеньким сервисом на go/elixir
   Genayo
 
6 - 08.12.17 - 09:17
(0) 1. Какая платформа?
    2. Кроме метадаты подобное предлагает еще Юрий Лазаренко.
   ИмяФамилия
 
7 - 08.12.17 - 09:24
(5) +1
выгружать из 1с во чтото предназначенное для этих целей.
либо кэшировать выгруженное промежуточно в какомнить nginx.
   vde69
 
8 - 08.12.17 - 09:24
(1) подобные финты запрещены лицензией 1с в явном виде.

то есть разрешено делать через промежуточное хранилище, но не разрешено работать с базой нескольким пользователям под одной сесией
   Владимир1С
 
9 - 08.12.17 - 09:34
(0)
"Причем, если закомментировать участок кода с арифметическими операциями вычисления стоимости"

Это твой ответ: значения должны быть в уже готовом виде. Поле в карточке товара.

Какова периодичность изменения цен?
   vde69
 
Модератор
10 - 08.12.17 - 09:37
(9) >>>значения должны быть в уже готовом виде. Поле в карточке товара.


бред... ты так текущие остатки похрани...
 
 Рекламное место пустует
   Владимир1С
 
11 - 08.12.17 - 09:40
(10) В топике речь идёт о ценах. Расчёт цен может быть очень непростым, в общем случае. Цель ТС - ускориться. Значит, нужно применять всё что возможно.
   Сияющий в темноте
 
12 - 08.12.17 - 09:42
в данном случае,работы с базой неи,есть получение информации из базы
работа же обычно подразумевает изменение данных в базе
   Остап Сулейманович
 
13 - 08.12.17 - 09:43
(11) Бесполезно. Это 1С. Можно и фары тереть и по колесу стучать... а оно стсуко не предназначено и все тут. Самый правильный ответ в (4), (5). Любые пляски внутри 1С (по состоянию на сейчас - не спасут).
   Остап Сулейманович
 
14 - 08.12.17 - 09:47
(12) "работы с базой неи,есть получение информации из базы"
Среди типового набора операций с базами данных CRUD - Reading стоит на втором месте.
   Владимир1С
 
15 - 08.12.17 - 09:49
(0) Отладчик в режиме замера времени тебе в помощь,      anchar007. Что то мне подсказывает, что дело в алгоритме вычисления цены.
   ptiz
 
16 - 08.12.17 - 09:50
(0) "арифметические действия" - похоже, что это не "арифметические" действия, а обращения к СУБД.
   vde69
 
Модератор
17 - 08.12.17 - 09:51
(15) не обязательно, возможно дело в индексах, а возможно в том, что атор пытается запустить сервис на персоналке
   Владимир1С
 
18 - 08.12.17 - 09:51
(0) Процедура по получению цен хранимая или, хотя бы, не компилируется при каждом обращении?
   Остап Сулейманович
 
19 - 08.12.17 - 09:51
(15) Фирма 1С считает, что дело в создании окружения для каждого сеанса. Открытие таблиц, выполнение модуля внешнего приложения, и особо выделено "инициализация параметров сеанса". А не в алгоритме вычисления цены.
   бомболюк
 
20 - 08.12.17 - 09:52
(0) я бы не тратил время и сразу бы искал решение за рамками 1С.
   Владимир1С
 
21 - 08.12.17 - 09:54
(0) Подробности алгоритма вычисления цены Давай сюда, обсудим.
   arsik
 
22 - 08.12.17 - 09:56
(8) Так начинается каждый первый комментарий в топике от  vde69. Да сколько можно? Ты хоть один раз видел, что бы за это кого то наказали?
   Владимир1С
 
23 - 08.12.17 - 09:57
(22) Здесь территоррия считается общественной, поэтому пусть его, пишет.
   arsik
 
24 - 08.12.17 - 09:58
(0) Создай 100 вебсервисов в 1й базе :)
   vde69
 
Модератор
25 - 08.12.17 - 09:58
(24) файловая от этого загнется
   Владимир1С
 
26 - 08.12.17 - 10:00
(0) Где ТС? Где подробности? Надо определить, насколько оправданно вычисление цены при каждом обращении.
   anchar007
 
27 - 08.12.17 - 10:01
(6) 1. Какая платформа?
    2. Кроме метадаты подобное предлагает еще Юрий Лазаренко.

1. 8.3.10.2561
   Filin
 
28 - 08.12.17 - 10:03
(26) ТС гуглит что такое "go/elixir" :)
   anchar007
 
29 - 08.12.17 - 10:04
(2) 100 запросов от 1-2 клиентов. Есть 2 сайта, которые хотели бы получать данные из нашей 1С.
   Владимир1С
 
30 - 08.12.17 - 10:15
(29) наконец подробности. Далее, приведи , хотя бы на словах, от чего зависит цена в данный момент. Точный список.
   anchar007
 
31 - 08.12.17 - 10:21
Как я считаю цены:

1) выполняется запрос, который из тысяч элементов отбирает 156
2) Для каждого из 156 элеменов делаем запрос к регистру сведений. Получаем базовую стоимость этого элемента. (СтоимостьАренды)

3) дальше считаем новую стоимость в цикле из пункта 2:

//После этого присваиваем свою стоимость аренды

СтоимостьАренды = 14000;
        
//Считаем стоимость аренды зала без НДС

//ArendaZala - входной параметр функции веб-сервиса
Если элемент.НДС = ЛОЖЬ Тогда
   СтоимостьАрендыБезНДС = СтоимостьАренды - СтоимостьАренды/118*18;
   ОбщаяСтоимостьАрендыБезНДС= Окр(СтоимостьАрендыБезНДС*ArendaZala,2);
КонецЕсли;
        
//Считаем общую стоимость аренды зала с НДС

ОбщаяСтоимостьАренды = СтоимостьАренды*ArendaZala;
        
//Считаем комиссию

//Допустим мы обращамеся к реквизиту элемента, но для простоты присваиваю просто константу
ПроцентКомиссии = 20;        
Комиссия = ОбщаяСтоимостьАрендыБезНДС*ПроцентКомиссии/100;
        
ВозвращаемаяСтрока = ВозвращаемаяСтрока+элемент+"$"+Строка(ОбщаяСтоимостьАрендыБезНДС)+"$"+Строка(ОбщаяСтоимостьАренды)+"$"+Строка(Комиссия)+Символы.ПС;

4) в результате выполнения получаем много строк, например:
<>$21 355 932,2$25 200 000$4 271 186,44
<>$21 355 932,2$25 200 000$4 271 186,44
<>$21 355 932,2$25 200 000$4 271 186,44
<>$21 355 932,2$25 200 000$4 271 186,44
<>$21 355 932,2$25 200 000$4 271 186,44
   v77
 
32 - 08.12.17 - 10:35
(31) ну тупо выгружай свои данные из 1с куда хош, напиши сервис на чём хош и пускай оно работает быстро быстро. там данных то кот наплакал.
   Владимир1С
 
33 - 08.12.17 - 10:41
(31) Организуй логирование с отметками времени каждого этапа. В отдельную ТЗ, после выполнения теста по кнопочке ТЗ пишешь в файл и смотришь, какая часть портит тебе малину.  

по п.2: Базовая стоимость как часто меняется? Неужели по 1000 раз за день? Вынеси в дублирующее поле простого цифрового типа. Избавишься от запроса.
п.3: оптимизируй формулы. Убери умножения и деления по максимуму.

По последней строке п.3: элемент - ссылочного типа? Попробуй убрать его из символьной строки.

к п.1 вопрос: 156 - жёстко фиксированное число элементов или оно плавает? И запросик, работающий в п.1, в студию.
 
 
   anchar007
 
34 - 08.12.17 - 11:08
(33) Спасибо!
"156 - жёстко фиксированное число элементов или оно плавает"
В тестовых целях это фиксированное число элементов. На реальных данных элементов может быть от 0 до 1000 примерно.

Но думаю нет смысла тратить время на 1С, а всё-таки лучше выгружать данные из 1С куда-то ещё. Вдруг запросов от сайтов будет не 100 в секунду, а 1000 или 10000, тогда 1С с этим скорее всего не справится.
   Владимир1С
 
35 - 08.12.17 - 11:13
(34) Процент комиссии - фиксированный или завмсимый? Тоже, скорее всего, как бы фиксированный.

Может быть, просто класть файлик с готовыми ценами за день за объект в ФТП сайта?
   Cyberhawk
 
36 - 08.12.17 - 11:16
(8) Гонишь, см. 57 ответ http://v8.1c.ru/predpriyatie/questions_licence.htm#57
   anchar007
 
37 - 08.12.17 - 11:52
(35) и процент комиссии и цены могут меняться в зависимости от периода [N;M].
Пример: клиент заходит на сайт, говорит хочу забронировать номер в отеле в городе таком-то на такие-то даты, сайт идёт в 1С и 1С возвращает все доступные номера и цены по каждому номеру. Но цена зависит от периода [N;M], т.к. бывают "горячие сезоны", в которые проживание в номере будет стоить дороже. Комиссия тоже может меняться.
   Владимир1С
 
38 - 08.12.17 - 13:03
(37) По моим субъективным ощущениям, Именно эту задачу, в связке с сайтом, наверно, лучше решать через голый SQL, учитывая требуемую скорость выдачи данных.
   H A D G E H O G s
 
39 - 08.12.17 - 14:13
(38) В моим ощущениям - даже голый прогретый sql не будет выдавать достаточно сложный запрос с производительностью в 10 мс.
   H A D G E H O G s
 
40 - 08.12.17 - 14:16
У автора проблема в архитектуре.
   Волшебник
 
Модератор
41 - 08.12.17 - 14:17
(31) Запрос, надеюсь, в цикле?
   H A D G E H O G s
 
42 - 08.12.17 - 14:21
Автору бы еще почитать про Итоги СрезаПоследних и правильно их пользовать.
Или, если это невозможно - пользовать СредПоследних от NAF
   Волшебник
 
Модератор
43 - 08.12.17 - 14:22
(42) Мы в своей конфигурации завели ещё один регистр НашРегистрСрезПоследних, который обновляется при записи основного НашРегистр. Кому нужен срез последних, лезет во второй регистр. Получилось быстро.
   H A D G E H O G s
 
44 - 08.12.17 - 14:22
(43) В 8.3 это сделано на уровне платформы
   Волшебник
 
Модератор
45 - 08.12.17 - 14:27
(44) Ну и правильно
   Cyberhawk
 
46 - 08.12.17 - 14:29
(44) Тока для таблицы срезов вроде нет кластерного индекса, WTF?
   Cyberhawk
 
47 - 08.12.17 - 14:34
Ну и таблица среза в 8.3 вроде используется только когда параметр даты среза не указан, иначе все по-старинке (полная таблица сама с собой соединяется)
   H A D G E H O G s
 
48 - 08.12.17 - 15:08
(47) Ну это естественно.
   H A D G E H O G s
 
49 - 08.12.17 - 15:09
(46) Это хитрый план.
 
 Рекламное место пустует
   Cyberhawk
 
50 - 08.12.17 - 15:11
(48) Ну тады в (43) вариант поинтереснее, если нужны срезы на дату, а не на конец/начало времен
   Asmody
 
51 - 08.12.17 - 15:14
(43) Задним числом пересчитываете?
   H A D G E H O G s
 
52 - 08.12.17 - 15:17
(50) Там такой же вариант, как в Итогах, я так понял.
   Владимир1С
 
53 - 08.12.17 - 15:22
(37) Правильно ли я понял, что в общем случае базовая цена дня  индивидуальна? Для каждого из 365 дней года?
   DexterMorgan
 
54 - 08.12.17 - 15:22
(50) Идея то не новая, сами 1С во всяких УТ используют во всю, например: РС ДоступныеОстаткиПланируемыхПоступлений. Просто зависит она уже от потребностей конкретного предприятия, кому-то и типового ЦеныНоменклатуры достаточно
   Fragster
 
55 - 08.12.17 - 15:26
всю арифметику считать в запросе, если элемент - ссылка, то также в запросе получать представление, строку формировать не через +, а через записьXML.записатьбезобработки, числа писать через XMLСтрока(число) вместо Строка() и тем более Формат()
   Владимир1С
 
56 - 08.12.17 - 15:29
(0) Обрати внимание на (55) - стоит заморочиться и выполнить всё, что написано.
   Волшебник
 
Модератор
57 - 08.12.17 - 15:30
(51) Нет, там всегда срез последних (на текущую дату).
Кому нужен срез на заднюю дату, лезет в виртуальную таблицу
   Asmody
 
58 - 08.12.17 - 15:40
(57) Не, я к тому, что вдруг кто-то задним числом что-то поменял?
   Asmody
 
59 - 08.12.17 - 15:41
Ах, у вас только на текущую! Вопрос отпал
   oleg_km
 
60 - 08.12.17 - 16:38
(41) Я думаю во вложенных циклах
   Владимир1С
 
61 - 08.12.17 - 16:49
(0) а куда подевался ТС?
   Сияющий в темноте
 
62 - 08.12.17 - 17:56
вот так и пишутся высоконагруженные сервисы по поиску аренды
тяп ляп и в продакшн
   Лефмихалыч
 
63 - 08.12.17 - 20:27
(0) оно тупит не из-за 1С, а из-за запросов к БД. Надо сделать, чтобы запросы к сервису были, а запросов к БД не было. Вариантов туева тьма и все они базируются на кешировании и денормализации
   Юрий Лазаренко
 
64 - 08.12.17 - 20:55
(0) Вы что-то не так делаете. Нам удавалось отрабатывать несколько десятков и даже сотен запросов в секунду не только с арифметическими действиями, но и с записью в БД.
   Cyberhawk
 
65 - 08.12.17 - 21:56
(64) Так у него запросы в циклах двойной вложенности, см. (31) :)



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует