Информационный обмен или как реализовать транспорт данных?
Вопросу хранения, обработки и передачи данных посвящено огромное множество статей. Данные – это три кита, на которых держится любой бизнес, и от того, насколько грамотно эти данные обращаются в системах, зависят рост и успех компании.
За все время существования информационных систем архитектурный ландшафт менялся, и в каждой парадигме был свой способ хранения данных. От особенностей хранения данных, в свою очередь, зависели технологии интеграции. В данной статье мы рассмотрим основные технологии обмена данными, пережившие эволюцию и доказавшие свою состоятельность в бизнесе.
Необходимость перекачивать данные из одного хранилища в другое в бизнесе возникает на каждом шагу.
Рассмотрим простой кейс:
- Клиент оставил заявку на сайте банка – включилась передача данных с веб-формы в базу данных на бэк;
- Он запросил большой кредит: надо передать его персональные данные в сервис скоринга и получить решение;
- Банк готов сотрудничать с этим клиентом – необходимо передать статус по заявке для отображения личном кабинете;
- Кредит выдан, теперь его надо включить в отчетность, значит, он попадет в регулярные обновления данных в DWH.
В этом тривиальном кейсе мы видим 4 факта передачи данных, и для каждого из них используется свой интеграционный механизм.
Этот пример можно усложнить авторизацией и аутентификацией, использованием кэша для загрузки ранее заполненной формы, обогащением профиля клиента в личном кабинете данными из разных источников, предложением клиенту индивидуальных маркетинговых кампаний, логированием его поведения на фронте и передачей данных в аналитическую систему, и т.д.
Каждую секунду данные перемещаются из одного контейнера в другой по различным транспортным каналам. Итак, с помощью каких технологий может быть организован транспорт данных?
Прежде всего, разделим интеграции на две категории:
- онлайн-интеграции;
- интеграции с задержкой во времени.
Разные бизнес-задачи допускают разную степень актуальности данных. Например, когда клиент совершает онлайн-платеж, его данные моментально передаются в банк-эквайер, оттуда в платежную систему, и затем а банк-эмитент на проведение платежа. Все происходит моментально, и уж через какие-то полминуты сделка купли-продажи совершена.
А вот когда тот же клиент совершает покупку на борту самолёта, моментального обмена данными быть не может, поскольку отсутствует подключение к сети. Все операции накапливаются в POS-терминале, а по приземлении самолёта происходит процессинг всех оффлайновых операций. В данном случае это интеграция с задержкой во времени. Как правило, передача данных с лагом во времени допускается при невозможности получить моментальный ответ от смежной системы, или при передаче больших объемов данных (например, в DWH и BI-системы).
Онлайн-интеграции
Самый распространенный способ моментального обмена данными – через API (Application Programming Interface).
API – это интерфейс, спроектированный поставщиком ресурса для получения запросов на сервер по заданному контракту. Иначе говоря, это то, что обеспечивает эффективный процесс коммуникаций между программами, использующими функции и ресурсы друг друга. Идея обмена данными с помощью API лежит в основе сервис-ориентированной и микросервисной архитектур.
В таких архитектурах существуют системы, которые готовы выполнять некоторый набор функций по запросу. Набор таких функций называется сервисом, а выполняющая логику сторона – поставщиком сервиса. Системы, запускающие сервисы других систем, называются потребителями сервиса и чаще всего отправляют запросы поставщику сервиса и принимают от них ответы через промежуточное звено – брокера. В роли брокера выступает промежуточное ПО.
Наиболее популярными на сегодняшний день являются – SOAP API и REST API. Оба вида сервисов широко используются в различных платформах и имеют свои преимущества и недостатки, поэтому при проектировании интеграции зачастую возникает вопрос, какую технологию использовать.
К преимуществам SOAP относится использование XML для кодирования запросов и ответов, а также строгую типизацию данных, гарантирующую их целостность при передаче между клиентом и сервером. В свою очередь, в модели REST отсутствуют встроенные требования к типизации данных, поэтому пакеты запросов и ответов в REST имеют намного меньшие размеры, чем SOAP. Благодаря скорости обмена данными именно REST API предоставляется такими соцсетями, как VK, Facebook, Twitter.
Обмен данными с задержкой
В ряде случаев данные могут попадать в систему-потребитель актуальными на момент времени в прошлом. Например, система-потребитель может разом забрать данные, накопленные в системе-источнике за определенный период. Схема обмена данными выглядит так: «оставьте мне данные в таком-то месте, я заберу их, когда мне будет удобно». Такая схема обмена удобна, когда изменения в системе-источнике происходят слишком часто и в больших количествах, и моментальный обмен невозможен из-за большой нагрузки на базы данных и транспортное ПО. Поэтому система-источник накапливает изменения данных и затем передает эту дельту всем заинтересованным сторонам.
Существует несколько подходов к такому обмену данными.
Пожалуй, самый простой и быстрый способ – это выгрузка данных в нужном срезе напрямую из базы и запись их в .csv-файл. Далее этот файл может быть отправлен на эндпойнт или просто почтовый ящик потребителя, или может быть сохранен в определенной директории в сети, к которой у потребителя есть доступ.
К сожалению, данный способ вызывает частые ошибки, например, когда меняется набор полей .csv файла или в нем просто меняется разделитель. Более продвинутый способ – настройка на стороне поставщика данных специальных витрин, где данные хранятся в нужных срезах, и доступом к ним управляет поставщик. В сравнении с файловым обменом это исключает некоторые риски, такие как вероятность сбоя кодировки, сбой на стороне сервиса email-рассылки, попадания данных третьим лицам. Для того, чтобы избежать предоставления прямого доступа к витринам, удобным решением является предоставление сервисов, которые по запросу отдают потребителю массив данных.
Концептуально это отличается от онлайн-интеграции тем, что изменение данных в источнике система-потребитель может получить через какое-то время после их изменения, по собственному запросу.
Еще один из способов «оставить» где-то данные для потребителя – сложить их в очередь (наиболее популярны на рынке сейчас kafka и rabbitmq). На самом деле, очереди могут быть использованы как для моментальной передачи (можно передавать сообщения в очереди с высокой пропускной способностью, где они быстро будут вычитаны подписчиком), так и для передачи больших пакетов данных, которые подписчик вычитывает не в моменте, а по определенному таймингу.
Что же выбрать?
В выборе самого оптимального механизма интеграции нет волшебной пилюли. Посоветовать однозначно ту или иную технологию невозможно, потому что выбор зависит от множества разных факторов, которые делают каждый кейс уникальным. Все зависит от уже используемого стека технологий, от требований и ограничений интегрируемых систем, возможностей программного обеспечения, требований бизнеса к актуальности данных и скорости обмена, от политик безопасности в компании.
Именно поэтому многие компании опираются на опыт своих предшественников и best practices при выборе интеграции. Мы же надеемся, что данная статья помогла вам вкратце познакомиться с основными механизмами интеграции, которые стоит рассмотреть в первую очередь при выборе инструмента обмена данными.
Источник
Способы обмена данными
Основные способы обмена данными.
Между микропроцессорной системой (МС) и внешним устройством (ВУ) происходит обмен полезной информацией в виде слов данных (
) и служебной информацией в виде управляющих слов (
) и слов состояния (
). Служебная информация может занимать значительный объем. Поэтому в общем случае для обмена информацией отводится ряд портов ввода/вывода (ВВ), образующих пространство доступа к внешнему устройству (ВУ). Ввод и вывод всегда рассматриваются по отношению к микропроцессору. Обмен информацией между процессором и ВУ осуществляется по определенным правилам. Совокупность правил, называемых протоколом обмена, является основой для составления драйвера ВУ. Драйвер представляет собой набор подпрограмм, обслуживающих обмен ВУ с микропроцессором.
Существуют три способа обмена данными: программно управляемый обмен, обмен с прерыванием программы и обмен по каналу прямого доступа к памяти. Рассмотрим в общих чертах особенности каждого способа обмена.
Программно–управляемый обмен данными.
Обмен инициируется и выполняется процессором с помощью:
● специальных команд ввода–вывода,
при этом в формате команды должен содержаться код выполняемой операции и номер выбираемого порта ВУ;
● команд обращения к
ОЗУ, при этом каждый порт ВУ рассматривается как адрес, отличный от адресов других ячеек.
С точки зрения использования вспомогательных сигналов различают прямой и условный обмен.
Прямым, или безусловным,
вводом–выводом называется такая процедура, при которой для активизации обмена не требуется никаких условий и вспомогательных сигналов. Прямой ввод/вывод возможен только с внешними устройствами, которые всегда готовы к обмену. Он является составной частью более сложных протоколов обмена.
вводом–выводом называется такая процедура, при которой активизация обмена возможна при выполнении условия готовности к обмену ВУ.
Большинство ВУ работает асинхронно по отношению к процессору. При асинхронном обмене информацией важной задачей является проверка готовности ВУ. Поэтому ВУ должно иметь аппаратные средства для выработки информации о своем внутреннем состоянии. Микропроцессор считывает эту информацию, передает ее в аккумулятор, анализирует и на основе анализа принимает решение о готовности ВУ. При отсутствии готовности ВУ процессор переходит в состояние ожидания. Если обнаружено состояние готовности, то выполняются операции передачи данных. Таким способом достигается сопряжение во времени работы процессора и таких устройств, которые по быстродействию уступают процессору.
Таким образом, условный ввод/вывод применяется для обмена с низкоскоростными внешними устройствами и сопровождается сигналом готовности ГтВУ, генерируемым ВУ. Сигнал готовности ГтВУ вводится в процессор в составе слова состояния и информирует его о готовности ВУ к обмену. После завершения операции обмена сигнал готовности ГтВУ должен быть снят и выставлен перед новой операцией. Для этого процессор информирует ВУ об окончании операции с помощью сигнала подтверждения Пт.
На рис. 3.2.1 приведены диаграммы условного ввода/вывода с помощью контроллера обмена. В этом случае могут быть также использованы сигналы готовности Гт контроллера и подтверждения ПтВУ внешнего устройства.
При вводе (рис. 3.2.1, а) процессы протекают в следующей последовательности:
● если сигнал подтверждения микропроцессора (контроллера) Пт = 0, ВУ выставляет на шине ШВУ новые данные и сигнал готовности ГтВУ = 1;
● так как ГтВУ = 1, процессор дает команду на ввод данных, и данные по ШД поступают в аккумулятор;
● процессор через контроллер выставляет сигнал подтверждения Пт = 1, извещая ВУ о том, что данные введены;
● при Пт = 1 ВУ снимает сигнал готовности (ГтВУ =0);
● при ГтВУ = 0 процессор снимает сигнал подтверждения (Пт = 0).
При выводе данных (рис. 3.2.1, б) процессы протекают в следующей последовательности:
● если сигнал готовности контроллера Гт = 0, ВУ осуществляет сброс сигнала подтверждения (ПтВУ = 0), после чего процессор на ШД выставляет новые данные;
● при сигнале подтверждения ПтВУ = 0 контроллер устанавливает сигнал готовности Гт = 1;
● данные по ШВУ выводятся в ВУ;
● при Гт = 1 ВУ устанавливает сигнал подтверждения (ПтВУ =1);
● при ПтВУ = 1 процессор снимает ранее установленный сигнал готовности (Гт = 0).
Рассмотренный протокол обмена называется квитированием.
Возможны два вида условного обмена: с занятием цикла и совмещенного. При обмене с занятием цикла (рис. 3.2.2, а) в случае неготовности ВУ микропроцессор находится в режиме ожидания; при совмещенном обмене (рис. 3.2.2, б) после опроса ВУ микропроцессор возвращается к выполнению основной программы.
По способу кодирования различают обмен данными в параллельном и последовательном коде.
Необходимость передачи данных в последовательном коде обусловлена двумя факторами:
● наличием устройства (например, клавиатура, дисплей, телетайп), принцип работы которого базируется на использовании последовательного кода;
● удалением внешнего устройства от процессора на значительное расстояние. Дело в том, между отдельными проводниками соединительной линии между источником и приемником информации существует емкостная связь. С увеличением длины соединительной линии растет емкость между ее отдельными проводниками. Поэтому при передаче импульсных сигналов по одному проводнику в других проводниках наводятся помехи, уровень которых может быть соизмеримым с уровнем полезных сигналов.
В этих условиях обмен информацией между процессором и внешним устройством должен сопровождаться преобразованием параллельного кода в последовательный код при выводе данных и последовательного кода в параллельный — при вводе данных. Указанные функции возлагаются на контроллер обмена, который обычно выполняется в виде интегральной схемы.
К достоинствам программно–управляемого обмена данных относится его простота, к недостаткам — бесполезная трата времени на ожидание готовности ВУ и невозможность обеспечения своевременной реакции на внезапно возникшую потребность ВУ в обмене информацией.
Обмен с прерыванием программы.
При этом способе инициатором обмена является внешнее устройство, которое подает специальный сигнал ЗАПРОС ПРЕРЫВАНИЯ на соответствующий вход процессора. После выполнения текущей микрокоманды процессор прекращает выполнение основной программы, вырабатывает сигнал ПОДТВЕРЖДЕНИЕ ПРЕРЫВАНИЯ и переходит к подпрограмме обработки прерывания, расположенной в фиксированной области памяти. После выполнения этой подпрограммы происходит возврат к основной программе.
Обмен данными с помощью прямого доступа к памяти.
По этому способу используется канал прямого доступа к памяти (ПДП), по которому массивы данных передаются непосредственно между внешним устройством (ВУ) и ОЗУ, минуя процессор. Это позволяет достичь наибольшей скорости передачи, но требует определенных аппаратных затрат для организации канала. Аналогично случаю обмена по прерыванию ВУ посылает в процессор сигнал запроса на прямой доступ. После отправления сигнала подтверждения процессор прекращает работу по выполнению текущей программы, отключает свои буферные регистры от шин адреса и данных, а также прекращает выработку управляющих сигналов. Таким образом, процессор как бы замирает до окончания процедуры ПДП, чем этот режим и отличается от режима обработки прерывания. Все функции адресации, передачи данных и управления выполняет контроллер ПДП, содержащий счетчик адреса, счетчик числа слов в массиве, а также ряд триггеров и логических схем, которые внесены в блок управления.
До начала работы канала ПДП в счетчик адреса заносится адрес ячейки ОЗУ, с которой начинается массив данных, и в счетчик слов (в прямом или дополнительном коде) — число слов в массиве. При передаче каждого слова содержимое этих счетчиков изменяется на единицу и обмен данными производится автоматически, пока не будет передан весь массив слов.
В микропроцессорных системах встроены (или предусматриваются) интерфейсные схемы для организации ввода/вывода.
Источник