Каковы последствия для производительности?

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

Многие преимущества архитектурного шаблона микросервисов проистекают из тонкой детализации, с которой его компоненты могут быть реализованы и развернуты. Чтобы быть практичным, развертывание настоящих микросервисов и управление ими (в отличие от сервисов Spring Boot SOA) требует мощи контейнеризации и оркестрации контейнеров (Kubernetes).

Kubernetes можно развернуть как в облачных, так и в локальных центрах обработки данных, а также на ПК с Linux, Windows и Mac.

Проще говоря, контейнер - это виртуализированный исполняемый образ. Этот образ можно отправить в централизованный реестр контейнеров, который Kubernetes использует для развертывания экземпляров контейнера в подах кластера.

pod можно рассматривать как своего рода оболочку для экземпляров контейнера. Каждому модулю дается собственный IP-адрес, с которым он может взаимодействовать с другими модулями в кластере. Обычно контейнер содержит только один контейнер. Но модуль может содержать несколько контейнеров, если эти контейнеры должны совместно использовать ресурсы. Если в модуле более одного контейнера, эти контейнеры связываются друг с другом через IP-адрес localhost.

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

ОБСУЖДЕНИЕ. Термин контейнер не следует путать с термином W контейнер eb. (также известный как контейнер сервлетов), который является компонентом веб-сервера, который взаимодействует с сервлетами Jakarta. Веб-контейнер создает экземпляры сервлетов, загружает и выгружает сервлеты, создает и управляет объектами запросов и ответов, а также выполняет другие задачи по управлению сервлетами.

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

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

Заключение

Индивидуальный микросервис:

  • Реализует задачу (или набор тесно связанных задач) в одном ограниченном контексте домена. Это фундаментальная характеристика микросервиса, которая способствует высокому уровню детализации и разделения задач, что сохраняет автономность микросервиса и независимую возможность развертывания. .
  • Является слабосвязанной, общается посредством передачи сообщений или событий и требует мало или совсем не требует знания определений других микросервисов, что обеспечивает разделение задач.
  • Является автономным и может разрабатываться и изменяться при меньшей координации между участвующими группами разработчиков, что способствует продвижению надежных гибких методов разработки.
  • Является независимо развертываемым и может индивидуально тестироваться, развертываться и откатываться, не влияя на другие микросервисы, что обеспечивает автоматическое развертывание, масштабирование и отработку отказа на основе облака.

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

ОБСУЖДЕНИЕ. Микросервисы рассчитаны на горизонтальное масштабирование для достижения целей производительности. Это не вариант для некоторых случаев использования приложений, когда прямая оптимизация использования ЦП, памяти, ввода-вывода или сетевых ресурсов является единственным способом удовлетворить требования к производительности. Эти варианты использования, вероятно, не подходят для архитектурного шаблона микросервиса.

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

Рекомендуемая литература