Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Разверните компоненты приложения в процессе или контейнере, отдельно от основного приложения, чтобы обеспечить изоляцию и инкапсуляцию. Этот шаблон позволяет создавать приложения из различных компонентов и технологий.
Как и мотоциклетная коляска, эти компоненты присоединяются к родительскому приложению и разделяют его жизненный цикл, поэтому вы создаете и удаляете их вместе. Этот шаблон также называется шаблоном Sidekick и поддерживает декомпозицию приложения.
Контекст и проблема
Приложения и службы часто требуют связанных функций, таких как мониторинг, ведение журнала, конфигурация и сетевые службы. Эти периферийные задачи можно реализовать как отдельные компоненты или службы.
Тесно интегрированные компоненты выполняются в одном процессе и эффективно используют общие ресурсы, но они не имеют изоляции. Сбой в одном компоненте может повлиять на все приложение. Они также требуют реализации на языке родительского приложения, что создает взаимозависимость.
Если вы разложите приложение на службы, вы можете создать каждую службу с помощью разных языков и технологий. Такой подход обеспечивает большую гибкость. Но каждый компонент имеет собственные зависимости и требует, чтобы библиотеки, относящиеся к языку, должны получать доступ к платформе и общим ресурсам. При развертывании этих функций в качестве отдельных служб вы добавляете задержку. Код и зависимости, относящиеся к языку, также повышают сложность размещения и развертывания.
Решение
Разверните единый набор задач вместе с основным приложением в отдельном процессе или контейнере. Этот подход обеспечивает согласованный интерфейс для служб платформы на разных языках.
Побочный сервис подключается к приложению, не будучи его частью, и разворачивается вместе с ним. Каждый экземпляр приложения получает собственный экземпляр сайдкара, который разделяет его жизненный цикл.
Шаблон Sidecar предоставляет следующие преимущества:
Независимость языка: Сайдкар работает независимо от среды выполнения основного приложения и выбранного языка программирования. Вы можете использовать одну реализацию сайдкар в разных приложениях, написанных на разных языках.
Доступ к общему ресурсу: Боковая машина может получить доступ к тем же ресурсам, что и основное приложение. Например, сайдкар может отслеживать системные ресурсы, которые используют оба компонента.
Низкая задержка: Близость бокового автомобиля к основному приложению сводит к минимуму задержку связи.
Расширенная расширяемость: Вы можете расширить приложения, которые не имеют собственных механизмов расширяемости, подключив сайдкар в качестве отдельного процесса на одном узле или в подконтейнере.
Наиболее распространенной реализацией этого шаблона является использование контейнеров, которые также называются sidecar контейнерами или sidekick контейнерами.
Проблемы и рекомендации
При реализации этого шаблона следует учитывать следующие моменты:
Рассмотрите формат развертывания и упаковки для развертывания служб, процессов или контейнеров. Контейнеры хорошо подходят для шаблона Sidecar.
При разработке сайдкар-сервиса тщательно выберите механизм межпроцессного взаимодействия. Используйте технологии, не зависящие от языка или платформы, если требования к производительности не делают этот подход нецелесообразным.
Прежде чем добавлять функционал в сайдкар, оцените, работает ли он лучше как отдельная служба или традиционный демон.
Рассмотрите возможность реализации функциональных возможностей в виде библиотеки или с помощью традиционного механизма расширения. Библиотеки, относящиеся к языку, обеспечивают более глубокую интеграцию и меньше сетевых затрат.
Когда следует использовать этот шаблон
Используйте этот шаблон, когда:
Основное приложение использует различные языки и платформы. Сайдкары предоставляют согласованный интерфейс, который различные приложения могут использовать независимо от языка или фреймворка.
Отдельная команда или внешний партнер владеет компонентом.
Необходимо развернуть компонент или функцию на том же узле, что и приложение.
Вам нужна служба, которая делится общим жизненным циклом основного приложения, но она может обновляться независимо.
Вам нужен подробный контроль над ограничениями ресурсов для определенного ресурса или компонента. Например, можно развернуть компонент как сайдкар, чтобы независимо от основного приложения ограничивать и управлять использованием его памяти.
Этот шаблон может быть не подходит, если:
Необходимо оптимизировать взаимодействие между процессами. Сайдкары добавляют нагрузку, особенно задержки в связи, что делает их неэффективными для приложений с частым обменом данными между компонентами.
Ваше приложение небольшое. Затраты на ресурсы при развертывании бокового автомобиля для каждого экземпляра могут перевесить преимущества изоляции.
Необходимо иметь возможность независимо масштабировать компонент. Если необходимо масштабировать компонент по-разному от основного приложения, разверните его как отдельную службу.
Платформа предоставляет эквивалентные функциональные возможности. Если платформа приложений уже предоставляет необходимые возможности встроенным образом, сайдкары добавляют излишнюю сложность.
Проектирование рабочей нагрузки
Узнайте, как использовать шаблон sidecar в проектировании рабочей нагрузки для решения целей и принципов, описанных в основных принципах Azure Well-Architected Framework. В следующей таблице приведены рекомендации по использованию этого шаблона для целей каждого компонента.
| Столп | Как этот шаблон поддерживает цели основных компонентов |
|---|---|
| Решения по проектированию безопасности помогают обеспечить конфиденциальность, целостность и доступность данных и систем рабочей нагрузки. | Когда вы инкапсулируете эти задачи и развертываете их в отдельных процессах, вы сокращаете область атаки только на необходимый код. Вы также можете использовать сайдкары для добавления сквозных механизмов управления безопасностью в компоненты приложений, которые не поддерживают эти функции. - SE:04 Сегментация - Шифрование SE:07 |
| Операционное превосходство помогает обеспечить качество рабочей нагрузки через стандартизированные процессы и сплоченность команды. | Этот шаблон позволяет гибко интегрировать средства наблюдения без добавления зависимостей в код приложения. Вы можете обновлять и поддерживать сателлитное приложение независимо от основного приложения. - Инструменты и процессы OE:04 - Система мониторинга OE:07 |
| Эффективность производительности помогает рабочей нагрузке эффективно соответствовать требованиям путем оптимизации масштабирования, данных и кода. | Этот шаблон позволяет централизованно выполнять сквозные задачи на сайдкарах, масштабируемых на несколько экземпляров приложений. Вам не нужно развертывать повторяющиеся функции для каждого экземпляра приложения. - PE:07 Код и инфраструктура |
Если этот шаблон вводит компромиссы внутри столпа, рассмотрите их против целей других столпов.
Пример
Можно применять шаблон внешнего контурирования Sidecar во многих сценариях. Рассмотрим следующие примеры:
Абстракция зависимостей: Разверните пользовательскую службу вместе с каждым приложением, чтобы предоставить доступ к общим возможностям зависимостей через согласованный API. Этот подход заменяет клиентские библиотеки, специфические для языка, на сайдкар, который обрабатывает такие задачи, как логирование, конфигурация, обнаружение сервисов, управление состоянием и проверки здоровья.
Примером этого варианта использования является сайдкар Distributed Application Runtime (Dapr).
Плоскость данных mesh-службы: Разверните боковой прокси-сервер вместе с каждым экземпляром службы, чтобы обрабатывать перекрестные сетевые проблемы, такие как маршрутизация трафика, повторные попытки, взаимная защита TLS, применение политик и телеметрия.
Сетевые службы, такие как Istio, используют сайдкар-прокси для реализации этих возможностей без необходимости изменений в коде приложения.
Боковая машина посла: Разверните службу послов в качестве бокового автомобиля. Приложение направляет вызов через посредника, который обрабатывает журналирование запросов, маршрутизацию, предотвращение перегрузок и другие функции подключения.
Адаптеры протокола: Разверните побочный контейнер для перевода между несовместимыми протоколами или форматами данных или для соединения систем обмена сообщениями. Такой подход позволяет приложению использовать более простые или устаревшие интерфейсы.
Обогащение телеметрии: Разверните сайдкар для предварительной обработки или обогащения данных телеметрии, таких как метрики, журналы и трассировки, перед тем как передавать данные во внешние системы мониторинга. Такие компоненты, как сборщик OpenTelemetry могут выполняться в качестве сайдкаров для нормализации, обогащения или маршрутизации телеметрии отдельно от приложения.
Дальнейшие шаги
API микрослужбы, использующие Dapr: узнайте, как приложения контейнеров Azure используют боковики Dapr, чтобы помочь вам создавать простые, переносимые, устойчивые и безопасные микрослужбы.
Собственный режим боковой кареты для функции сетки служб на основе Istio в Службе Azure Kubernetes (AKS): узнайте, как функция сетки служб Istio для AKS использует шаблон боковика для решения проблем распределенной архитектуры.