Микросервисы можно рассматривать как процесс разработки программных систем, в которых упор делается на структурирование отдельных функциональных модулей с точными действиями и интерфейсами. Являясь одним из столпов Интернета вещей, они становятся стандартной архитектурой. Архитектура микросервисов обеспечивает непрерывное размещение / транспортировку сложных приложений, позволяя предприятиям развивать свою техническую инфраструктуру.

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

Существует ряд инструментов, помогающих инженерам спроектировать архитектуру микросервисов и развернуть ее, Kubernetes (K8s), вероятно, является одним из самых популярных из них.

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

Сервисная сетка

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

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

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

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

  • Истио,
  • Linkerd (объединенный с Conduit) и
  • Консул (Подключиться).

Istio

Istio - это сервисная сеть с открытым исходным кодом, запущенная в 2017 году Google, IBM и Lyft, которая предназначена для подключения, защиты и мониторинга микросервисов. Он имеет две плоскости: плоскость управления и плоскость данных. плоскость данных состоит из набора интеллектуальных прокси Envoy, развернутых в качестве дополнительных компонентов, что предотвращает изменение кода приложения при обмене данными между микросервисами. Прокси-серверы Envoy обеспечивают динамическое обнаружение сервисов, балансировку нагрузки, завершение TLS, прокси-серверы HTTP / 2 и gRPC, автоматические выключатели, проверки работоспособности, поэтапное развертывание с разделением трафика на основе%, внедрением сбоев и расширенными метриками. Уровень управления управляет прокси-серверами и настраивает их для маршрутизации трафика. Он состоит из трех компонентов:

  • Pilot, основной компонент, используемый для управления трафиком, который настраивает все экземпляры прокси Envoy;
  • Mixer - платформенно-независимый компонент, который обеспечивает контроль доступа и политики использования в сети служб, а также собирает и анализирует отчеты телеметрии; а также
  • Citadel, центр сертификации и исполнитель политик.

Istio прозрачно накладывается на существующие распределенные приложения. Более того, это также платформа, включающая API-интерфейсы, которые позволяют интегрировать ее в любую платформу ведения журналов, систему телеметрии или политик.

Преимущества Istio:

  • богатые функции, включая автоматическую балансировку нагрузки для трафика HTTP, gRPC, WebSocket и TCP;
  • детальный контроль поведения трафика с обширными правилами маршрутизации, повторными попытками, отработкой отказа и внедрением ошибок;
  • подключаемый уровень политик и API конфигурации, поддерживающий контроль доступа, ограничения скорости и квоты;
  • автоматические метрики, журналы и трассировки всего трафика в кластере;
  • строгие политики аутентификации и авторизации на основе идентичности;
  • безопасная межсервисная связь.

Линкерд

Linkerd - это сервисная сетка с полностью открытым исходным кодом для Kubernetes и других фреймворков, разработанная как проект Cloud Native Computing Foundation в организации Linkerd GitHub. В 2018 году он объединился с Conduit и образовал Linkerd 2.0, превратившись из общекластерной сервисной сети в компонуемую сопутствующую службу. Он может выполнять сквозное шифрование и автоматическое внедрение прокси, но не имеет сложных возможностей маршрутизации и трассировки.

Архитектурно Linkerd имеет плоскость управления и плоскость данных. плоскость управления - это набор служб, которые работают в выделенном пространстве имен. В плоскости управления Контроллер состоит из нескольких контейнеров (включая public-api, proxy-api, destination, tap), которые обеспечивают большинство функций: агрегирование данных телеметрии, предоставление API, ориентированного на пользователя, обеспечение управления данные в прокси-серверы плоскости данных и т. д. Linkerd использует Prometheus для предоставления и хранения показателей, в то время как панель мониторинга Grafana отображает и отображает панели мониторинга, к которым можно получить доступ из панели управления Linkerd. плоскость данных состоит из сверхлегких прозрачных прокси, работающих рядом с каждым экземпляром службы. Поскольку они прозрачны, эти прокси-серверы действуют как внепроцессные сетевые стеки, отправляя телеметрию и получая управляющие сигналы от плоскости управления. Благодаря такому дизайну Linkerd измеряет и управляет трафиком к вашему сервису и из него, не создавая чрезмерных задержек.

Преимущества Linkerd:

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

Консул Коннект

Consul Connect, запущенный HashiCorp в июле 2018 года, является расширением Consul, высокодоступного и распределенного сервиса обнаружения и магазина KV. Он добавляет возможности сервисной сети и обеспечивает безопасную связь между сервисами с автоматическим шифрованием TLS и авторизацией на основе идентификации. Особое внимание уделяется обнаружению сервисов и управлению идентификацией сервисов. Так же, как Istio и Linkerd, он использует прокси Envoy и паттерн sidecar.

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

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

Каждая такая задача состоит из контейнера приложения и вспомогательного контейнера Consul Connect. При запуске сопроводительная программа Consul Connect регистрирует IP-адрес контейнера приложения в Consul через агента Consul. Дополнительный компонент Consul Connect также можно настроить для предоставления локального прокси-сервера, который служит безопасным сетевым каналом для другого контейнера приложений.

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

Преимущества Consul Connect:

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

Как видите, у Istio, Linkerd и Consul Connect есть свои преимущества, которые могут соответствовать или не соответствовать требованиям вашего технологического стека.

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

Linkerd проще, но менее гибок, поэтому он в основном подходит для небольших проектов, требующих удовлетворительной производительности с меньшими усилиями.

Consul Connect предлагает интеграцию с другими решениями HashiCorp, Consul и Vault.

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