Шаблон послов

Создайте службы поддержки, которые отправляют сетевые запросы от имени службы обслуживания клиентов или приложения. Думайте о службе-посреднике как о внепроцессном прокси-сервере, расположенном совместно с клиентом.

Используйте шаблон посла для разгрузки общих задач подключения клиентов, таких как мониторинг, ведение журнала, маршрутизация, обеспечение безопасности (например, TLS), а также шаблоны устойчивости независимо от языка. Расширьте сетевые возможности устаревших приложений или других приложений, которые трудно изменить, используя шаблон "Ambassador". Специализированные команды также могут использовать шаблон посла для реализации этих функций.

Контекст и проблема

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

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

Решение

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

Схема шаблона послов.

Схема, показывающая клиентское приложение и прокси-сервер посла, совместно размещенные на одном узле. Клиентское приложение отправляет запросы послу вместо прямого вызова внешних служб. Посол перенаправит эти запросы в удаленную службу. Ответы от удаленной службы возвращаются через посла и обратно в клиентское приложение.

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

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

Проблемы и рекомендации

Рассмотрим следующие моменты, когда вы решите, как реализовать этот шаблон:

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

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

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

  • Рассмотрим, как упаковать и развернуть прокси-сервер.

  • Рассмотрите возможность использования одного общего экземпляра для всех клиентов или экземпляра для каждого клиента.

Когда следует использовать этот шаблон

Используйте этот шаблон, когда:

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

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

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

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

Этот шаблон может быть не подходит, если:

  • Задержка сетевого запроса имеет решающее значение. Прокси-сервер вводит минимальные затраты, и это может повлиять на приложение.

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

  • Функции подключения не могут быть обобщены, и эти функции требуют более глубокой интеграции с клиентским приложением.

  • Платформа приложений поддерживает предварительно созданные решения, такие как сервисная сетка, для обработки взаимной TLS (mTLS), управления трафиком и политик. Используйте эти решения вместо создания пользовательского решения послов.

Проектирование рабочей нагрузки

Оцените, как использовать шаблон посла в проектировании рабочей нагрузки для решения целей и принципов, описанных в основных принципах Azure Well-Architected Framework. В следующей таблице приведены рекомендации по использованию этого шаблона для целей каждого компонента.

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

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

- Сетевые элементы управления SE:06
- Шифрование SE:07

Если этот шаблон вводит компромиссы внутри столпа, рассмотрите их против целей других столпов.

Пример

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

Пример шаблона послов.

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

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

Следующий шаг