Вопрос или проблема
Я пытаюсь отследить сообщения PubSub между различными микросервисами Spring. Мы запускаем два микросервиса Spring на GKE. Сервис 1 публикует сообщения в PubSub, а Сервис 2 подписывается на ту же тему. Мы используем библиотеку spring-cloud-gcp-trace для трассировки в наших сервисах.
Я вижу два подхода для трассировки PubSubMessage:
- Трассировка OpenTelemetry в издателе и подписчике https://cloud.google.com/pubsub/docs/open-telemetry-tracing
- Использование TracePubSubAutoConfiguration с spring-cloud-gcp-trace (https://github.com/GoogleCloudPlatform/spring-cloud-gcp/tree/main/spring-cloud-gcp-autoconfigure/src/main/java/com/google/cloud/spring/autoconfigure/trace/pubsub)
Для второго варианта нет примеров. В первом варианте я вижу примеры, где могу отследить сообщение от издателя до подписчика с учетом времени, проведенного в клиентских библиотеках. Но с вариантом 2 я не уверен, сможем ли мы это сделать. Поскольку spring-cloud-gcp-trace использует инструментацию Brave, а не обязательно OpenTelemetry. API издателя и подписчика требует OpenTelemetrySdk.
Вопросы следующие:
- Являются ли это две разные вещи и могут сосуществовать?
- Могу ли я использовать трассировочную библиотеку, чтобы получить тот же вид трассировки, который я получил бы из варианта с open telemetry?
Спасибо
Ответ или решение
Эффективная трассировка PubSub в микросервисах Spring: OpenTelemetry против Spring Cloud Trace
Проблема трассировки сообщений PubSub между разными Spring микросервисами, работающими на Kubernetes (GKE), является актуальной задачей для многих разработчиков. Рассмотрим два предложенных подхода к решению этой задачи и попробуем ответить на ключевые вопросы о их совместимости и функциональности.
1. Различия между OpenTelemetry и Spring Cloud Trace
OpenTelemetry и Spring Cloud Trace представляют собой разные методологии, подходы и библиотеки для трассировки.
-
OpenTelemetry – это открытый стандарт трассировки, который предоставляет мощные инструменты для мониторинга и наблюдения за сервисами. Он поддерживает трассировку как для публикующих, так и для подписывающихся сервисов, а также предоставляет возможность фиксации временных затрат в клиентских библиотеках. Это означает, что если вы хотите видеть полную картину пути вашего сообщения, OpenTelemetry может быть вашим предпочтительным выбором. Это особенно актуально для микросервисной архитектуры, где потоки данных могут проходить через множество компонентов.
-
Spring Cloud Trace с использованием
spring-cloud-gcp-trace
основан на инструментах Brave для трассировки. Хотя эта библиотека также предоставляет возможности мониторинга, она не обеспечивает аналогичного уровня интеграции с OpenTelemetry. Трассировка сообщений через PubSub происходит в соответствии с архитектурой, которая фокусируется на интеграции с Spring-приложениями, что может ограничить возможности трассировки по сравнению с OpenTelemetry.
2. Совместимость двух подходов
Оба подхода могут сосуществовать в одном приложении, однако их взаимодействие не является бесшовным. Для начала нужно понимать, что каждый инструмент может по-разному фиксировать и обрабатывать данные трассировки:
-
Если вы решите использовать OpenTelemetry в вашем приложении, вы можете создать трассировку на уровне сообщений, начиная с момента публикации и заканчивая подпиской. Вы получите полное представление о маршруте сообщения и временных затратах на каждом этапе.
-
С другой стороны, если вы используете Spring Cloud Trace с авто-конфигурацией
TracePubSubAutoConfiguration
, вы получите возможность трассировки, но с вероятными ограничениями по сравнению с OpenTelemetry, особенно если это касается интеграции с другими библиотеками или внешними сервисами.
3. Возможности трассировки с помощью библиотеки Spring Cloud Trace
Используя Spring Cloud Trace для трассировки PubSub, вы можете получить некоторые данные о времени обработки запросов и ответов, однако функциональность трассировки не будет такой же полной, как при использовании OpenTelemetry. В частности, если ваша цель – отследить всю цепочку обработки сообщений от публикации до подписки, вы столкнетесь с ограничениями:
-
Ограниченная интеграция: Spring Cloud Trace не имеет такой глубокой интеграции с клиентскими библиотеками, как OpenTelemetry, что может ограничивать стек вызовов и информацию о временных затратах.
-
Фокус на Spring-экосистеме: Как правило,
spring-cloud-gcp-trace
ориентирован на пользователей Spring и может не быть оптимальным решением для организаций, использующих смешанные технологии или желающих интегрироваться с другими стандартами и инструментами мониторинга.
Заключение
В конечном итоге ваши решения зависят от требований вашего проекта и инфраструктуры. Если вам нужна полная видимость и контроль над трассировкой PubSub сообщений в распределенной системе, OpenTelemetry будет более подходящим выбором. Однако, если вы разрабатываете систему в рамках экосистемы Spring и предпочитаете решение, интегрированное с этой платформой, spring-cloud-gcp-trace
может оказаться достаточным.
Для эффективного трассирования можно рассмотреть возможность использования обоих решений в зависимости от сценариев использования, что позволит максимизировать их преимущества и обеспечит более гибкий подход к мониторингу вашего приложения.