ук 03.011.01 2011

Preview:

Citation preview

УК 03.011.01-2011Учебный курс. Обучение.

Паттерны обмена сообщениями.

Основные компоненты

• Каналы• Сообщения• Фильтры• Маршрутизация• Преобразование• Конечные точки

Сообщение

• Как организовать обмен данными между приложениями?• Сообщение – атомарная единица переданной

информации.

Сообщение содержит:• Заголовок сообщения.

Служебная информация, используемая системой обмена сообщениями (СОС). Например, адрес отправителя, адрес получателя.

• Тело сообщения.Данные, передаваемые с помощью СОС.

Канал сообщений

• Как передать сообщения от одного приложения к другому?

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

Фильтры сообщений

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

простых, независимых этапов (фильтров), объединенных с помощью каналов

Способы обработки

• Конвейерная обработка• Параллельная обработка

Маршрутизатор сообщений

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

• Роутер сообщений.Специальный фильтр, который умеет извлекать сообщение из одного канала и помещать его в другой канал.

Типы маршрутизаторов

• Фиксированный – один входящий и один исходящий канал

• Маршрутизаторы на основе содержимого• Маршрутизаторы на основе контекста

Пример, балансировка загрузки

• Динамический маршрутизатор

• Маршрутизаторы с поддержкой состояния• Маршрутизаторы без поддержки состояния

Конечная точка СОС

• Как подключить приложение к системе обмена сообщениями?

• Конечная точка – клиент СОС, позволяющий приложению принимать и отправлять сообщения.

Результаты

• Учитывает особенности конкретного приложения• Инкапсулирует СОС

Транслятор сообщений

• Приложения используют разные форматы данных. Как организовать взаимодействие?

• Для преобразования использовать специальный фильтр – транслятор сообщений

Уровни преобразованияУровень Объект Средство

Структуры данных Сущности, ассоциации Шаблоны структурного преобразования

Типы данных Имя поля, тип данных, ограничение, значение поля

Визуальные редакторы, XSLT, БД

Представление данных Кодировка, XML, JSON Анализаторы, API

Транспортный TCP/IP, HTTP, SOAP, JMS Адаптер канала

КАНАЛЫ ОБМЕНА СООБЩЕНИЯМИ

Основные вопросы

• Фиксированный набор каналов• Определение набора каналов• Однонаправленные каналы

• Отношения “один-к-одному” и “один-ко-многим”• Тип данных• Неверные и недоставленные сообщения• Защита от сбоев• Клиенты, не предназначенные для обмена сообщениями• Коммуникационная магистраль

Канал “точка-точка”

• Как гарантировать, что документ или вызов будет получен только одним приложением?

Канал “публикация-подписка”

• Как оповестить о событии всех заинтересованных получателей?

Канал типа данных

• Как приложение должно отправлять данные, чтобы получатель знал как их обрабатывать?

Канал недопустимых сообщений

• Что делать с сообщением, которое по каким-либо причинам не может быть обработано?

• Сообщения в канале не должны игнорироваться• Недопустимость сообщения определяется контекстом –

местом обработки сообщения

Канал недоставленных сообщений

• Что делать с сообщениями, которые не удается доставить?

Гарантированная доставка

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

• Приводит к снижению производительности• Степень надежности 99,999%

Адаптер канала

• Как подключить изолированное приложение к системе обмена сообщениями?

Виды адаптеров

• Адаптер интерфейса пользователя• Адаптер бизнес-логики• Адаптер базы данных

Мост обмена сообщениями

• Как связать несколько различных систем обмена сообщениями?

Шина сообщений

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

• Состоит из:– Стандартная коммуникационная инфраструктура– Адаптеры– Стандартная инфраструктура команд

СООБЩЕНИЯ

Основные сообщения

• Цель отправки сообщения• Возвращение ответа• Большие объемы данных• Медленный обмен сообщениями

Сообщение с командой

• Как использовать обмен сообщениями для вызова процедуры другого приложения?

Сообщение с данными документа

• Как использовать сообщения для обмена данных между приложениями?

Сообщение о событии

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

• Модель проталкивания• Модель вытягивания– Обновление– Запрос о состоянии– Ответ о состоянии

Запрос-ответ

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

• Подходы к получению ответа:– Синхронная блокировка– Асинхронный обратный вызов

Варианты запросов и ответов

• Удаленный вызов процедуры с помощью обмена сообщениями.– Запрос – сообщение с командой, описывающее функцию, которую

надо вызвать– Ответ – сообщение с данными документа

• Запрос с помощью обмена сообщениями– Сообщение, с текстом запроса– Ответ – результирующий набор данных, отправленный в виде

цепочки сообщений

• Уведомление/подтверждение– Запрос – сообщение о событии– Ответ – сообщение с данными, подтверждающими получение

сообщения

Виды ответов

• Пустой ответ• Результат• Исключение

Обратный адрес

• Куда отправлять сообщение с ответом

Идентификатор корреляции

• Как инициатору запроса, получившему сообщение узнать, к какому запросу оно относится?

Цепочка сообщений

• Как передавать большие объемы данных?

Срок действия сообщения

• Как получатель узнает, что сообщение уже устарело?

Индикатор формата

• Как спроектировать формат сообщения, чтобы предусмотреть возможность изменений в будущем?

Подходы:1. Номер версии2. Внешний ключ3. Документ с описанием формата

МАРШРУТИЗАЦИЯ СООБЩЕНИЙ

Классификация

Маршрутизатор на основе содержимого

Фильтр сообщений

• Фильтры с сохранением и без сохранения состояния• Фильтры vs маршрутизатор на основе содержимого

Динамический роутер

Стратегии разрешения кофликтов

• Игнорировать управляющие сообщения, которые конфликтуют с существующими правилами

• Отправить сообщение первому получателю с подходящими критериями

• Отправить сообщение всем получателям с подходящими критериями

Список получателей

Надежность

• Одна транзакция• Постоянный список получателей• Идемпотентные получатели

• Динамический список получатеоей• Эффективность с точки зрения сети• Список получателей vs канал “публикация-подписка” с

фильтрами сообщений

Разветвитель

• Итеративный раветвитель• Статический разветвитель• Упорядоченные или неупорядоченные дочерние

сообщения

Агрегатор

Вопросы при реализации:1. Корреляция. Какие входящие сообщения связаны друг с

другом?2. Условия полноты. Когда агрегатор готов опубликовать

итоговое сообщение?3. Алгоритм агрегации. Как скомпоновать полученные

сообщения в одно итоговое сообщение?

Стратегии агрегации

1. Ожидать всех.2. Время ожидания.3. Первый – лучший.4. Время ожидания с досрочным завершением.5. Внешнее событие.

Условие полноты агрегата

1. Выбор “лучшего” ответа.2. Сжатие данных.3. Сбор данных для дальнейшей оценки.

Преобразователь порядка

Вопросы реализации:

1. Порядковый номер2. Буфер для хранения сообщений3. Борьба с переполнением буфера.

Обработчик составного сообщения

Рассылка сборка

Варианты реализации

1. Распределение с помощью списка получателей2. Аукцион. Рассылка-сборка через “публикация-подписка”.

Карта маршрутизации

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

Необходимо обеспечить:• Эффективное продвижение сообщений (сообщения должны

проходить только через необходимые этапы обработки)• Эффективное использование ресурсов• Гибкость (маршрут должен легко поддаваться изменениям)• Простота поддержки

Область применения

1. Цепочка бинарных этапов проверки2. Каждый этап обработки представляет собой

преобразование без сохранения состояния3. На каждом этапе происходит сбор данных, но не

принимаются решения

Диспетчер процессов

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

Аспекты реализации

• Управление состоянием• Экземпляры процесса• Корреляция• Сохранение состояния в сообщениях

• Создание определения процесса

Брокер сообщений

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

ПРЕОБРАЗОВАНИЕ СООБЩЕНИЙ

Оболочка конверта

• Система обмена сообщениями существующего приложения предъявляет особые требования к формату сообщения

Процесс упаковки сообщения в конверт

1. Исходное приложение публикует сообщение в необработанном виде.

2. Упаковщик принимает необработанное сообщение и преобразует его в формат, удовлетворяющий требованиям системы обмена сообщениями.

3. Система обмена сообщениями передает упакованное сообщение в пункт назначения

4. Доставленное сообщение попадает к распаковщику.5. Распакованное сообщение доставляется получателю.

Расширитель содержимого

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

Источники расширения

1. Вычисления2. Среда3. Другая система

Фильтр содержимого

Как упростить работу с большими сообщениями, если получателя интересует лишь малая часть содержащихся в них данных?

• Удалить лишнее• Упрощение структуры

Квитанция

Как сократить объем передаваемых данных, но не потерять их?

Этапы обработки

1. Прибывает сообщение с данными2. Регистрация багажа генерирует уникальный ключ для

информации, содержащейся в сообщении.3. Регистрация багажа извлекает данные из сообщения и

помещает данные в постоянное хранилище4. Данные помещенные в хранилище удаляются из

сообщения. Вместо них отправляется квитанция.5. Расширитель содержимого на основании квитанции

извлекает данные из хранилища.

Выбор ключа

1. В теле сообщения уже может содержаться ключ.2. Можно использовать идентификатор самого сообщения.3. Генерировать уникальный ключ.

Специальные вопросы

• Использование ключа для сокрытия информации• Использование квитанции с диспетчером процессов

Нормализатор

• Обработка входящих сообщений эквивалентных по смыслу, но различных по формату

Каноническая модель данных

Минимизация зависимостей при интеграции приложений, использующих различные форматы данных

Способы преобразования

1. Изменить формат данных, используемый внутри приложения

2. Внедрить в приложение преобразователь обмена сообщениями

3. Использовать внешний транслятор сообщений

Результаты

1. Двойное преобразование данных2. Сложность разработка канонической модели3. Зависимости между форматами данных

– Индикатор формата

КОНЕЧНЫЕ ТОЧКИ ОБМЕНА СООБЩЕНИЯМИ

Шлюз обмена сообщениями

• Скрыть доступ к системе обмена сообщениями, скрыв его от остальных частей приложения

Виды шлюзов

1. Блокирующий (синхронный) шлюз обмена сообщениями2. Событийно управляемый (асинхронный) шлюз обмена

сообщениями

Вопросы реализации

1. Соединение шлюзов в цепочки для обеспечения уровней абстракции

2. Обработка исключений системы обмена сообщениямиПреобразование исключений системы обмена сообщениями в

исключения, специфичные для предметной области

3. Генерация кода шлюзов– Web-сервисы– WCF

4. Использование шлюзов в процессе тестирования

Преобразователь сообщения

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

Вопросы реализации

1. Упрощение кодирования– Дублирование кода

2. Преобразователь + транслятор для канонической модели данных

Транзакционный клиент

• Как клиенту управлять транзакциями при взаимодействии с системой обмена сообщениями?

• Гарантируют, что сообщение либо будет добавлено в канал, либо не будет

• Гарантируют, что либо будет считано из канала, либо не будет

• Транзакционный отправитель – сообщение не будет добавлено в канал до тех пор, пока отправитель не подтвердит выполнение транзакции

• Транзакционный получатель – сообщение не будет удалено из канала до тех пор, пока получатель не подтвердит выполнение транзакции.

Сценарии транзакций

1. Отправка-получение пары сообщений.2. Группа сообщений.3. Сообщение – база данных4. Сообщение – рабочий поток

Отправка-получение пары сообщений

1. РеализацияНачать транзакцию, получить и обработать первое сообщение,

отправить второе, подтвердить выполнение транзакции

2. РезультатПервое сообщение не будет удалено из своего канала, пока второе не

будет успешно добавлено в свой канал

3. Тип транзакцииЕсли оба сообщения отправляются по каналам одной системы, то

транзакция простая, в противном случае - распределенная

4. !Может применяться только получателем запроса

Группа сообщений

1. РеализацияНачать транзакции, по очереди отправить или получить все

сообщения, после этого подтвердить выполнение транзакции.

2. РезультатПри отправке ни одно из них не будет добавлено в канал до тех пор,

пока они все не буду успешно отправлены. При получении сообщений ни одно из них не будет удалено из канала до тех пор, пока все не будут успешно получены.

3. Тип транзакцииПростая. Часто гарантируется, что будут получены в том же порядке, в

котором были отправлены.

Сообщение – база данных

1. РеализацияНачать транзакцию, получить сообщение, обновить базу данных,

после этого подтвердить выполнение транзакции. Или обновить базу, отправить сообщение, подтвердить выполнение транзакции.

2. РезультатСообщение не будет удалено из канала до тех пор, пока не

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

3. Тип транзакцииРаспределенная транзакция.

Сообщение – рабочий поток

1. РеализацияНачать транзакцию, открыть единицу работы, отправить сообщение с

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

2. РезультатЕдиница работы не будет успешно закрыта, пока запрос не будет

отправлен, или ответ не будет удален из канала, пока единица работы не будет обновлена.

3. Тип транзакцииРаспределенная транзакция

Опрашивающий потребитель

Приложение должно потреблять сообщения только тогда, когда оно готово это сделать.

Явный запрос сообщений из канала.

Событийно-управляемый потребитель

Автоматическое потребление сообщений по мере их поступления

Составные части

1. Инициализация.2. Потребление.

Конкурирующие потребители

Параллельная обработка сообщений одним клиентом

Особенности

• Канал “точка-точка”• Каждый из потребителей выполняется в собственном

потоке• Скорость обработки сообщений определяется тем, как

быстро канал может распределять сообщения по потребителям

• Конкурирующие потребители могут быть опрашивающими, событийными или их комбинацией.

• Транзакционность может приводить к снижению конкурирующих потребителей

Диспетчер сообщений

Согласованное распределение и обработка сообщений потребителями одного канала

Составные части паттерна

• Диспетчер. Потребляет сообщения из канала, а затем раздает их.

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

Избирательный потребитель

Потребитель сообщений выбирает сообщения, какие он хочет обработать.

Компоненты

• Поставщик. Задает параметры выбора сообщения перед отправкой.

• Параметры выбора. Одно или несколько значений, заданных в сообщении, на основании которых потребитель принимает решение об обработке сообщения.

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

Вопросы реализации

• Реализация цепочки избирательных потребителей – каждый отбирает сообщения по своему набору признаков.

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

• Если на одном канале разместить несколько избирательных потребителей, то можно заменить канал типа данных. Так делать нежелательно, если необходимо скрыть часть сообщений от некоторых приложений.

Постоянный подписчик

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

Особенности

• Каналы “публикация-подписка”• Состояния подписчика:

– Подключен– Отключен– неактивен

Идемпотентный получатель

• Что делать, если сообщение было доставлено несколько раз?

Стратегии:• Явное удаление дубликатов сообщений• Определение семантики сообщения с учетом

идемпотентностиПример: • Положить на счет 12345 еще 10 рублей.• Установить баланс счета 12345 равный 110 рублям.

Активатор службы

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

УПРАВЛЕНИЕ СИСТЕМОЙ

Шина управления

Компоненты системы распределены, как ими управлять?

Подсистемы

• Поток сообщений приложения• Шина управления

Сообщения для шины

1. Конфигурационные сообщения. Каждый компонент должен иметь набор настраиваемых параметров:– Адреса каналов– Форматы данных сообщений– Тайм-ауты– И т.д.Также таблицы маршрутизации роутеров.

2. Пульсы.Может включать дополнительные сведения о компоненте: число

обработанных сообщений, объем оперативной памяти и т.д.

3. Тестовые сообщенияПолучить более подробную информацию о работе компонента, чем

предоставляет сообщение-пульс.

4. Исключения.Информацию об исключениях можно дублировать в шину

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

5. Статистические сообщенияКак правило применяется канал с негарантированной доставкой или

с низким приоритетом.

6. Активная консольВсе действия объединяются в единой центральной консоли.

Обходной путь

Сообщение проходит дополнительные этапы обработки с целью проверки правильности, отладки и тестирования.

Отвод

Посмотреть содержимое сообщения, передаваемое по каналу “точка-точка”

Вопросы реализации

• На примем и публикацию сообщения уходит время.• Исходное сообщение и сообщение-двойник могут иметь

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

• Сообщение менять не должно.

Журнал доставки сообщений

Отладка маршрутов следования сообщений

Вопросы:• При прохождении сообщения через некоторые

компоненты идентификатор сообщения может меняться• На одно входящее сообщение может быть несколько

исходящих• Одно сообщение может являться результатом обработки

нескольких сообщений

Стратегии организации журнала

• Дерево• Простой список• Журнал доставки “победившего” сообщения

Особенно полезен, если сообщение проходит ряд фильтров

Хранилище сообщений

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

Вопросы реализации

• Асинхронная обработка• Объем хранимых данных и нагрузка на есть• Очистка хранилища• Версионность данных

Интелектуальный заместитель

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

Применение

• Отладка• Сбор метрик• Выполнение дополнительных действий

Тестовое сообщение

Отладка, в случае если обработка сообщения выполняется неправильно

Компоненты

• Генератор тестовых данных• Вбрасыватель тестовых сообщений• Отделитель тестовых сообщений• Верификатор тестовых данных

Вентиль канала

Удалить лишние сообщения из канала, которые по каким-либо причинам остались в канале

Recommended