Создайте службы поддержки, которые отправляют сетевые запросы от имени службы обслуживания клиентов или приложения. Служба послов может рассматриваться как внепроцессный прокси-сервер, совместно расположенный с клиентом.
Этот шаблон может быть полезен для разгрузки распространенных задач подключения клиента, таких как мониторинг, ведение журнала, маршрутизация, безопасность (например, TLS) и шаблоны устойчивости в небезопасном режиме. Он часто используется с устаревшими приложениями или другими приложениями, которые трудно изменить, чтобы расширить их сетевые возможности. Она также может включить специализированную команду для реализации этих функций.
Контекст и проблема
Устойчивые облачные приложения требуют таких функций, как нарушение цепи, маршрутизация, измерение и мониторинг, а также возможность обновления конфигурации, связанной с сетью. Это может быть трудно или невозможно обновить устаревшие приложения или существующие библиотеки кода для добавления этих функций, так как код больше не поддерживается или не может быть легко изменен командой разработчиков.
Сетевые вызовы также могут требовать существенной конфигурации для подключения, проверки подлинности и авторизации. Если эти вызовы используются в нескольких приложениях, созданных с помощью нескольких языков и платформ, вызовы должны быть настроены для каждого из этих экземпляров. Кроме того, может потребоваться управлять центральной командой организации. С большой базой кода это может быть рискованным для этой команды, чтобы обновить код приложения, с которым они не знакомы.
Решение
Поместите клиентские платформы и библиотеки во внешний процесс, который выступает в качестве прокси-сервера между приложением и внешними службами. Разверните прокси-сервер в той же среде узла, что и приложение, чтобы обеспечить контроль над маршрутизацией, устойчивостью, функциями безопасности и чтобы избежать ограничений доступа, связанных с узлом. Вы также можете использовать шаблон посла для стандартизации и расширения инструментирования. Прокси-сервер может отслеживать метрики производительности, такие как задержка или использование ресурсов, и этот мониторинг происходит в той же среде узла, что и приложение.
Функции, которые выгружаются послу, могут управляться независимо от приложения. Вы можете обновить и изменить послу, не беспокоясь о устаревшей функциональности приложения. Кроме того, она позволяет отдельным специализированным группам реализовать и поддерживать функции безопасности, сети или проверки подлинности, которые были перенесены в посол.
Службы послов можно развернуть в качестве боковой платформы для сопровождения жизненного цикла используемого приложения или службы. Кроме того, если послу предоставлен общий доступ к нескольким отдельным процессам на общем узле, его можно развернуть в качестве управляющей программы или службы Windows. Если потребляемая служба контейнеризована, посол должен быть создан в виде отдельного контейнера на одном узле с соответствующими ссылками, настроенными для обмена данными.
Проблемы и рекомендации
- Прокси-сервер добавляет некоторые затраты на задержку. Рассмотрите, является ли клиентская библиотека, вызываемая непосредственно приложением, более эффективной.
- Рассмотрите возможные последствия включения обобщенных функций в прокси-сервер. Например, посол может обрабатывать повторные попытки, но это может быть небезопасным, если только все операции не являются идемпотентными.
- Рассмотрим механизм, позволяющий клиенту передавать определенный контекст прокси-серверу и вернуться клиенту. Например, включите заголовки HTTP-запроса, чтобы отказаться от повторных попыток или указать максимальное количество повторных попыток.
- Рассмотрим, как упаковывать и развертывать прокси-сервер.
- Рассмотрите возможность использования одного общего экземпляра для всех клиентов или экземпляра для каждого клиента.
Когда следует использовать этот шаблон
Используйте этот шаблон, если вы:
- Необходимо создать общий набор функций подключения клиента для нескольких языков или платформ.
- Необходимо выгрузить перекрестные проблемы подключения клиентов к разработчикам инфраструктуры или другим специализированным командам.
- Необходимо поддерживать требования к подключению к облаку или кластеру в устаревшем приложении или приложении, которое трудно изменить.
Эту схему не стоит применять в следующих случаях:
- Если задержка сетевого запроса имеет критическое значение. Прокси-сервер вводит некоторые издержки, хотя и минимальные, и в некоторых случаях это может повлиять на приложение.
- Если функции подключения клиента используются одним языком. В этом случае лучшим вариантом может быть клиентская библиотека, которая распространяется в группы разработчиков в виде пакета.
- Если функции подключения не могут быть обобщены и требуют более глубокой интеграции с клиентским приложением.
Проектирование рабочей нагрузки
Архитектор должен оценить, как шаблон посла можно использовать в проектировании рабочей нагрузки для решения целей и принципов, описанных в основных принципах платформы Azure Well-Architected Framework. Рассмотрим пример.
Столб | Как этот шаблон поддерживает цели основных компонентов |
---|---|
Решения по проектированию надежности помогают рабочей нагрузке стать устойчивой к сбоям и обеспечить восстановление до полнофункционального состояния после сбоя. | Точка посредника сетевых коммуникаций, облегчаемая этим шаблоном, предоставляет возможность добавлять шаблоны надежности в сетевое взаимодействие, например повторную попытку или буферизацию. - RE:07 Самосохранение |
Решения по проектированию безопасности помогают обеспечить конфиденциальность, целостность и доступность данных и систем рабочей нагрузки. | Этот шаблон предоставляет возможность расширения безопасности сетевых коммуникаций, которые не могли обрабатываться клиентом напрямую. - Сетевые элементы управления SE:06 - Шифрование SE:07 |
Как и любое решение по проектированию, рассмотрите любые компромиссы по целям других столпов, которые могут быть представлены с этим шаблоном.
Пример
На следующей схеме показано приложение, выполняющее запрос к удаленной службе через прокси-сервер посла. Посол обеспечивает маршрутизацию, разрыв канала и ведение журнала. Он вызывает удаленную службу, а затем возвращает ответ клиентскому приложению:
Связанные ресурсы
- Sidecar pattern (Шаблон расширения)