Size: a a a

1С, БСП, DevOps и Архитектура

2021 February 24

JD

John Doe in 1С, БСП, DevOps и Архитектура
Andrey Borodavko
Коллеги, подскажите такой вопрос:
Есть у меня необходимость постоянно мониторить наличие каких-то данных в регистре, и если они есть, то запускать их обработку. Время реакции на их появление должно быть минимальным, при этом вешать запуск этой реакции на запись в регистр максимально не хочется, т.к. занимает время.
Частота появления данных - чаще секунды.
Пока пришел к идее постоянно висящего ФЗ, которое мониторит этот регистр в цикле, оно получается вполне неплохо, за исключением того, что это ФЗ фактически впустую жрет полностью один поток процессора.
Проблема еще в том, что потенциально таких фоновых может быть 5 и более.
И одной фоновое еще на логирование, но его предположим можно повесить на регламент раз в секунду, но где-то читал, что так тоже нельзя.
Может есть какие-то бест практис в этом всём?
Бест практис - не сношать мозг и для начала обосновать, почему "Время реакции на их появление должно быть минимальным" (меньше минуты).
Если не можешь обосновать, то и вопрос снимается.
источник

H

Hero in 1С, БСП, DevOps и Архитектура
Andrey Borodavko
Это всё равно фактически при записи набора и будет исполняться в потоке с записью данных, чего и нужно избежать
У меня есть регистр. Туда пишутся какие-то строки, мне нужно реагировать на появление флага в записи. Как только я его вижу, я запись копирую их в другой регистр. Фоновое задание запускается с любой периодичностью и смотрит в этот второй регистр и отправляет данные по почте. Если данных для отправки нет, то и ФЗ завершится, отпустив поток. Можно запускать этот ФЗ зоть каждые 10 секунд.
источник

АМ

Александр Медведько... in 1С, БСП, DevOps и Архитектура
Кирилл Черненко
866?
UTF16 оказалась.
источник

AB

Andrey Borodavko in 1С, БСП, DevOps и Архитектура
John Doe
Бест практис - не сношать мозг и для начала обосновать, почему "Время реакции на их появление должно быть минимальным" (меньше минуты).
Если не можешь обосновать, то и вопрос снимается.
это фоновое - распределитель сеансов между запросами
а запросы идут от пользователя, для которого время ответа больше секунды - это повод свалить и не оставить заказ
источник

PZ

P Z in 1С, БСП, DevOps и Архитектура
Andrey Borodavko
это фоновое - распределитель сеансов между запросами
а запросы идут от пользователя, для которого время ответа больше секунды - это повод свалить и не оставить заказ
Секунда, это точно про 1с?
источник

AB

Andrey Borodavko in 1С, БСП, DevOps и Архитектура
P Z
Секунда, это точно про 1с?
там http запрос интеграционный
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Andrey Borodavko
это фоновое - распределитель сеансов между запросами
а запросы идут от пользователя, для которого время ответа больше секунды - это повод свалить и не оставить заказ
источник

AB

Andrey Borodavko in 1С, БСП, DevOps и Архитектура
John Doe
Ну, на самом деле не все так плохо
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
Грачев Иван
Насколько эффективно "городить" вот такие вложенные соединения таблиц? (просто пример).
|ИЗ
|    РегистрСведений.ИзмененияСтатусаНоменклатуры.СрезПоследних(&Период, ) КАК ИзмененияСтатусаНоменклатуры
|        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
|            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ТипыНоменклатуры КАК ТипыНоменклатуры
|            ПО СпрНоменклатура.ОписаниеНоменклатуры = ТипыНоменклатуры.Ссылка
|        ПО ИзмененияСтатусаНоменклатуры.Номенклатура = СпрНоменклатура.Ссылка
Пишут, что в данном случае соединение таблиц произойдет в таком порядке, в котором решит планировщик СУБД, результат от этого не зависит. А порядок соединений планировщик определяет в зависимости от объема вычислений при соединении данных на основе статистики, наличия индексов и других вспомогательных данных.
Действительно так?
очень неэффективно. можно словить соединение с подзапросом
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
Andrey Borodavko
Коллеги, подскажите такой вопрос:
Есть у меня необходимость постоянно мониторить наличие каких-то данных в регистре, и если они есть, то запускать их обработку. Время реакции на их появление должно быть минимальным, при этом вешать запуск этой реакции на запись в регистр максимально не хочется, т.к. занимает время.
Частота появления данных - чаще секунды.
Пока пришел к идее постоянно висящего ФЗ, которое мониторит этот регистр в цикле, оно получается вполне неплохо, за исключением того, что это ФЗ фактически впустую жрет полностью один поток процессора.
Проблема еще в том, что потенциально таких фоновых может быть 5 и более.
И одной фоновое еще на логирование, но его предположим можно повесить на регламент раз в секунду, но где-то читал, что так тоже нельзя.
Может есть какие-то бест практис в этом всём?
пустой цикл заменить на паузу через пинг или ВК :)
источник

ПМ

Павел Мишин... in 1С, БСП, DevOps и Архитектура
Andrey Borodavko
Коллеги, подскажите такой вопрос:
Есть у меня необходимость постоянно мониторить наличие каких-то данных в регистре, и если они есть, то запускать их обработку. Время реакции на их появление должно быть минимальным, при этом вешать запуск этой реакции на запись в регистр максимально не хочется, т.к. занимает время.
Частота появления данных - чаще секунды.
Пока пришел к идее постоянно висящего ФЗ, которое мониторит этот регистр в цикле, оно получается вполне неплохо, за исключением того, что это ФЗ фактически впустую жрет полностью один поток процессора.
Проблема еще в том, что потенциально таких фоновых может быть 5 и более.
И одной фоновое еще на логирование, но его предположим можно повесить на регламент раз в секунду, но где-то читал, что так тоже нельзя.
Может есть какие-то бест практис в этом всём?
Противоречение или нагрузка пляшет "есть данные приходящие чаще секунды и фоновое в пустую жрет ресурсы". Если общее время транзакции запись в регистр плюс обработка записи меньше 0.5-1  сек то можно оставить синхронную обработку прям при записи при наличии технического уникального ключа у каждой записи эскалация до весьма большой параллелтности не будет.
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
John Doe
Почему не веришь?
косячит, тяжелый и блокирует все и вся
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
Hero
У меня есть регистр. Туда пишутся какие-то строки, мне нужно реагировать на появление флага в записи. Как только я его вижу, я запись копирую их в другой регистр. Фоновое задание запускается с любой периодичностью и смотрит в этот второй регистр и отправляет данные по почте. Если данных для отправки нет, то и ФЗ завершится, отпустив поток. Можно запускать этот ФЗ зоть каждые 10 секунд.
меньше 15 секунд вроде не рекомендуют делать
источник

ПМ

Павел Мишин... in 1С, БСП, DevOps и Архитектура
Если время обработки существенное и нагрузка рваная  и нет проблем с лицензиями то обработку можео стартовать при записи в асинхроном режиме новое оновое задание
источник

ПМ

Павел Мишин... in 1С, БСП, DevOps и Архитектура
В остальных случаях/ограничениям остается да толтко фоновое задание (которое можно само по себе сделать многопоточным программно)
источник

ГИ

Грачев Иван... in 1С, БСП, DevOps и Архитектура
Nikita Gryzlov
очень неэффективно. можно словить соединение с подзапросом
Благодарю.
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Nikita Gryzlov
косячит, тяжелый и блокирует все и вся
С точки зрения регистрации изменений ничем не отличается от того же регистра и даже легче, т.к. нет индексов. Тяжелее разве что из-за подхода "одна запись на один объект", а с регистром можно сделать неблокирующий инсерт (но с 8.3.16+ там вообще разницы нет - вычитываться содержимое будет один фиг даже перед вставкой без замещения и в режиме загрузки, как и в случае с планом обмена вычитывается запись с номером сообщения перед ее занулением при регистрации).
Но в обсуждаемом случае один и тот же документ все равно не будет параллельно пытаться регистрироваться, т.к. конкурирующие писатели объекта все равно встанут в очередь, а значит и момент регистрации выстроится в очередь.
А что за глюки?
источник

JD

John Doe in 1С, БСП, DevOps и Архитектура
Павел Мишин
Если время обработки существенное и нагрузка рваная  и нет проблем с лицензиями то обработку можео стартовать при записи в асинхроном режиме новое оновое задание
А при чем тут лицензии? ФЗ их не потребляют. Хоть тыщу запускай.
источник

NG

Nikita Gryzlov in 1С, БСП, DevOps и Архитектура
John Doe
С точки зрения регистрации изменений ничем не отличается от того же регистра и даже легче, т.к. нет индексов. Тяжелее разве что из-за подхода "одна запись на один объект", а с регистром можно сделать неблокирующий инсерт (но с 8.3.16+ там вообще разницы нет - вычитываться содержимое будет один фиг даже перед вставкой без замещения и в режиме загрузки, как и в случае с планом обмена вычитывается запись с номером сообщения перед ее занулением при регистрации).
Но в обсуждаемом случае один и тот же документ все равно не будет параллельно пытаться регистрироваться, т.к. конкурирующие писатели объекта все равно встанут в очередь, а значит и момент регистрации выстроится в очередь.
А что за глюки?
в данном примере может произойти конфликт блокировок при одновременной выборке изменений и постановке объекта на повторную регистрацию из-за изменения. да на самой таблице изменений можно словить блокировку.
https://infostart.ru/1c/articles/899200/

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

ПМ

Павел Мишин... in 1С, БСП, DevOps и Архитектура
John Doe
А при чем тут лицензии? ФЗ их не потребляют. Хоть тыщу запускай.
А это как повезет, есть версии платформы где очень даже влияют. В исходном вопросе нет подробностей о развертывании поэтому при использовании подхрда нужно тестить. Плюс условная 1000 потоков требует соответствующего железа для "честной" параллельности
источник