Поиск по сайту:

Что такое сервисная сетка? Почему они важны?


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

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

Что внутри сетки?

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

Фундаментальная цель ячеистой сети — упростить и повысить надежность взаимодействия сервисов. Возьмем простую пару сервисов: API и отдельную систему аутентификации. API должен будет взаимодействовать со службой аутентификации при получении запросов.

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

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

Как реализуются сервисные сетки?

Большинство современных сервисных сеток формируются из двух компонентов: плоскости управления и плоскости данных. Основная функциональность принадлежит плоскости данных, которая касается данных, проходящих через систему.

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

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

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

На этой диаграмме из проекта Istio показано, как компоненты сочетаются друг с другом. Каждая служба получает свой собственный прокси. Входящий трафик проходит через прокси. Они могут связываться с плоскостью управления для обнаружения других служб. Прокси обычно называют «сайдкарами», поскольку они работают вместе с сервисом, который представляют.

Другие функции Service Mesh

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

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

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

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

Что насчет недостатков?

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

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

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

Когда следует использовать сервисную сетку?

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

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

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

Большинство популярных сервисных сеток легко настроить. У Istio и Linkerd есть хорошо задокументированные руководства по началу работы, которые помогут вам развернуть сетку в кластере Kubernetes. Стоит поэкспериментировать, даже если вы еще не уверены, что ваша система соответствует масштабу сетки. Слишком долгое использование прямой связи с сервисами может ограничить вашу способность своевременно и надежно запускать новые сервисы.