Нестандартные приемы безопасной разработки и эксплуатации ПО на платформе 1С, категория "18+"

19.06.23

База данных - HighLoad оптимизация

Готовы погрузиться в недетское программирование и шКОДИТЬ по-взрослому? О том, как повысить безопасность разработки и эксплуатации ПО через изощренные способы подключения к платформе 1С, на конференции Infostart Event 2022 Saint Petersburg рассказал Юрий Лазаренко.

В названии доклада написано категория 18+, но это не потому, что тут будет «клубничка». Тем не менее доклад реально только для окрепших умов, Потому что речь пойдет про изощренные способы подключения к платформе 1С.

 

 

Про то, что я мастер изощренного подключения к платформе 1С, говорит тот факт, что в 2018 году я сюда приезжал с роботом Гайкой. Это самодельный робот, у которого мозги сделаны на платформе 1С. Рядом с ним – фотография робота-котика. В прошлом году был доклад про умный дом на 1С. Тоже все на 1С.

 

 

Самое интересное, что все те способы использования платформы 1С, о которых я сейчас буду говорить, абсолютно нормальные, «законные», задокументированные. Все это описано в синтакс-помощнике. Я постараюсь вас сейчас ввести в курс дела про эти изощренные способы подключения к 1С.

 

Счастливое детство, титановые игрушки

 

 

Раньше я приезжал на Инфостарт с самодельными роботами, а сегодня я привез самодельную дрель.

Ну да, можно предположить: «Лазаренко стал старше и больше, мозги у него стали старше и меньше, поэтому он перешел с роботов на дрели». Но не спешите с выводами, дело в том, что здесь есть нюанс, как говорится в известном анекдоте.

Нюанс заключается в том, что эту дрель я собрал в 1991 году, когда мне было 14 лет, и я учился в девятом классе.

Это было еще во времена Советского Союза, а тогда школьнику купить в магазине дрель было настолько дорого, что пришлось бы потратить карманные деньги за несколько месяцев.

 

 

Ваша задача – угадать, с чего в 1991 году я снял вот этот мотор, являющийся основой этой дрели.

Подсказки:

  • у него обозначение АС-2, уникальный серийный номер;

  • и видите, такая розеточка хлипкая.

 

 

Еще одна подсказка – эта дрель работает от 27 вольт.

 

 

Да, это мотор с дворников, но с каких дворников? Я тогда жил в поселке Кача, это первая в России военная летная школа. Сын Сталина Василий там учился.

 

 

Это – мотор с дворников военного самолета Ан-12. В 1991 году я снял с него этот моторедуктор.

Как вы думаете, как это так происходило?

Когда самолет списывали, с него снимали вооружение, все самое ценное, а потом его тягачом просто вытаскивали за пределы аэродрома и отдавали на растерзание вот таким техногиенам, как я. И мы с них снимали все, что оставалось.

Эта дрель сделана из деталей военного самолета. А в гараже у меня там еще балки из вертолетных лопастей и т.д.

Ни у кого никакой возникает странной мысли, почему у обычного школьника, а теперь обычного инженера, в гараже лежат запасные части от военной техники? И не влияет ли это как-то на обороноспособность нашей страны?

 

 

Здесь на слайде еще одна «дрель». Это пульт, из которого я когда-то собрал себе манипулятор для робота – этим пультом я им управлял.

 

 

На нем написано, что это – пульт проверки антиобледенительной системы какого-то вертолета или самолета.

Этим мы игрались в детстве. Кучи этого всего у меня есть до сих пор хранятся в гараже.

Но на обороноспособность страны это действительно не влияет.

Почему? В начале 90-х, в середине 90-х было модно брать вооружение, выставлять его куда-то на выставки и показывать – вот этим мы раньше воевали, а сейчас мы мирные.

 

 

И была такая история – Задорнов рассказывал.

Стоит мужик рядом с вот такой бомбой и некультурно восхищается. У него спрашивают: «Чему так радуешься?»

Он говорит: «Я 25 лет собирал эти корпуса на заводе и не знал, что это такое. Нам говорили, что это запчасти для печек-буржуек».

Тогда делали по-умному – чтобы секретную разработку не украли, ее не собирали на одном заводе. Корпуса собирали в одном месте, моторчики собирали в другом месте, и люди, которые все это собирали, вообще не понимали, что они делают.

Украсть какую-то секретную разработку было нереально. Если прийти к человеку, который собирал такие бомбы, и сказать ему: «Дай нам секрет бомбы» – это то же самое, что у двоечника спрашивать: «Расскажи нам про интеграл». Ему сколько денег не дай, он даже если б хотел, ничего не расскажет, потому что не знает.

 

Распределенные конфигурации 1С

 

 

Традиционный вопрос для моих докладов – при чем здесь 1С?

Однажды мы попали к крупному заказчику, у которого была учетная система с вот такими подсистемами:

  • Проекты;

  • Отчеты;

  • Зарплата;

  • Учет рабочего времени;

  • Файлы;

  • Документы.

И он нам поставил задачу: «У нас все тупит. Нужно сделать так, чтобы работало быстро. И еще нужно сделать так, чтобы у нас никто не украл код и не украл данные из базы».

Вопрос: а как сделать так, чтобы код не украли? Ты же открываешь конфигуратор, и у тебя все есть – ты выгрузил конфигурацию в CF и унес. Если ты можешь выгрузить в DT, то ты, получается, украл базу, продал ее конкурентам. И такие факты реально у них были, и они устали на это попадать.

Поэтому они попросили нас сделать так, чтобы:

  • Во-первых, база работала быстро – чтобы все прямо летало.

  • Во-вторых, чтобы она работала безопасно. Если что-то сломалось, чтобы можно было быстро восстановить из бэкапа, не потерять данные. И чтобы их никто не украл, не передал в налоговую или еще куда-то конкурентам.

Но проблема-то в чем? Все эти подсистемы лежат в одной СУБД, а СУБД стоит на одном сервере. И как ни пытайся это оптимизировать, в итоге мы попадаем в одно узкое место: все эти данные лежат в одной СУБД.

 

 

Так вот, мы решили поступить так же, как в свое время поступали разработчики секретного вооружения – разбить все эти подсистемы по разным «заводам».

Мы попробовали разбить данные по частям – чтобы части подсистем были в отдельных базах, причем лежащих на отдельных серверах, каждый со своей СУБД.

Мы разбили все это на три отдельных сервера, которые даже стояли не в одном месте. Некоторые из них были удаленные.

  • В первую очередь, естественно, мы вынесли документы и файлы. У клиента получилось так, что база весила примерно 460 гигабайт. Когда мы начали разбирать ее, смотреть, что у вас там внутри, оказалось, что 457 гигабайт – это присоединенные файлы. И только 3 гигабайта – это реальные данные. И выгрузить в DT мы это просто не можем. Соответственно, если вдруг у нас что-то падает, восстановиться быстро из бэкапа нет возможности, мы теряем данные. Поэтому мы просто вынесли документы и файлы в отдельную базу, расположили их вообще на отдельном сервере. Одно время он был даже файловым, и мы туда обращались через HTTP-запросы. Мы не просто выделили отдельную подсистему, мы сделали отдельную конфигурацию.

  • Для учета рабочего времени, заявок и так далее мы сделали еще одну конфигурацию.

  • И когда пользователь заходил в единый интерфейс, которым является «Сервер 1» (проекты, отчеты, моя зарплата), он видел какие-то оперативные данные. А если ему нужно было получить файлик, он в этой же базе «Сервер 1», кликал на гиперссылку «Скачать», база номер 1 шла на сервер 3, через HTTP-запрос получала данные и отображала пользователю.

За счет этого мы получили очень большое ускорение, потому что произошло распределение данных по разным базам и серверам.

Вчера здесь был доклад Эмиля Карапетяна про DDD, на котором присутствовали представители компании 1С. И они объяснили, почему 1С:Аналитика работает быстрее, чем просто формирование отчетов в самой 1С. Там прозвучали две фразы:

  • Первое – потому что 1С:Аналитика работает на веб-интерфейсе.

  • А второе – потому что она лежит в отдельной базе. И когда вам нужно получить данные из отдельной базы 1С:Аналитики, она может их формировать долго, но данные в итоге соберет, не нагружая основную базу.

И это – самое главное. Когда получение данных абсолютно никак не нагружает базу, лежащую на «Сервере 1», с оперативными данными мы работаем намного быстрее. Сравните: 460 гигабайт и 3 гигабайта. Разница существенная.

Какие бы данные это ни были, любой лишний вес – плохой.

Если мерить мой индекс массы тела, у меня лишний вес. Когда я прихожу к тренеру, он мне говорит: «Давай до соточки наберем, еще больше станем». Прихожу к врачу – я два раза в год прохожу обследование – он мне всегда говорит: «Сбрасывай». И они у меня как черт и ангел на плечах сидят. Один говорит: «Давай набирай», а другой: «Давай сбрасывай».

И на самом деле, врач прав. Какой бы вес ни был, даже если это мышцы, его надо убирать. С СУБД все работает точно так же. Поэтому разделение баз на отдельные файловые системы и снижение их веса – это уже огромный плюс.

Было бы классно, если бы мускулы можно было пристегнуть: пошел на пляж, покрасовался. А потом отстегнул, и не нагружаешь ни суставы, ни сердце, ни печень.

Зато с 1С мы так можем. Это первое, что дало нам ускорение.

 

 

Далее. Мы – мастера разработки веб-интерфейсов для 1С. У нас есть собственный веб-клиент для 1С, который работает через HTTP-сервисы.

На слайде – интерфейс сервис-деска, мы его для некоторых клиентов полностью перевели на собственный веб-клиент. Он не запускает сеанс веб-клиента 1С, а просто через браузер обращается к базе по HTTP-сервису, просит дать ему отпределенные данные, оборачивает их в красивую форму и отображает.

Здесь идет ускорение за счет того, что на сервере 1С не создается сеанс для каждого подключившегося пользователя.

 

 

Вот так выглядит кабинет сотрудника – это отдельная подсистема, куда мы вывели те операции, которые не требуют моментальной реакции (хотя здесь она тоже возможна).

С точки зрения безопасности мы таким образом запретили прямой вход в базу 1С для внешних пользователей. Мы туда еще и клиентов запускали – у нас там есть подсистема «Заявки внешних клиентов».

Если мы запускаем пользователей через обычный веб-клиент, мы получаем большой риск, что кто-то где-то случайно забыл поставить галочку и открыл доступ к лишней подсистеме – можно посмотреть что угодно. Такие прецеденты были.

А здесь как ни старайся, ты не получишь доступ ни к чему лишнему. Работа идет через HTTP-сервис, а если ему сказали – покажи нам форму личного кабинета сотрудника, лишнего ты не получишь.

Таким образом мы обеспечили безопасность тех данных, которые не должны видеть посторонние люди.

Вот такая система у нас получилась – некая мастер-база, в которой есть справочник, хранящий данные к подключению остальных баз.

  • Если нам необходимо получить информацию о файлах, мы их берем из дополнительной базы, обеспечивая безопасность самого сервера и бэкапов.

  • И параллельно получаем еще скорость работы с данными.

 

Плюсы и минусы распределенной конфигурации 1С

 

 

Но такой подход существенно влияет и на скорость разработки – в худшую сторону.

Вспомните боль работы с расширениями, когда вы не можете нормально запрос сформировать в конструкторе, потому что у вас нет этих метаданных в расширении. Здесь все еще хуже, потому что каждый программист отвечает за свою подсистему, которая теперь является базой.

 

 

В первую очередь мы вынесли за пределы конфигурации файлы, во вторую очередь – мессенджеры. Раньше это была подсистема, теперь – отдельная конфигурация, лежащая вообще непонятно где, в которую через HTTP-сервис отправляется ID абонента, которому мы отсылаем сообщение, и текст сообщения.

Закинули задачку отправить такому-то абоненту (сотруднику) сообщение, и все, мы про это забываем. В основной базе у нас абсолютно нет никаких проблем и нагрузок на работу фоновых заданий, которые рассылают эти письма, забивая нам сервак и съедая у него память и прочие ресурсы. Это вообще отдельный сервер. По сути мы, можно сказать, «отдали отправку сообщений на аутсорс» и снизили таким образом нагрузку на основной рабочий сервер.

Самое интересное, что работает это быстро, и мы это проверили.

В одном случае мы вообще извратились. Клиент сказал: мы хотим сделать так, чтобы если вдруг кто-то нашу базу получит, то даже если они увидят данные (допустим, расходные накладные), чтобы они не поняли, кому этот товар отгружался. И мы вынесли справочник «Контрагенты» в отдельную конфигурацию, которая хранилась даже не в локальной сети. В этой конфигурации у нас было хранилось соответствие контрагента и его UUID, а в основной базе в «Реализации товаров и услуг» указывался исключительно уникальный идентификатор в виде строки.

Если кто-то кому-то отдельно передаст блок, отвечающий за продажи – он увидит цифры по документам, но кому они ушли – не понятно.

То же самое сделали с номенклатурой, запутали совсем все серьезно.

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

Но оказалось, что временами это работает даже быстрее за счет того, что в каждой базе очень маленькая СУБД. Эти запросы выполняются незаметно, прием иногда в фоне, асинхронно.

Пользователи не заметили, что они теперь, оказывается, работают в «оборонке», где «здесь делают корпуса, а здесь – взрыватели».

 

 

Необязательно всю конфигурацию сразу делать распределенной. Если вы решите делать подобные вещи, и вам скажут, что сейчас чтобы все разделить работы будет на 3 года, вы вынесите для начала один маленький блочок.

Именно так мы и начали: просто отдали файлы «на аутсорс». Завершили этот блок и проверили, что оно работает.

А потом потихоньку начали конфигурацию разбивать на отдельные блоки. Тогда весь процесс становится намного менее трудоемким.

 

 

Самое главное, что такая система становится более живучей, и за счет этого обеспечивается безопасность.

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

Теперь у нас рассылка на отдельном сервере, файлы на отдельном сервере. База начала работать намного быстрее.

 

Разогреватель сеансов

 

 

Вы можете возразить, что в случае, когда мы работаем через HTTP-сервисы, при первом подключении сервер, в который мы стучимся, очень долго думает. Получается, что пока мы соберем данные из трех-четырех баз, форма будет висеть 10 секунд.

Для этого мы используем так называемый «разогреватель сеансов». Дело в том, что когда мы первый раз подключаемся к базе, запускается сеанс на сервере 1С, а потом он уже отвечает на все HTTP-запросы. Неважно – с одной базы они приходят или с нескольких. И тогда ответ приходит уже за миллисекунды.

Так вот, для того, чтобы у нас постоянно базы были готовы, мы запустили в нашей мастер-базе фоновые задачи, которые время от времени дергают все остальные базы по списку. Раз в 20 минут, допустим, пока сеанс не успел погаснуть. И получает от него ответ: «Со мной все в порядке, я работаю».

Помимо того, что мы таким образом обеспечиваем скорость работы, мы еще проверяем, живы ли у нас удаленные базы. Как только мы увидели, что какая-то база перестала отвечать, мы быстро сигнализируем админу. Это также действует на повышение уровня безопасности.

 

 

Здесь слайды из моего доклада 2021 года, где сервер 1С представлен в виде фастфуда. Допустим, вот эти кассы – это неразогретые сеансы.

 

 

Когда к нам приходит первый HTTP-запрос, «первый клиент», то «кассир» просыпается и медленно входит в рабочий режим – HTTP-запрос отвечает за 3 секунды.

 

 

Потом клиента обслужили, он ушел, а кассир 20 минут ждет.

 

 

Приходит следующий клиент и обслуживается уже моментально, так как сеанс уже поднят и готов к работе..

Вот таким образом работают HTTP-запросы. Если приходит второй клиент, поднимается второй сеанс («выходит второй кассир») и так далее.

 

Защита от кражи кода чужими и своими сотрудниками

 

 

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

И эти данные, они ничего такого особенно ценного не представляют для того, кто эту базу получил. Это соответствует принципу, про который говорил Чак Норрис – «Не держите все яйца в одной корзине».

Поэтому не надо складывать всё в одну базу. Если у вас есть возможность разбить данные не на подсистемы, а прямо на отдельные базы, ваша система будет намного живучее и намного безопаснее.

 

 

Задача в очень охраняемом здании.

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

Я пришел, там на входе вертушка, полицейский стоит с автоматом, за ним еще двое – все очень серьезно. Показываю паспорт, а он у меня украинский, я крымчанин. Полицейский мне говорит: «Мы не можем вас впустить, вы гражданин другого государства». Я говорю: «Меня ждут». Он качает головой, что это не обсуждается – вход в здание органичен, протокол нарушать нельзя.

Я звоню клиенту, женщине, так и так. Она мне: «Выйдите сейчас из проходной потихоньку, только вслух ничего не говорите. Обойдите здание справа и зайдите с торца – у нас тут кафетерий». Ну ладно, думаю – есть не хочу, но схожу.

 

 

Захожу, там никого нет, кроме продавца. Тут открывается дверь, и из-за спины продавца выглядывает моя клиентка: «Пойдемте быстрее, пока никто не видит». Так я попал в очень охраняемое здание, не буду говорить какое, но реально я туда попал. Это не шутка.

Так вот, если у вас все данные лежат в одной корзине – первые, кто вас сдаст, это ваши сотрудники. Несмотря на все протоколы и все остальное.

Если им не запретить доступ, они будут делать все, чтобы облегчить себе жизнь. В данном случае тетенька облегчила себе жизнь – ей было тяжело искать другого исполнителя, а меня ей порекомендовали.

Поэтому разделение данных существенно влияет на безопасность.

 

 

Когда мы некоторые сервисы выносим в отдельные конфигурации, запускаем туда пользователей через веб-сервис или HTTP-сервис, мы уменьшаем нагрузку на сервер.

Это тоже безопасность, потому что, как я говорил, чем реже у нас падают сервера, тем меньше вероятность потерять информацию.

И теперь вспоминаем вчерашние слова представителей 1С. Почему 1С:Аналитика работает быстрее? Потому что доступ через веб-сервис.

Чем веб-сервис отличается от обычного тонкого или веб-клиента? Когда мы подключаемся через HTTP-сервис, не создается клиентский сеанс на сервере с 1С.

У вас 20 человек запустили интерфейс в тонком или веб-клиенте, у вас 20 сеансов создались, и на каждый были использованы ресурсы сервера, как минимум – оперативная память.

HTTP-запрос работает как кассир. Вы пришли: «Здрасте, можно мне вот это?» – «Да, забирай».

Ничего ждать не нужно, память на лишние сеансы не тратится.

 

 

Еще немного про безопасность. Как сделать так, чтобы клиенты не украли ваш код? Самый простой вариант – обфускация.

  • На обфускацию кода многие ругаются, потому что она мешает самостоятельно починить код, если что-то упадет.

  • Поэтому используйте обфускацию только на проверенных алгоритмах, которые уже отлажены до состояния «дальше некуда».

  • Например, мы делаем типовые решения, продаем их. В какой-то момент закрыли один модуль. Знаете, сколько к нам обратилось с проблемой, что у вас тут закрытый код? Ноль.

  • Всем все равно, если все работает. Тем не менее, мы свой код защитили от нехороших людей.

 

 

Ограничите доступ к серверу. Знаете, откуда этот слайд? Когда-то был такой диафильм по рассказу «Зеленая скамеечка». Может быть, кто-то из таких же «динозавров», как я, его помнит.

Там суть в том, что жандарм пришел на обыск к революционеру, у которого были секретные листовки. А революционер, чтобы их сохранить, сделал зеленую скамеечку, в ней продолбил дырочку, скрутил листовки трубочкой и туда положил. А жандарму предложил на эту скамеечку сесть. Жандарм сидит на скамеечке и не знает, что листовки, оказывается, под ним.

При чем здесь 1С? Когда-то я учился на бухгалтера, и когда после окончания института мы разошлись каждый по своей специализации, я открыл себе магазин по продаже компьютеров в центре Севастополя на Большой Морской. А на параллельной ей улице – Кулакова – у нас была налоговая, там работал мой бывший однокурсник Коля.

Я еще думал, рассказывать про эту историю или нет, потому что она про «оборотня в погонах», потом подумал, это было давно, в другом государстве, и даже освещалась в газетах, поэтому можно.

Дело в том, что Коля был взяточник, про него даже в газетах писали. Он брал все, что только можно. И однажды ко мне обратился мой клиент: «Юр, я не знаю, что делать. Он совсем зарвался – постоянно ко мне приходит и доит. А теперь хочет забрать у меня базу и нагнуть по полной. Что делать?»

 

 

Мы с ним решили купить принтер с кучей лотков – в нашем было два лотка. Взяли нижний лоток, положили туда сервер с HDD и вентиляторы, чтобы все это охлаждалось.

А сзади отпаяли проводочки и вместо сетевого кабеля, через который работает сам принтер, подключили обычный свитч с двумя проводками – один на принтер, а другой на сервер.

Мы втыкаем сетевой проводок – у нас обычный принтер, мы на нем печатаем.

И когда этот Коля пришел к нему с проверкой и спросил: «Где сервак?» – «Не знаю» – «Ну что, будем протокол вам писать» – «Вот, можете даже на принтере распечатать». И наш клиент повторил сюжет «Зеленой скамеечки».

Этот же Коля однажды пришел ко мне и развел меня на 100 баксов, а потом поделил их на двоих с коллегой. Я тогда еще подумал: «Вот что он себе за эти 50 баксов купил, интересно?»

А купил он себе потерю следующей должности. Дело в том, что спустя буквально пару недель он поехал к этому клиенту, изъял у него все компы и звонит мне, говорит: «Иди сюда, дело на миллион». Я подхожу, он показывает гору компов, говорит: «Тут есть база, мне нужно из нее все данные вытащить». А сам уже такой довольный сидит, коньячком пахнет, дырки себе в погонах готовит. Говорит: «Сейчас мы его нагнем, и мне дадут новую должность».

Я говорю, «А где сервер?». А я же знаю, что сервер в принтере.

Для создания видимости я, конечно, походил по другим компам, поискал, говорю: «Коля, здесь только клиенты стоят, а данные на сервере».

Ну и все, Колю уволили. Так уж получилось. Поэтому прячьте сервер. Это реально помогает.

 

 

Но с другой стороны – не прячьте сервер. Потому что Коля на этом не остановился, он же еще полгода работал.

Буквально за 5 месяцев до этого тот же клиент обратился ко мне: «Он же еще раз придет и начнет спрашивать, где сервер. Что я ему скажу? Они по проводкам проследят и все-таки найдут». Говорю, «Вот ты ставишь сервер, на котором так и написано – СЕРВЕР. Мы тебе сделаем РИБ, распределенную базу, и в эту базу будем просто закачивать те данные, которые нужно показать. А настоящий сервер у тебя будет по-прежнему в принтере».

И когда наш друг Коля сервер, который не сервер, изъял и базу открыл, там придраться было не к чему. Таким образом, мы реально обеспечили клиенту безопасность данных от нехорошего злого волка в погонах.

 

Инфраструктура распределенной конфигурации 1С

 

 

Посмотрите еще раз на слайд, про который мы говорили.

  • Самая нагруженная конфигурация у нас в итоге оказалась на Сервере 1 – это две подсистемы: проекты и отчеты.

  • Все, что со значком интернета – это веб-клиент, существенно снизивший нагрузку на сервер и запретивший пользователям доступ к чему бы то ни было.

  • А все, что с облачками – это отдельные базы, которые раньше были отдельными подсистемами.

Вот таким образом мы обеспечили защиту от кражи своими, от кражи чужими, ну и от падения сервера.

 

Вопросы

 

Как вы реализуете консолидированную отчетность, чтобы не гуиды были, а вот именно привычные представления для пользователей?

Мы их собираем несколькими запросами.

  • Одним HTTP-запросом идем к базе, где у нас хранятся контрагенты и их идентификаторы.

  • Потом идем в другую базу, где у нас хранится номенклатура и их идентификаторы.

  • Получили две таблички. Далее получили из третьей базы табличку с движениями, где у нас тоже уиды. И просто уиды номенклатуры заменили на название номенклатуры, и уиды контрагентов заменили на название контрагентов.

Это работает медленнее, чем обычный отчет, но незначительно. Там разница буквально миллисекунды.

Кажется, что на таких запросах оно должно тупить. Нет, оно не тупит, оно иногда даже быстрее работает, потому что каждая СУБД дает свои ответы намного быстрее, в ней данных меньше. Поэтому выборка происходит быстрее.

А HTTP-запрос – это 200 миллисекунд, там незаметно. Ну, на полсекунды стал дольше формироваться отчет – никто этого не заметит.

Какие примерно трудозатраты сделать такой интерфейс для компании в 100 рабочих мест?

Вы берете трудозатраты на разработку в обычном случае и умножаете примерно в три раза.

Значительно увеличивается время на разработку, но значительно уменьшается время на поддержку. Когда у нас что-то маленькое одно сломалось, в нем проще разобраться. Поэтому мы сначала вкладываемся, а потом пожинаем плоды, за счет того, что эксплуатировать становится дешевле.

А цифра 3 – это обычный менеджерский коэффициент?

Это опыт, статистика. Мы проверяли – примерно так и есть.

Например, контрагенты хранятся в отдельной базе, пользователи работают, заполняют документы. Как долго открывается форма выбора справочника «Контрагенты»? Он же может быть достаточно большой. То же самое с номенклатурой – это может быть очень большой справочник. И людей, которые заполняют документы – тоже очень много. Одновременно идет запрос такого большого количества списков информации.

У вас запрос в любом случае идет. В обычном случае он идет к таблице одной СУБД, а в нашем случае это идет запрос к таблице другой СУБД.

У нас увеличение времени происходит за счет выполнения HTTP-запроса и соединения этих данных потом. Но, как я говорил, снижается время выполнения запроса к СУБД, потому что сама СУБД значительно меньше. Поэтому проигрыш у нас по времени, да, он есть, но он действительно незначительный. Он миллисекунды, меньше секунды. Пользователи этого не замечают.

В версии 1С:Предприятие 8.3.23 будет Java web-tokens. А как вы без них организуете ограничение данных по пользователю?

Мы придумали свой алгоритм формирования токенов. Причем токены у нас меняются время от времени. Если кто-то украл чей-то токен и подставил в HTTP запрос, через пять минут он уже недействительный.

Ну да, смысл такой, что пользователь авторизуется, получает токен и нативно, с помощью разрешений, которые на уровне «ВЫБРАТЬ РАЗРЕШЕННЫЕ» с RLS, ему отдаются данные. Как у вас?

У нас примерно то же самое происходит, только у нас не RLS, поскольку мы подключаемся через HTTP-сервис, там идет авторизация под одним служебным пользователем. И мы RLS эмулируем просто запросом путем передачи параметров в запрос. Мы выбираем данные, доступные только данному контрагенту.

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции Infostart Event 2022 Saint Petersburg.

 

30 мая - 1 июня 2024 года состоится конференция Анализ & Управление в ИТ-проектах, на которой прозвучит 130+ докладов.

Темы конференции:

  • Программная инженерия.
  • Инструментарий аналитика.
  • Решения 1С: архитектура, учет и кейсы автоматизации на 1С.
  • Управление проектом.
  • Управление продуктом.
  • Soft skills, управление командой проекта.

Конференция для аналитиков и руководителей проектов, а также других специалистов из мира 1С, которые занимаются системным и бизнес-анализом, работают с требованиями, управляют проектами и продуктами!

Подробнее о конференции.

 


См. также

Результаты ревью кода 1500+ решений каталога Инфостарт: наиболее частые ошибки разработчиков в коде

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

Поделюсь своим опытом аудита кода авторских продуктов с Infostart.ru как одним из элементов применения DevOps-практик внутри Инфостарт. Будет настоящий код, боевые скриншоты, внутренние мемы от команды ИТ-лаборатории Инфостарт и прочее мясо – все, что любят разработчики.

10.04.2024    6658    artbear    84    

81

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Перенос данных 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    6239    dsdred    59    

86

Анализируем SQL сервер глазами 1С-ника

HighLoad оптимизация Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих зааросов на sql, ожиданий, конвертация запроса в 1с и рекомендации где может тормозить

1 стартмани

15.02.2024    8509    170    ZAOSTG    74    

102

Опыт оптимизации 1С на PostgreSQL

HighLoad оптимизация Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    9602    ivanov660    6    

76

ТОП проблем/задач у владельцев КОРП лицензий 1С на основе опыта РКЛ

HighLoad оптимизация Бесплатно (free)

Казалось бы, КОРП-системы должны быть устойчивы, быстры и надёжны. Но, работая в рамках РКЛ, мы видим немного другую картину. Об основных болевых точках КОРП-систем и подходах к их решению пойдет речь в статье.

15.11.2023    5446    a.doroshkevich    20    

72

Мигрируем с MS SQL на PostgreSQL

Администрирование СУБД Бесплатно (free)

Переход с MS SQL на PostgreSQL сопряжен с рисками для бизнеса и неизбежно вызывает множество вопросов. Статья посвящена тому, как заранее подготовиться к предстоящей миграции, провести нагрузочное тестирование, выявить возможные проблемы перехода и провести необходимую оптимизацию.

13.11.2023    11863    ivanov660    31    

73

Неочевидный баг Истории данных, убивающий rphost

Администрирование СУБД Платформа 1С v8.3 Бесплатно (free)

Расследование о том, почему команда ИсторияДанных.ОбновитьИсторию() убивала rphost.

08.11.2023    6493    dsdred    48    

72

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16721    skovpin_sa    14    

101
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Steelvan 302 19.06.23 12:13 Сейчас в теме
Привет !

Лови плюсик :)
TitanLuchs; +1 Ответить
2. TitanLuchs 397 19.06.23 12:15 Сейчас в теме
3. maksa2005 534 13.07.23 13:48 Сейчас в теме
Сервер в МФУ - оригинально), вот только как поместить такой туда?
Прикрепленные файлы:
4. TitanLuchs 397 13.07.23 13:49 Сейчас в теме
(3) Там был "сервер" из обычного десктопного компьютера. Для 10 пользователей хватало.
5. maksa2005 534 13.07.23 13:52 Сейчас в теме
(4) Да я это понял сразу, просто мысль пришла как спрятать бизнес с 50 базами и весом всего за 1,5tb)) и серверный шкаф в маленький принтер hp 1102))
6. TitanLuchs 397 17.07.23 14:44 Сейчас в теме
(5) Купить принтер побольше )
Igor_Ryaboff; maksa2005; +2 Ответить
7. paulwist 21.11.23 12:16 Сейчас в теме
Одним HTTP-запросом идем к базе, где у нас хранятся контрагенты и их идентификаторы.

Потом идем в другую базу, где у нас хранится номенклатура и их идентификаторы.

Получили две таблички. Далее получили из третьей базы табличку с движениями, где у нас тоже уиды. И просто уиды номенклатуры заменили на название номенклатуры, и уиды контрагентов заменили на название контрагентов.


А как в такой архитектуре поддерживается, например, ссылочная целостность??
8. TitanLuchs 397 21.11.23 15:35 Сейчас в теме
(7) Особых проблем нет. Принципы примерно такие же, как при миграции одного справочника в несколько баз с обычным обменом: добавляем элементы справочника только в одной базе, удаляем тоже только в одной.
9. paulwist 21.11.23 16:04 Сейчас в теме
(8)
удаляем тоже только в одной.


То есть, в БД1 добавили ЭлементСрпавочника1 -> перенесли в БД2 -> в БД2 использовали ЭлементСрпавочника1 в документе. -> в БД1 удалили ЭлементСрпавочника1

Вопрос:

1. Каким образом проверяется, что данный элемент справочника не используется в документах БД2?

2. Что делается если БД2 упала/нет коннекта?
10. TitanLuchs 397 21.11.23 16:10 Сейчас в теме
(9) 1. При пометке на удаление делаем http-запрос в в БД2, проверяем там, используется элемент или нет.
2. Генерим сообщение об ошибке
11. paulwist 21.11.23 16:26 Сейчас в теме
(10)
1. При пометке на удаление делаем http-запрос в в БД2, проверяем там, используется элемент или нет.


ОК, проверка использования - самописная или же через платформу?
12. TitanLuchs 397 21.11.23 16:41 Сейчас в теме
(11) Самописная. Метод НайтиПоСсылкам.
13. paulwist 22.11.23 08:21 Сейчас в теме
(12)
Самописная. Метод НайтиПоСсылкам.


ОК, понятно.

Ещё "подвопрос": каким образом интегрирован метод НайтиПоСсылкам в COM модель 1С??

Если конечно такая задача не ставилась.
14. TitanLuchs 397 22.11.23 13:40 Сейчас в теме
(13) У нас базы не через COM общались - через http-сервисы. Во-первых, не зависим от версии платформы (в COM все базы должны быть на одной версии платформы), во-вторых, базы могут находиться сколь угодно далеко друг от друга.
15. paulwist 22.11.23 15:27 Сейчас в теме
(14)
У нас базы не через COM общались - через http-сервисы.


Это понятно.

В моём "зоопарке" есть внешние приложения, которые юзают COM-интерфейс 1С, ... отсюда был вопрос про COM (то есть, насколько я понял, для COM предложенная архитектура не писалась. Ладно.).
Оставьте свое сообщение