Мультипрограммирование — Википедия

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

Когда следует использовать это решениеWhen to use this solution

Пакетная обработка используется в различных сценариях — от простых преобразований данных до полного конвейера ETL (извлечение, преобразование и загрузка).Batch processing is used in a variety of scenarios, from simple data transformations to a more complete ETL (extract-transform-load) pipeline. В контексте больших данных пакетная обработка может выполняться для очень больших наборов данных, которые вычисляются длительное время.In a big data context, batch processing may operate over very large data sets, where the computation takes significant time. (Например, см. раздел лямбда-архитектура.) Пакетная обработка обычно приводит к дальнейшим интерактивным исследованиям, предоставляет данные, готовые для моделирования, в машинном обучении или записывает данные в хранилище данных, оптимизированное для аналитики и визуализации.(For example, see Lambda architecture.) Batch processing typically leads to further interactive exploration, provides the modeling-ready data for machine learning, or writes the data to a data store that is optimized for analytics and visualization.

Одним из примеров пакетной обработки является преобразование большого набора плоских, полуструктурированных CSV- или JSON-файлов в схематизированный и структурированный формат, который можно запрашивать.One example of batch processing is transforming a large set of flat, semi-structured CSV or JSON files into a schematized and structured format that is ready for further querying. Обычно данные преобразуются из необработанных форматов, используемых для приема (например, CSV), в двоичные форматы, которые более эффективны для запросов, так как хранят данные в формате столбцов и часто предоставляют индексы и встроенную статистику данных.Typically the data is converted from the raw formats used for ingestion (such as CSV) into binary formats that are more performant for querying because they store data in a columnar format, and often provide indexes and inline statistics about the data.

Что такое пакетная обработка данных

Система пакетной обработки данных — это когда данные обрабатывают пакетами. То есть массив информации, сходной по смыслу или формату, помещают в некоторый контейнер, а потом производят над ней какое-то действие. Например, изменяют или отбирают нужные файлы по заданным критериям. Выбранное действие обязательно применяется сразу ко всем файлам/байтам/записям в пакете.

История

Термин «пакетная обработка» происходит от традиционной классификации методов производства на производство по заказу (разовое производство), серийное производство (производство «партии» нескольких изделий одновременно, по одной стадии за раз) и поточное производство. (серийное производство, все этапы сразу).

Ранняя история

Ранние компьютеры могли одновременно запускать только одну программу. Каждый пользователь имел единоличное управление машиной в течение определенного периода времени. Они приходили к компьютеру с программой и данными, часто на перфокартах и ​​магнитной или бумажной ленте, и загружали свою программу, запускали и отлаживали ее, а по завершении уносили свой вывод.

По мере того, как компьютеры становились все быстрее, время настройки и демонтажа становилось все больше и больше доступного компьютерного времени. Были разработаны программы, называемые мониторами , предшественники операционных систем , которые могли обрабатывать серию или «пакет» программ, часто с магнитной ленты, подготовленной в автономном режиме. Монитор загружается в компьютер и запускает первое задание пакета. В конце задания он восстанавливает контроль, загружается и запускается следующим, пока пакет не будет завершен. Часто выходные данные партии записывались на магнитную ленту и распечатывались или перфорировались офлайн. Примерами мониторов были IBM Fortran Monitor System , SOS (Share Operating System) и, наконец, IBSYS для систем IBM 709x в 1960 году.

Системы третьего поколения

Компьютеры третьего поколения, способные к мультипрограммированию, начали появляться в 1960-х годах. Вместо того, чтобы запускать по одному пакетному заданию за раз, в этих системах может одновременно выполняться несколько пакетных программ, чтобы обеспечить максимальную загруженность системы. Одна или несколько программ могут ожидать ввода, одна активно работает на ЦП, а другие генерируют вывод. Вместо автономного ввода и вывода программы, называемые спулерами, считывают задания с карт, дисков или удаленных терминалов и помещают их в очередь заданий для выполнения. В целях предотвращения тупиков планировщик заданий должно знать требования-память ресурсов каждого задания, в магнитных ленты, монтируемые диски так различные языки сценариев были разработаны, и т.д., чтобы предоставить эту информацию в структурированном виде. Вероятно, наиболее известным является язык управления заданиями IBM (JCL). Планировщики заданий выбирают задания для запуска в соответствии с множеством критериев, включая приоритет, размер памяти и т. Д. Удаленная пакетная обработка – это процедура отправки пакетных заданий с удаленных терминалов, часто оснащенных устройством чтения перфокарт и линейным принтером . Иногда асимметричная многопроцессорная обработка используется для буферизации пакетного ввода и вывода для одного или нескольких больших компьютеров с помощью подключенной меньшей и менее дорогой системы, как в IBM System / 360 Attached Support Processor .

Более поздняя история

Пакетный файл

CDC NOS

для получения файла STARTRK и вывода его на перфоратор

С конца 1960-х годов стали распространены интерактивные вычисления, например, через текстовые компьютерные терминальные интерфейсы (как в оболочках Unix или циклы чтения-оценки-печати ), а позже и графические пользовательские интерфейсы . Неинтерактивное вычисление, как единовременный рабочие мест , такие как составление и обработка нескольких элементов в партии, стали задним числом называется пакетной обработкой , и срок пакетного задания (в начале использования часто «партия из рабочих мест») стала обычным явлением. Раннее использование особенно широко используется в Мичиганском университете , в районе Терминальной системы Мичигана (MTS).

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

Непрерывный

Неинтерактивные вычисления по-прежнему широко используются в вычислениях, как для общей обработки данных, так и для задач «домашнего хозяйства» системы (с использованием системного программного обеспечения ). Программа высокого уровня (выполняющая несколько программ с некоторой дополнительной «связующей» логикой) сегодня чаще всего называется сценарием и написана на языках сценариев , особенно сценариях оболочки для системных задач; в IBM PC DOS и MS-DOS это называется пакетным файлом . Сюда входят компьютеры на базе UNIX , Microsoft Windows , macOS (основой которой является ядро BSD Unix) и даже смартфоны . Выполняемый сценарий, особенно тот, который выполняется из интерактивного сеанса входа в систему , часто называют заданием , но этот термин используется очень неоднозначно.

«Нет прямого аналога пакетной обработки z / OS в системах ПК или UNIX. Пакетные задания обычно выполняются в запланированное время или по мере необходимости. Возможно, самое близкое сравнение – с процессами, выполняемыми командой AT или CRON в UNIX, хотя различия значительны ».

Пакетная обработка[править | править код]

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

Проза жизни и cron

Центральным игроком в пакетной обработке данных для машин под UNIX® является демон cron. Этот демон считывает файл конфигурации, который сообщает ему, какие командные строки выполнять, и как часто. Затем демон выполняет их, работая как часовой механизм. Он даже отправляет любые сообщения об ошибках по указанному e-mail адресу, так что вы можете устранять ошибки при их возникновении.

Я знаю, что инженеры, отстаивающие преимущества конкурирующей Web-технологии, чье название ассоциируется с кофе, качают сейчас головами. “Потоки! Потоки – вот верный способ выполнять обработку в пакетном режиме. Демон cron – это динозавр.”

Я позволю себе с ними не согласиться.

Я работал и с тем, и с другим, и думаю, что cron имеет то преимущество, что в нём соблюдается принцип “Keep It Simple, Stupid” (KISS) – будь проще, дурачок. Он позволяет сохранить фоновую обработку простой. Вместо приложения с многопоточной обработкой задания, выполняемого бесконечно долго и никогда не освобождающего ресурсы памяти, вы имеете простой скрипт, который запускает cron. Скрипт определяет, есть ли работа, которая должна быть выполнена, выполняет ее, а затем его выполнение завершается. Не нужно волноваться об утечках памяти. Не нужно переживать, что поток остановится или попадет в ловушку бесконечного цикла.

Итак, как работает cron? Это зависит от вашего хостинг-решения. Я буду придерживаться старой доброй UNIX-версии cron с командной строкой, а вы можете проконсультироваться с вашим системным администратором, как можно реализовать её в вашем Web-приложении.

Ниже приведена простая настройка cron для выполнения PHP-скрипта раз в день в 11 часов вечера:

0 23 * * * jack /usr/bin/php /users/home/jack/myscript.php

Первые пять полей определяют время запуска скрипта. Затем идет имя пользователя, которое должно использоваться при запуске программы. Оставшаяся часть строки – командная строка для выполнения. В поле времени задаются минута, час, день месяца, месяц и день недели. Ниже приведено несколько примеров.

Команда:

15 * * * * jack /usr/bin/php /users/home/jack/myscript.php

запускает скрипт по отметке 15 минут каждый час.

Команда:

15,45 * * * * jack /usr/bin/php /users/home/jack/myscript.php

запускает скрипт по отметке 15 и 45 минут каждый час.

Команда:

*/1 3-23 * * * jack /usr/bin/php /users/home/jack/myscript.php

запускает скрипт каждую минуту с 3 ч. утра до 11 ч. вечера.

Команда:

30 23 * * 6 jack /usr/bin/php /users/home/jack/myscript.php

запускает скрипт в 11:30 вечера по субботам (день недели задан цифрой 6).

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

Используйте директиву MAILTO, чтобы указать, куда должны отправляться сообщения об ошибках в виде e-mail:

MAILTO=jherr@pobox.com

Примечание: Для пользователей Microsoft® Windows® существует аналогичная система “Назначенные задания” для запуска выполнения процессов из командной строки (как PHP-скрипт) через заданные промежутки времени.

Производительность

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

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

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

Однако если логика решаемой задачи позволяет распараллелить процессы обработки данных, то распараллеливание – это наиболее и эффективный способ кратного увеличения производительности системы. Многопоточная обработка данных – гармоничный путь развития современных систем учета и 1С не является исключением.

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

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

  • Организовывать хранение пакета данных для обработки в фоновом задании, а также организовывать хранение результата обработки пакета данных.
  • Каким-либо образом отслеживать динамику работы фоновых заданий. Зачастую обработка должна быть организована в фиксированное число потоков. Необходимо отслеживать момент завершения обработки одних пакетов данных и своевременно запускать фоновые задания для обработки еще не обработанных пакетов данных.
  • Реализовать способ управления многопоточной обработкой пакетов данных. Останавливать/запускать процесс, увеличивать/уменьшать количество потоков обработки и пр.
  • Следить за работоспособностью запущенных фоновых заданий. Фоновые задания могут завершаться аварийно, быть завершены кластером серверов 1С,  зависать и пр. Нужно каким-либо образом диагностировать эти ситуации и запускать повторную обработку пакетов данных, которые обрабатывались в аварийном фоновом задании. Также может потребоваться прервать работу фонового задания, если оно имеет признаки зависания.
  • Налаживать логирование процесса обработки пакета данных. Часто нужно хранить не только информацию о факте запуска/завершения обработки пакета, но и дополнительную информацию с описанием хода процесса обработки пакета данных.

Для решения этих и многих других (менее явных, но не менее важных) задач предназначена конфигурация «Универсальные механизмы: пакеты данных».

Конфигурация «Универсальные механизмы: пакеты данных» может быть внедрена в любую конфигурацию на платформе 1С 8.3 без доработок. Она полностью независима и самодостаточна.

В конфигурации есть 2 основных понятия, вокруг которых строится вся работа:

  • Пакет данных
  • Способ обработки пакетов данных

Пакет данных

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

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

Пакет данных имеет статус, который зависит от результата его обработки:

  • К обработке – пакет еще не обработан.
  • В обработке – в данный момент пакет обрабатывается.
  • Обработан – пакет успешно обработан.
  • Ошибка – при обработке пакета возникла ошибка.

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

Ну и главное – пакет данных обязательно содержит ссылку на способ обработки пакетов.

Что означает обработка данных в пакетном режиме

По сути, с данными в одном пакете могут происходить всего две вещи:

  1. Применение операций. Выбранная операция применяется к каждому элементу пакета. Если это картинки — можно скорректировать цвета или повернуть их на 90 градусов. Если это видео — можно обрезать первые 30 секунд и добавить надпись поверх. Если это двоичный файл — можно его шифровать или дешифровать. Короче говоря, можно сотворить любую операцию, которая придет в голову.
  2. Фильтрация. Можно фильтровать файлы внутри пакета — например, оставить в нем только картинки с котами и удалить все остальные. Или фильтровать пакет в целом — пропускать данные на дальнейшую обработку тогда, когда в нем встретились фотки только котов. Если внутри встретится хоть одна фотка собаки — пакет целиком отбрасывается. Настройки обработки могут быть разными.

Пример решения для пакетной обработки данных, собранных в процессе работы бизнеса, — Apache Hadoop и его механизм обработки MapReduce. Он может работать с огромными массивами информации и используется, если в компании хранят big data.

Пакетное окно

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

Работа банка в конце дня (EOD) требует концепции переключения , когда транзакция и данные отключаются для пакетной активности определенного дня («депозиты после 15:00 будут обработаны на следующий день»).

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

Очередь сообщений

Первым вариантом является специализированная система очередей сообщений. В данной модели БД содержит таблицу со списком сообщений e-mail, которые должны быть разосланы разным людям. В Web-интерфейсе для добавления e-mail в очередь используется класс mailouts. Программа обработки e-mail использует класс mailouts для выборки ждущих обработки сообщений и их последующего удаления из очереди.

Модель начинается схемой MySQL.

Листинг 1. mailout.sql

DROP TABLE IF EXISTS mailouts;CREATE TABLE mailouts ( id MEDIUMINT NOT NULL AUTO_INCREMENT, from_address TEXT NOT NULL, to_address TEXT NOT NULL, subject TEXT NOT NULL, content TEXT NOT NULL, PRIMARY KEY ( id ));

Эта схема достаточно проста. Каждая строка содержит адреса from (откуда) и to (куда) , а также тему и содержание e-mail.

Оболочкой таблицы mailouts в БД служит класс PHP mailouts.

Листинг 2. mailouts.php

<?phprequire_once(‘DB.php’);class Mailouts{ public static function get_db() { $dsn = ‘mysql://root:@localhost/mailout’; $db =& DB::Connect( $dsn, array() ); if (PEAR::isError($db)) { die($db->getMessage()); } return $db; } public static function delete( $id ) { $db = Mailouts::get_db(); $sth = $db->prepare( ‘DELETE FROM mailouts WHERE id=?’ ); $db->execute( $sth, $id ); return true; } public static function add( $from, $to, $subject, $content ) { $db = Mailouts::get_db(); $sth = $db->prepare( ‘INSERT INTO mailouts VALUES (null,?,?,?,?)’ ); $db->execute( $sth, array( $from, $to, $subject, $content ) ); return true; } public static function get_all() { $db = Mailouts::get_db(); $res = $db->query( “SELECT * FROM mailouts” ); $rows = array(); while( $res->fetchInto( $row ) ) { $rows []= $row; } return $rows; }}?>

В скрипте использован класс доступа к БД Pear::DB. Затем он определяет класс mailouts с тремя основными статическими функциями: add), delete и get_all. Метод add() предназначен для добавления почтового сообщения в очередь и должен использоваться пользователем внешнего интерфейса. Метод get_all() возвращает все данные из таблицы. Метод delete() удаляет отдельный метод.

Вы, возможно, спросите, почему бы не ввести метод delete_all() – “удалить все”, который вызывался бы в конце работы программы. Такого метода не существует по двум причинам: если я удаляю каждое сообщение после отправки, то исключаю возможность повторного отправления сообщения в случае перезапуска скрипта при возникновении неполадок; и, кроме того, между началом и завершением пакетного задания могут быть добавлены новые сообщения.

Следующим этапом является написание простой тестового скрипта для добавления записи в очередь.

Листинг 3. mailout_test_add.php

<?phprequire ‘mailout.php’;Mailouts::add( ‘donotreply@mydomain.com’, ‘molly@nocompany.com.org’, ‘Test Subject’, ‘This is a test of the batch mail sendout’ );?>

В данном случае я добавляю mailout и пишу Молли из какой-то компании (по адресу molly@nocompany.com.org), а также тему и содержание письма e-mail. Я могу запустить эту программу из командной строки: php mailout_test_add.php.

Для отправки сообщения e-mail мне нужен другой скрипт в качестве программы обработки.

Листинг 4. mailout_send.php

<?phprequire_once ‘mailout.php’;function process( $from, $to, $subject, $email ) { mail( $to, $subject, $email, “From: $from” );}$messages = Mailouts::get_all();foreach( $messages as $msg ) { process( $msg[1], $msg[2], $msg[3], $msg[4] ); Mailouts::delete( $msg[0] );}?>

В скрипте используется метод get_all() для выборки всех почтовых сообщений, а затем метод PHP mail() для поочередной отправки сообщений. После успешной рассылки всех сообщений, метод delete() удаляет эту отдельную запись из очереди.

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

Примечание: В информационном архиве PHP Extension and Application Repository (PEAR) имеется отличная практическая реализация системы очередей сообщений, которую можно загрузить бесплатно.

Зачем нужны системы пакетной обработки данных

  1. Для разделения сложных процессов на мелкие, понятные и легко реализуемые операции. Разбивка задач на мелкие подзадачи и применение этих подзадач к группам файлов отлично для этого подходит. Машину на заводе тоже собирают не сразу, а с помощью атомарных последовательных операций. Таким образом, пакеты — это просто способ борьбы со сложностью систем.
  2. Для того чтобы ускорить работу с данными. Пакетную обработку данных можно параллелить и запускать в кластерах серверов, то есть сразу на нескольких серверах. Это позволяет производить тяжелые вычисления куда быстрей, чем на одном сервере.
  3. Комбинация обеих причин — сложные многоступенчатые вычисления на больших объемах данных. Это когда тяжело, долго, много, но надо побыстрее и попроще.
Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...