Что такое сетка сервисов?
Сетка сервисов – это программный уровень, осуществляющий обработку всех процессов взаимодействия между сервисами в приложениях. Этот слой состоит из микросервисов, размещенных в контейнерах. По мере масштабирования приложений и увеличения количества микросервисов отслеживать работу сервисов становится все сложнее. Для управления подключениями между сервисами сетка сервисов предоставляет новые функции, такие как мониторинг, ведение журнала, отслеживание и управление трафиком. Она не зависит от кода каждого сервиса, что позволяет ей работать между границами сети и с несколькими системами управления сервисами.
Зачем нужна сетка сервисов?
В современной архитектуре приложений приложения можно создавать как набор небольших независимо развертываемых микросервисов. Разные команды могут создавать отдельные микросервисы и выбирать языки программирования и инструменты. Однако для корректной работы кода приложения микросервисы должны взаимодействовать друг с другом.
Производительность приложений зависит от скорости и отказоустойчивости связи между сервисами. Разработчики должны отслеживать и оптимизировать приложение в разных сервисах, но из-за распределенного характера системы добиться видимости сложно. По мере масштабирования приложений управлять коммуникациями становится все сложнее.
Существует два основных фактора внедрения сеток сервисов, о которых мы подробно расскажем ниже.
Наблюдаемость за уровнем обслуживания
По мере развертывания все большего количества рабочих нагрузок и сервисов разработчикам становится все труднее понять, как все это работает вместе. Например, команды сервисной поддержки хотят знать, какие зависимости они имеют от нижестоящих и вышестоящих подразделений. Они хотят лучше понять, как сервисы и рабочие нагрузки взаимодействуют на уровне приложений.
Контроль уровня обслуживания
Администраторы хотят контролировать, какие сервисы взаимодействуют друг с другом и какие действия они выполняют. Им нужен четкий контроль над поведением, политиками и взаимодействием сервисов в рамках архитектуры микросервисов. Применение политик безопасности необходимо для соблюдения нормативных требований.
В чем преимущества сетки сервисов?
Сетка сервисов обеспечивает централизованный выделенный уровень инфраструктуры, который обрабатывает тонкости связи между сервисами в распределенном приложении. Далее мы предоставляем несколько преимуществ сетки сервисов.
Обнаружение сервисов
Сетки сервисов обеспечивают автоматическое обнаружение сервисов, что снижает операционную нагрузку, связанную с управлением адресами. Они используют реестр сервисов для динамического обнаружения и отслеживания всех сервисов в сети. Сервисы могут легко находить друг друга и взаимодействовать друг с другом независимо от их местоположения или базовой инфраструктуры. Это позволяет быстро масштабироваться, развертывая новые сервисы по мере необходимости.
Балансировка нагрузки
В сетках сервисов используются различные алгоритмы, такие как циклический перебор, наименьшее количество подключений или взвешенная балансировка нагрузки, для интеллектуального распределения запросов между несколькими инстансами сервиса. Балансировка нагрузки улучшает использование ресурсов и обеспечивает высокую доступность и масштабируемость. Можно оптимизировать производительность и предотвратить проблемы с сетевыми коммуникациями.
Управление трафиком
Сетки сервисов предлагают расширенные функции управления трафиком, которые обеспечивают детальный контроль над маршрутизацией запросов и поведением трафика. Вот несколько примеров.
Разделение трафика
Входящий трафик можно разделить между разными версиями или конфигурациями сервиса. Сетка направляет часть трафика на обновленную версию, что позволяет контролировать и постепенно внедрять изменения. Это обеспечивает плавный переход и минимизирует влияние изменений.
Запрос зеркального отображения
Можно дублировать трафик в тестовый сервис или сервис мониторинга для анализа, не влияя на основной поток запросов. При зеркальном отображении запросов вы получаете представление о том, как сервис обрабатывает определенные запросы, не влияя на трафик.
Развертывание пробного выпуска
Вы можете направить небольшую часть пользователей или трафика на новую версию сервиса, в то время как большинство пользователей продолжают использовать существующую стабильную версию. При ограниченной экспозиции вы можете поэкспериментировать с поведением и производительностью новой версии в реальной среде.
Безопасность
Сетки сервисов предоставляют функции безопасной связи, такие как взаимное шифрование по протоколу TLS (MTLS), аутентификация и авторизация. Mutual TLS обеспечивает проверку личности при обмене данными между сервисами. Это помогает обеспечить конфиденциальность и целостность данных за счет шифрования трафика. Можно также применять политики авторизации, чтобы контролировать доступ сервисов к определенным адресам или выполнение определенных действий.
Мониторинг
Сетки сервисов предлагают комплексные функции мониторинга и наблюдения, позволяющие получить представление о состоянии, производительности и поведении ваших сервисов. Мониторинг также поддерживает устранение неполадок и оптимизацию производительности. Ниже приведены примеры функций мониторинга, которые можно использовать:
- Сбор таких показателей, как задержка, количество ошибок и использование ресурсов, для анализа общей производительности системы
- Выполнение распределенной трассировки для просмотра полного пути и времени прохождения запросов через несколько сервисов
- Фиксация событий сервиса в журналах для целей аудита, отладки и соответствия нормативным требованиям
Как работает сетка сервисов?
Сетка сервисов устраняет логику, регулирующую обмен данными между сервисами, и абстрагирует обмен данными на собственный уровень инфраструктуры. Это решение использует несколько сетевых прокси для маршрутизации и отслеживания связи между сервисами.
Прокси-сервер выступает в качестве промежуточного шлюза между сетью организации и микросервисом. Весь трафик в сервис и из него направляется через прокси-сервер. Отдельные прокси-серверы иногда называют сайдкарами, потому что они работают отдельно, но логически расположены рядом с каждым сервисом. В совокупности прокси образуют слой сетки сервисов.
В архитектуре сетки сервисов есть два основных компонента – плоскость управления и плоскость данных.
Плоскость данных
Плоскость данных – это компонент обработки данных сетки сервисов. Он включает в себя все прокси-серверы Sidecar и их функции. Когда сервис хочет связаться с другим сервисом, прокси-сервер Sidecar выполняет следующие действия:
- Sidecar перехватывает запрос
- Он инкапсулирует запрос в отдельное сетевое соединение
- Он устанавливает безопасный и зашифрованный канал между исходными и целевыми прокси-серверами
Прокси-серверы Sidecar обрабатывают низкоуровневый обмен сообщениями между сервисами. Они также внедряют такие функции, как обрыв цепи и повторные попытки запроса, для повышения отказоустойчивости и предотвращения ухудшения качества обслуживания. Функции сетки сервисов, такие как балансировка нагрузки, обнаружение сервисов и маршрутизация трафика, реализованы в плоскости данных.
Плоскость управления
Плоскость управления выступает в качестве центрального уровня управления и настройки сетки сервисов.
С помощью панели управления администраторы могут определять и настраивать сервисы в сетке. Например, они могут указать такие параметры, как адреса обслуживания, правила маршрутизации, политики балансировки нагрузки и параметры безопасности. После определения конфигурации плоскость управления распределяет необходимую информацию в плоскость данных сетки сервисов.
Прокси-серверы используют информацию о конфигурации, чтобы решить, как обрабатывать входящие запросы. Они также могут получать изменения конфигурации и динамически адаптировать свое поведение. Вы можете вносить изменения в конфигурацию сетки сервисов в режиме реального времени без перезапуска или прерывания работы сервисы.
Реализации сетки сервисов обычно включают в себя следующие возможности на уровне управления:
- Реестр сервисов, который отслеживает все сервисы в сети
- Автоматическое обнаружение новых сервисов и удаление неактивных
- Сбор и агрегирование телеметрических данных, таких как метрики, журналы и распределенная информация о трассировке
Что такое Istio?
Istio – это проект сеток сервисов с открытым исходным кодом, предназначенный в основном для работы с Kubernetes. Kubernetes – платформа для оркестрации контейнеров с открытым исходным кодом, позволяющая развертывать контейнерные приложения и управлять ими в любом масштабе.
Компоненты панели управления Istio функционируют как самостоятельные рабочие нагрузки Kubernetes. В качестве основы для создания прокси Sidecar используется Kubernetes Pod – тесно связанный набор контейнеров с одним IP-адресом.
Прокси-сервер Istio уровня 7 работает как другой контейнер в том же сетевом контексте, что и основной сервис. С этой позиции он может перехватывать, проверять и управлять всем сетевым трафиком, проходящим через модуль. Тем не менее, основной контейнер не нуждается в изменениях или даже знании того, что это происходит.
В чем заключаются проблемы внедрения сеток сервисов с открытым исходным кодом?
Вот некоторые распространенные проблемы сетки сервисов, связанные с платформами с открытым исходным кодом, такими как Istio, Linkerd и Consul.
Сложность
Сетки сервисов содержат дополнительные компоненты инфраструктуры, требования к конфигурации и рекомендации по развертыванию. Они имеют сложную кривую обучения, требующую от разработчиков и операторов приобретения опыта использования конкретной реализации сетки сервисов. Обучение команд требует времени и ресурсов. Организация должна обеспечить команды необходимыми знаниями для понимания тонкостей архитектуры сетки сервисов и ее эффективной настройки.
Операционные накладные расходы
Сетки сервисов сопряжены с дополнительными накладными расходами на развертывание, управление и мониторинг прокси-серверов плоскости данных и компонентов плоскости управления. Например, вам нужно сделать следующее:
- Обеспечьте высокую доступность и масштабируемость инфраструктуры сетки сервисов
- Отслеживайте состояние и производительность своих прокси-серверов
- Решайте проблемы с обновлениями и совместимостью
Очень важно тщательно спроектировать и настроить сетку сервисов, чтобы минимизировать влияние на производительность всей системы.
Проблемы интеграции
Для выполнения требуемых функций сетка сервисов должна легко интегрироваться с существующей инфраструктурой. Сюда входят платформы оркестровки контейнеров, сетевые решения и другие инструменты в стеке технологий.
Обеспечить совместимость и плавную интеграцию с другими компонентами в сложных и разнообразных средах бывает непросто. Для изменения API, форматов конфигурации и зависимостей требуется постоянное планирование и тестирование. То же самое касается и необходимости перехода на новые версии в любом месте стека.
Как AWS обеспечивает соответствие вашим требованиям к сетке сервисов?
AWS App Mesh – это полностью управляемая и высокодоступная сетка сервисов от Amazon Web Service (AWS). App Mesh – это новая технология, которая упрощает мониторинг, контроль и отладку взаимодействия между сервисами.
App Mesh использует Envoy, прокси‑сервер с открытым исходным кодом для сети сервисов, развертывая его рядом с контейнерами микросервисов. Это решение можно использовать с контейнерами микросервисов, которыми управляют Эластичный контейнерный сервис Amazon (Amazon ECS), Эластичный сервис Amazon Kubernetes (Amazon EKS), AWS Fargate и Kubernetes на AWS. Его также можно использовать с сервисами в Эластичном вычислительном облаке Amazon (Amazon EC2).
Создайте аккаунт уже сегодня и начните работу с сеткой сервисов AWS.
AWS: дальнейшие шаги
Получите мгновенный доступ к уровню бесплатного пользования AWS.