Автоматизация учета

Применение параллельных вычислений для автоматизации бизнес процессов

За последние несколько лет ресурсы серверов использующихся для поддержания даже относительно небольших ИТ систем многократно возросли. Большинство серверов используют 4-е и более ядер процессоров. Не учитывая для определенных задач специфику параллельных вычислений, можно потерять значимую часть ресурсов ваших серверов.
892 20

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

Итак, в данной статье речь пойдет о параллельных вычислениях в пределах одного сервера с использованием многопоточности и соответствующим распределением по процессорам. Разумеется, возможность параллельных вычислений является неотъемлемой частью любой OLTP системы претендующей на приемлемую масштабируемость. В этом случае необходимо добиться максимальной параллельности выполнения потоков в разрезе пользователей. В контексте работы MS SQL сервера сессии должны быть максимально независимы друг от друга и не пересекаться на блокировках. При этом полностью от блокировок избавиться будет нельзя, т.к. может возникнуть проблема грязного чтения. В этом случае - цель достичь некоторой золотой середины между независимостью и параллельностью выполнения процессов, при этом не допустить серьезного риска возникновения грязного чтения или дедлоков.

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

Задачи распараллеливания отчасти решены в MS SQL – существует специальный параметр (max degree of parallelism) отвечающий за распараллеливание запросов в разрезе процессоров. Использование этого параметра позволяет распараллелить ряд SQL запросов и добиться их ускорения. К сожалению, это происходит не всегда – в ряде случаев может быть обратная ситуация, когда распараллеливаемый запрос выполняется дольше. Кроме этого практически всегда при распараллеливании совокупные затраты времени CPU значительно больше по отношению к выполнению в однопроцессорном варианте. Поэтому этот параметр для OLTP систем практически всегда нужно отключать и запрещать выполнение распараллеливания по умолчанию. 

Этим проблемам есть объяснение – не бывает общего решения по распараллеливанию для всех видов задач. Некоторые задачи вообще практически нельзя распараллеливать, некоторые напротив - хорошо поддаются распараллеливанию. (Кому знакомы термины мьютэксы и разработка многопоточных приложений, данная статья вряд ли подскажет что то новое). Рассмотрю несколько примеров из практики, которые показывают область применения алгоритмов распараллеливания. 

Расчет заработной платы

Несколько раз возникал вопрос решения проблем длительного времени выполнения регламентных обработок по расчету заработной платы. Разумеется, речь шла о больших объемах измеряемых десятками тысяч сотрудников. Анализ показал, что используемая система на базе 1С для расчета использует большое количество логических операций на клиентской части. На уровне MS SQL не было явно «тяжелых» конструкций, оптимизировав которые можно было бы рассчитывать на серьезный эффект ускорения. Это отчасти обусловлено тем, что сам по себе модуль расчета достаточно сложен в силу специфики российского законодательства, а также учитываются большое количество видов трудовых отношений. Используемое серьезное серверное оборудование было загружено минимально. При этом операции по расчету выполнялись весьма длительное время. Было решено применить для оптимизации этой задачи распараллеливание. В общем-то подобная задача достаточно хорошо распараллеливается, т.к. достаточно мало конкурирующих ресурсов, а также зависящих данных друг от друга. В определенном смысле можно сказать, что с точки зрения бухгалтерского учета расчет зарплаты произвольного сотрудника Х не влияет на расчет зарплаты произвольного сотрудника Y. (разумеется, в конце остается небольшая с точки зрения ресурсов задача агрегации и суммирования результатов).

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

Концепция реализации достаточно простая. Необходимо посчитать количество сотрудников участвующих в расчете. Исходя из предположения, что время расчета на произвольного сотрудника является постоянной величиной, необходимо этот список поделить на несколько одинаковых по количеству групп. Оптимальное количество групп не всегда равняется количеству процессоров. В некоторых случаях может меньше, т.к. узким местом системы может стать, например дисковая подсистема. А в некоторых случаях, как не удивительно, оптимальное количество может быть больше количества процессоров. Этому тоже есть логическое объяснение, но оно выходит за рамки этой статьи. Далее по этим группам происходит расчет зарплаты в отдельных сессиях 1С. А затем в конце происходит агрегирование результатов.

Все сложности начинаются при реализации. Например, процессы расчета зарплаты по различным сотрудникам в независимых сессиях, несмотря на логическую независимость друг от друга, блокировали друг друга (на уровне внутренних блокировок MSSQL). Для этого пришлось изменить структуру индексов, уровни изоляции а также некоторые типы запросов. Затем узким местом системы стал механизм нумерации новых документов – его также пришлось менять. Были определенные сложности и в создании механизма управления сессиями. Их необходимо было запускать автоматически, определяя сколько их уже запущено, не зависла ли какая либо из них. Необходимо было реализовать механизм контроля выполнения общего процесса и т.п.

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

Загрузка данных

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

К сожалению, это применимо не для всех систем и не для всей области данных. В большинстве случае информация, которая идет в систему зависит друг от друга и важна хронология предоставления этой информации. В этом случае нет возможности взять общую очередь и простым образом разделить ее на равномерные участки и обрабатывать их параллельно. Это возможно, как правило, в редких случаях. Например, в стандартном репликаторе MSSQL триггеры пишут в очередь изменений данные об операциях Insert, Delete, Update. Предполагается, что эти операции можно выполнить независимо друг от друга в случае если нет констрэинтов, вычисляемых полей и явных зависимостей. Кроме того в определенный момент времени может произойти ситуация, когда данные в системе будут несогласованы. Предположим, пройдут изменения по одному потоку в котором есть ссылка на новый элемент X, а в другом потоке где этот элемент создается (Insert) изменения могут еще не пройти. В результате, если в этот момент произойдет чтение по этой области данных, ссылка на элемент Х будет ссылаться на еще не существующий элемент в БД. Это самый простой случай, а ведь есть ситуации когда в зависимости от хронологии проведения документов результаты будут отличаться.

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

Важным условием является, работает ли кто-то с базой в момент загрузки данных. Как правило, параллельная загрузка необходима в случае возникновения больших очередей обмена. Это может произойти в случае длительного отсутствия связи источника и приемника. В этом случае в ночное время (если в это время с базой никто не работает, например система не 24*7) необходимо будет максимально использовать серверные ресурсы, для того чтобы в минимальный срок перенести всю очередь. Далее важно определить, а можно ли разбить очередь на группы изменений по объектам, которые относительно не зависят друг от друга.

Например, загрузка товаров по различным складам или загрузка различных видов документов использующих независимые контуры.

Вообще использование многопоточности является необходимым условием любого эффективного репликатора. В некоторых проектах применяя многопоточную загрузку наша проектная группа добивалась более чем 8-и кратного ускорения загрузки данных. Компания «СофтПоинт» успешно применяет технологию распараллеливания в проектах по оптимизации и построения распределенных систем.

Начать дискуссию

💌 Меняют бухотчетность, формы для оплаты больничных и правила уплаты НДФЛ за иностранцев. Топ новостей за неделю

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

Курсы повышения
квалификации

18
Официальное удостоверение с занесением в госреестр Рособрнадзора
Экспорт

Урежут госсубсидии экспортерам на транспорт и логистику

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

⚡️ Итоги дня: дачники начали скупать рассаду, Кустурица задумался о гражданстве РФ, Москва продает помещения в исторических зданиях

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

Лучшие спикеры, новый каждый день

Набиуллина: цель Центробанка — защита реальных доходов людей

Жесткая денежно-кредитная политика Центробанка направлена на то, чтобы защитить доходы людей от инфляции, а также обеспечить сбалансированный рост экономики страны.

Реклама

Местные власти станут активнее убирать незаконные рекламные конструкции

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

По какой ставке ЦБ надо рассчитывать неустойку за несданный вовремя строительный объект

После длительных судебных разбирательств Верховный суд РФ занял сторону ответчика-застройщика, который нарушил срок передачи жилья по ДДУ, из-за неправильно указанной истцом ключевой ставки ЦБ.

Иллюстрация: Вера Ревина/Клерк.ру
Опытом делятся эксперты-практики, без воды
Бесплатно с Отчетность в СФР

Как легко узнать регистрационный номер страхователя в СФР по ИНН. Мини-курс

Для чего нужен регистрационный номер в СФР и как его узнать, рассказываем в сегодняшнем мини-курсе.

Как легко узнать регистрационный номер страхователя в СФР по ИНН. Мини-курс

Правительство, регионы и инвесторы готовятся к созданию круглогодичных морских курортов России

Заместитель председателя правительства Дмитрий Чернышеко заявил, что «Пять морей и озеро Байкал» — это сейчас самый масштабный туристический проект в новейшей истории России.

58

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

Инвестиции в бизнес путем предоставления займа — один из способов пополнения оборотных средств для заемщика, приобретение новой линии оборудования или открытие нового филиала в другом регионе без изъятия финансов из оборота.

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

Как ИП не оказаться на грани лишения преимуществ патентной системы налогообложения. Узнайте из статьи, как соблюдать установленные лимиты и о возможностях сэкономить. А также выясните как оптимально снижать размер платежей по патенту на страховые взносы.

Как ИП не слететь с патента и другие хитрости, связанные с патентной системой налогообложения
6
70

Роскомнадзор дал 3 памятки, как настроить приватность и ограничить сообщения от незнакомцев

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

Читатели «Клерка» начнут разбираться в автоматизации сквозных бизнес-процессов

Автоматизация для многих бухгалтеров кажется чем-то сложным и непонятным, но компания Северсталь ЦЕС в своем блоге докажет, что цифровые продукты и IT-сервисы существенно облегчают бизнес-процессы.

Читатели «Клерка» начнут разбираться в автоматизации сквозных бизнес-процессов
Миникурсы, текстовые и видеоинструкции для бухгалтеров

Можно ли удержать с сотрудников стоимость обучения

Работодатели готовы оплачивать учебу, но встает вопрос и о защите средств. Часто — если сотрудник увольняется преждевременно, с него пытаются возместить стоимость. Законно ли это?

Иллюстрация: Вера Ревина/Клерк.ру

Кадровый аутсорсинг: в чем выгода

Штрафы за неправильное ведение кадрового делопроизводства достигают в некоторых случаях 200–500 тыс. руб., а проверки ГИТ в последнее время происходят все чаще. 

Кадровый аутсорсинг: в чем выгода

Верховный суд: ВТБ будет платить НДС за лицензии Microsoft

Поставщик программного обеспечение выиграл суд с банком ВТБ. После изменения налогового законодательства ему пришлось заплатить НДС по сублицензионному договору. Теперь программный НДС будет возмещать ВТБ.

64

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

С первого марта вступил в силу новый приказ Минтруда, и он серьезно затронет ваш бизнес, если вы работаете с самозанятыми. Государство решило заняться теми, кто пытается обходить налоги, и ваши отношения с самозанятыми исполнителями будут под особым контролем.

До 1 апреля надо сдать бухотчетность за 2023 год

Организации на всех режимах налогообложения должны сдавать бухгалтерскую отчетность не позднее 3-х месяцев после окончания отчетного года. Крайний срок сдачи за 2023 год – 01.04.2024 включительно.

82
ПСН

🔨 ИП на ПСН должен сам оказывать услуги, а не перезаказывать их у других ИП. Эксперт: достаточно спорная позиция Минфина

Заключение предпринимателем договоров субподряда с другими ИП не вписывается в рамки патента.

154

Кредиты и не только: способы финансирования предпринимателей

В 2023 году количество малых и средних предприятий в России увеличилось на 500 тыс. — до 6,3 млн. Это стало рекордом за всю историю существования реестра МСП.

Кредиты и не только: способы финансирования предпринимателей

Интересные материалы

ТОП-15 курсов по 1С:Документоборот (делопроизводство) в 2024 году

В этой статье мы собрали платные и бесплатные курсы по 1С:Документообороту.

ТОП-15 курсов по 1С:Документоборот (делопроизводство) в 2024 году