Большая часть моей работы посвящена интеграции приложений. Очень странно, что для «1С:Предприятие 8» нигде не описаны промышленные шаблоны интеграции, а если и есть какая-то информация — то ее очень мало. Цель данной статьи (или цикла статей, как получится) стало желание поделится опытом, источниками информации и самое главное полезными книгами.
Обмен сообщениями
Представим ситуацию, сегодня день получения зарплаты, вы приходите в кассу, а кассира нет на месте. Вы сможете получить зарплату только в том случае, если кассир будет на месте и будет свободным в момент вашего прихода, а так же будет необходимая сумма в кассе предприятия. Это является отличным примером синхронного взаимодействия. Привнесение в эту систему «заявок на выплату», которые утверждаются, а также фиксируют время, когда необходимо обратится в кассу делает эту систему асинхронной. Это намного проще, чем пытаться приходить к кассе вновь и вновь. «Сохранение» намерения получить зарплату в виде сообщения («заявка на выплату») и помещение его в очередь для последующей обработки наглядно иллюстрирует сущность обмена сообщениями.
Обмен сообщениями — это технология высокоскоростного асинхронного взаимодействия между программами с гарантией доставки информации. Программы взаимодействуют между собой обмениваясь сообщениями.
Система обмена сообщениями — это некоторый программный комплекс, который обеспечивает хранение и передачу двоичных данных (в большинстве случаев) между различными участниками системы. Использование системы обмена сообщениями обладает такими важными преимуществами:
- независимость взаимодействующих приложений через общий интерфейс;
- экономия и рациональное использование ресурсов;
- надежность, благодаря возможности накапливать сообщения, а так же благодаря независимости компонентов;
- возможность доставки сообщений, после сбоя одного из компонентов после «восстановления»;
- гарантия доставки сообщения.
Канал или очередь — это логический маршрут, объединяющий программы и использующийся для транспортировки сообщений, он также напоминает массив сообщений, который доступный для многих приложений одновременно. Приложения, объединенные с помощью технологии обмена сообщениями, передают данные по каналам сообщений. Изначально система обмена сообщениями не содержит каналов, они создаются по мере определения потребностей.
Сообщение — это наименьшая единица данных, которая может быть передана по каналу сообщений. Для передачи данных отправитель должен разбить их на пакеты, которые затем будут упакованы в сообщения и помещены в канал. Обычно сообщение состоит их двух основных частей:
- Заголовок сообщения содержит информацию для выполнения адресации в системе обмена сообщениями;
- Тело сообщения содержит полезные данные и как правило игнорируются системой обмена сообщениями.
Отправитель или поставщик — программа, отправляющая сообщение путем его размещения в канале.
Получатель или потребитель — программа, получающая сообщение путем его считывания из канала и удаляет это сообщение на определенном этапе (обычно после считывания).
Функционирование обмена сообщениями обеспечивается отдельной программной системой — системой обмена сообщениями (message-oriented middleware). Необходимость наличия такой системы обусловлена ненадежностью сетей, различные сбои, необходимостью ускорения процесса принятия решений (итоговое решение формируется из нескольких источников, например: система управления складом, финансовая система, система доставки и другие.). Процедура передачи сообщения состоит из 5 основных этапов:
- Создание сообщения;
- Отправка сообщения;
- Доставка сообщения;
- Получение сообщения;
- Обработка сообщения.
«Отправить и забыть» (Send and forget) — поместив сообщение в канал (этап 2), отправитель может не заботится о судьбе сообщения, доставку обеспечит система обмена сообщениями.
Преимущества обмена сообщениями
- Обмен сообщениями позволяет наладить взаимодействие между приложениями. Можно конечно возразить, что все инструменты есть в платформе 1С, но не один не гарантирует доставку;
- Интеграция разнородных систем и технологий. Использовать для все и вся платформу 1С очень плохая идея, при том, что быстродействие платформы низкое, а масштабирование — дорогое;
- Взаимодействия между приложениями происходят асинхронно. Для платформы 1С так же верно, пока не закончатся лицензии на подключение;
- При синхронном взаимодействии отправитель должен дождаться завершения обработки вызова получателем прежде, чем сделать новый вызов. Таким образом, если посмотреть на пример в начале статьи, у касс не будет очередей при использовании «заявок на выплату». Асинхронное взаимодействие позволяет размещать и обрабатывать вызовы с разной скоростью. Другими словами можно балансировать лицензиями на подключение к «1С:Предприятие 8», можно балансировать нагрузку на сервер 1С, создать кэширование на уровне очереди и т. п.;
- Возможность балансирования нагрузки, система обмена сообщениями формирует очередь запросов, позволяя получателю контролировать скорость их обработки;
- Надежное взаимодействие между системами;
- Возможность работы без подключения к сети, например, торговые агенты, которые периодически выполняют синхронизацию с сервером;
- Приложение может быть интегрировано с множеством приложений используя только — систему обмена сообщениями;
- Асинхронное взаимодействие позволяет приложению не ожидать результата выполнения задачи другим приложением, когда задача будет выполнена, приложение может быть оповещено о результатах.
Недостатки обмена сообщениями
- Довольно сложная реализация;
- Довольно сложно отлаживать и тестировать;
- Порядок доставки сообщений неизвестен. Необходимо дополнительно восстанавливать порядок сообщений, если он необходим;
- Дополнительные задержки при использовании обмена сообщениями, в сравнении с использованием прямого вызова приложения;
- Ограниченная поддержка закрытыми, старыми (legacy) системами.
Литература
Все книги настоятельно рекомендую читать в оригинале, некоторые понятия не имеют аналогов в русском языке. Книги сложно применимы для «1С:Предприятие 8», но позволяют развить навыки принятия архитектурных решений. Последняя книга в списке отлично подойдет для того чтобы начать экспериментировать с паттернами и пощупать настоящую асинхронность.
The «Gang of Four». Design Patterns: Elements of Reusable Object-Oriented Software. — Addison-Wesley, 1994, ISBN: 0201633612.
Martin Fowler. Patterns of Enterprise Application Architecture. — Addison-Wesley, 2003, ISBN: 0321127420.
Gregor Hohpe and Booby Woolf. Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions. — Addison-Wesley, 2003, ISBN: 0321200683.
Christian Nagel. Professional C# 6 and .NET Core 1.0. — Willey, 2016, ISBN: 1119096603