|
Высоконагруженные веб-сервисы на 1С | ☑ | ||
---|---|---|---|---|
0
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 запросов в один запрос.
|
|||
2
Asmody
08.12.17
✎
09:07
|
(1) 100 запросов от разных клиентов надо понимать
|
|||
3
Asmody
08.12.17
✎
09:08
|
(0) А точно надо тащить это непосредственно из 1С?
|
|||
4
Волшебник
модератор
08.12.17
✎
09:08
|
(2) Значит нужен промежуточный агрегатор.
|
|||
5
Asmody
08.12.17
✎
09:13
|
Я бы подготовленные данные выгружал в быстрое внешнее хранилище регламентным. А отдавал каким-нибудь простеньким сервисом на go/elixir
|
|||
6
Genayo
08.12.17
✎
09:17
|
(0) 1. Какая платформа?
2. Кроме метадаты подобное предлагает еще Юрий Лазаренко. |
|||
7
ИмяФамилия
08.12.17
✎
09:24
|
(5) +1
выгружать из 1с во чтото предназначенное для этих целей. либо кэшировать выгруженное промежуточно в какомнить nginx. |
|||
8
vde69
08.12.17
✎
09:24
|
(1) подобные финты запрещены лицензией 1с в явном виде.
то есть разрешено делать через промежуточное хранилище, но не разрешено работать с базой нескольким пользователям под одной сесией |
|||
9
Владимир1С
08.12.17
✎
09:34
|
(0)
"Причем, если закомментировать участок кода с арифметическими операциями вычисления стоимости" Это твой ответ: значения должны быть в уже готовом виде. Поле в карточке товара. Какова периодичность изменения цен? |
|||
10
vde69
модератор
08.12.17
✎
09:37
|
(9) >>>значения должны быть в уже готовом виде. Поле в карточке товара.
бред... ты так текущие остатки похрани... |
|||
11
Владимир1С
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 стоит на втором месте. |
|||
15
Владимир1С
08.12.17
✎
09:49
|
(0) Отладчик в режиме замера времени тебе в помощь, anchar007. Что то мне подсказывает, что дело в алгоритме вычисления цены.
|
|||
16
ptiz
08.12.17
✎
09:50
|
(0) "арифметические действия" - похоже, что это не "арифметические" действия, а обращения к СУБД.
|
|||
17
vde69
модератор
08.12.17
✎
09:51
|
(15) не обязательно, возможно дело в индексах, а возможно в том, что атор пытается запустить сервис на персоналке
|
|||
18
Владимир1С
08.12.17
✎
09:51
|
(0) Процедура по получению цен хранимая или, хотя бы, не компилируется при каждом обращении?
|
|||
19
Остап Сулейманович
08.12.17
✎
09:51
|
(15) Фирма 1С считает, что дело в создании окружения для каждого сеанса. Открытие таблиц, выполнение модуля внешнего приложения, и особо выделено "инициализация параметров сеанса". А не в алгоритме вычисления цены.
|
|||
20
бомболюк
08.12.17
✎
09:52
|
(0) я бы не тратил время и сразу бы искал решение за рамками 1С.
|
|||
21
Владимир1С
08.12.17
✎
09:54
|
(0) Подробности алгоритма вычисления цены Давай сюда, обсудим.
|
|||
22
arsik
гуру
08.12.17
✎
09:56
|
(8) Так начинается каждый первый комментарий в топике от vde69. Да сколько можно? Ты хоть один раз видел, что бы за это кого то наказали?
|
|||
23
Владимир1С
08.12.17
✎
09:57
|
(22) Здесь территоррия считается общественной, поэтому пусть его, пишет.
|
|||
24
arsik
гуру
08.12.17
✎
09:58
|
(0) Создай 100 вебсервисов в 1й базе :)
|
|||
25
vde69
модератор
08.12.17
✎
09:58
|
(24) файловая от этого загнется
|
|||
26
Владимир1С
08.12.17
✎
10:00
|
(0) Где ТС? Где подробности? Надо определить, насколько оправданно вычисление цены при каждом обращении.
|
|||
27
anchar007
08.12.17
✎
10:01
|
(6) 1. Какая платформа?
2. Кроме метадаты подобное предлагает еще Юрий Лазаренко. 1. 8.3.10.2561 |
|||
28
Filin
08.12.17
✎
10:03
|
(26) ТС гуглит что такое "go/elixir" :)
|
|||
29
anchar007
08.12.17
✎
10:04
|
(2) 100 запросов от 1-2 клиентов. Есть 2 сайта, которые хотели бы получать данные из нашей 1С.
|
|||
30
Владимир1С
08.12.17
✎
10:15
|
(29) наконец подробности. Далее, приведи , хотя бы на словах, от чего зависит цена в данный момент. Точный список.
|
|||
31
anchar007
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 |
|||
32
v77
08.12.17
✎
10:35
|
(31) ну тупо выгружай свои данные из 1с куда хош, напиши сервис на чём хош и пускай оно работает быстро быстро. там данных то кот наплакал.
|
|||
33
Владимир1С
08.12.17
✎
10:41
|
(31) Организуй логирование с отметками времени каждого этапа. В отдельную ТЗ, после выполнения теста по кнопочке ТЗ пишешь в файл и смотришь, какая часть портит тебе малину.
по п.2: Базовая стоимость как часто меняется? Неужели по 1000 раз за день? Вынеси в дублирующее поле простого цифрового типа. Избавишься от запроса. п.3: оптимизируй формулы. Убери умножения и деления по максимуму. По последней строке п.3: элемент - ссылочного типа? Попробуй убрать его из символьной строки. к п.1 вопрос: 156 - жёстко фиксированное число элементов или оно плавает? И запросик, работающий в п.1, в студию. |
|||
34
anchar007
08.12.17
✎
11:08
|
(33) Спасибо!
"156 - жёстко фиксированное число элементов или оно плавает" В тестовых целях это фиксированное число элементов. На реальных данных элементов может быть от 0 до 1000 примерно. Но думаю нет смысла тратить время на 1С, а всё-таки лучше выгружать данные из 1С куда-то ещё. Вдруг запросов от сайтов будет не 100 в секунду, а 1000 или 10000, тогда 1С с этим скорее всего не справится. |
|||
35
Владимир1С
08.12.17
✎
11:13
|
(34) Процент комиссии - фиксированный или завмсимый? Тоже, скорее всего, как бы фиксированный.
Может быть, просто класть файлик с готовыми ценами за день за объект в ФТП сайта? |
|||
36
Cyberhawk
08.12.17
✎
11:16
|
(8) Гонишь, см. 57 ответ http://v8.1c.ru/predpriyatie/questions_licence.htm#57
|
|||
37
anchar007
08.12.17
✎
11:52
|
(35) и процент комиссии и цены могут меняться в зависимости от периода [N;M].
Пример: клиент заходит на сайт, говорит хочу забронировать номер в отеле в городе таком-то на такие-то даты, сайт идёт в 1С и 1С возвращает все доступные номера и цены по каждому номеру. Но цена зависит от периода [N;M], т.к. бывают "горячие сезоны", в которые проживание в номере будет стоить дороже. Комиссия тоже может меняться. |
|||
38
Владимир1С
08.12.17
✎
13:03
|
(37) По моим субъективным ощущениям, Именно эту задачу, в связке с сайтом, наверно, лучше решать через голый SQL, учитывая требуемую скорость выдачи данных.
|
|||
39
H A D G E H O G s
08.12.17
✎
14:13
|
(38) В моим ощущениям - даже голый прогретый sql не будет выдавать достаточно сложный запрос с производительностью в 10 мс.
|
|||
40
H A D G E H O G s
08.12.17
✎
14:16
|
У автора проблема в архитектуре.
|
|||
41
Волшебник
модератор
08.12.17
✎
14:17
|
(31) Запрос, надеюсь, в цикле?
|
|||
42
H A D G E H O G s
08.12.17
✎
14:21
|
Автору бы еще почитать про Итоги СрезаПоследних и правильно их пользовать.
Или, если это невозможно - пользовать СредПоследних от NAF |
|||
43
Волшебник
модератор
08.12.17
✎
14:22
|
(42) Мы в своей конфигурации завели ещё один регистр НашРегистрСрезПоследних, который обновляется при записи основного НашРегистр. Кому нужен срез последних, лезет во второй регистр. Получилось быстро.
|
|||
44
H A D G E H O G s
08.12.17
✎
14:22
|
(43) В 8.3 это сделано на уровне платформы
|
|||
45
Волшебник
модератор
08.12.17
✎
14:27
|
(44) Ну и правильно
|
|||
46
Cyberhawk
08.12.17
✎
14:29
|
(44) Тока для таблицы срезов вроде нет кластерного индекса, WTF?
|
|||
47
Cyberhawk
08.12.17
✎
14:34
|
Ну и таблица среза в 8.3 вроде используется только когда параметр даты среза не указан, иначе все по-старинке (полная таблица сама с собой соединяется)
|
|||
48
H A D G E H O G s
08.12.17
✎
15:08
|
(47) Ну это естественно.
|
|||
49
H A D G E H O G s
08.12.17
✎
15:09
|
(46) Это хитрый план.
|
|||
50
Cyberhawk
08.12.17
✎
15:11
|
(48) Ну тады в (43) вариант поинтереснее, если нужны срезы на дату, а не на конец/начало времен
|
|||
51
Asmody
08.12.17
✎
15:14
|
(43) Задним числом пересчитываете?
|
|||
52
H A D G E H O G s
08.12.17
✎
15:17
|
(50) Там такой же вариант, как в Итогах, я так понял.
|
|||
53
Владимир1С
08.12.17
✎
15:22
|
(37) Правильно ли я понял, что в общем случае базовая цена дня индивидуальна? Для каждого из 365 дней года?
|
|||
54
DexterMorgan
08.12.17
✎
15:22
|
(50) Идея то не новая, сами 1С во всяких УТ используют во всю, например: РС ДоступныеОстаткиПланируемыхПоступлений. Просто зависит она уже от потребностей конкретного предприятия, кому-то и типового ЦеныНоменклатуры достаточно
|
|||
55
Fragster
гуру
08.12.17
✎
15:26
|
всю арифметику считать в запросе, если элемент - ссылка, то также в запросе получать представление, строку формировать не через +, а через записьXML.записатьбезобработки, числа писать через XMLСтрока(число) вместо Строка() и тем более Формат()
|
|||
56
Владимир1С
08.12.17
✎
15:29
|
(0) Обрати внимание на (55) - стоит заморочиться и выполнить всё, что написано.
|
|||
57
Волшебник
модератор
08.12.17
✎
15:30
|
(51) Нет, там всегда срез последних (на текущую дату).
Кому нужен срез на заднюю дату, лезет в виртуальную таблицу |
|||
58
Asmody
08.12.17
✎
15:40
|
(57) Не, я к тому, что вдруг кто-то задним числом что-то поменял?
|
|||
59
Asmody
08.12.17
✎
15:41
|
Ах, у вас только на текущую! Вопрос отпал
|
|||
60
oleg_km
08.12.17
✎
16:38
|
(41) Я думаю во вложенных циклах
|
|||
61
Владимир1С
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) Вы что-то не так делаете. Нам удавалось отрабатывать несколько десятков и даже сотен запросов в секунду не только с арифметическими действиями, но и с записью в БД.
|
|||
65
Cyberhawk
08.12.17
✎
21:56
|
(64) Так у него запросы в циклах двойной вложенности, см. (31) :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |