Конечно, распределенные системы и системы на основе микрослужб вносят большой вклад и позволяют расширить ваши возможности, но при этом вам придется приложить немало усилий для того, чтобы все эти отдельные элементы могли работать вместе. Jaeger – это инструмент с открытым исходным кодом, который предоставляет возможность трассировки и локализации проблем, и он определенно заслуживает внимания. Любой, кто занимается разработкой распределенных систем/микрослужб, должен знать, что такое Jaeger.
Хотите узнать больше? Тогда прочитайте эту статью. Здесь мы расскажем о трассировке, о том, что это значит, о важности этого понятия и т.д. Давайте начнет с основной идеи Jaeger.
Что такое трассировка распределенных систем?
Если мы говорим о Jaeger, значит, речь здесь пойдет о трассировке, и лучше всего разобраться, что же это значит, с точки зрения распределенных систем. Самая большая проблема – это объединить различные элементы и обеспечить возможность непрерывного взаимодействия между всеми этими микрослужбами.
В этом плане самым простым вариантом является монолитная архитектура, поскольку вам нужно работать только с одним компонентом. Если мы говорим о системах на основе микрослужб и распределенных системах, то здесь разработчики должны следить за потоком данных между двумя и более микрослужбами.
И тут на первый план выходит трассировка распределенных систем, так как она гарантирует, что данные, которые распределены между несколькими службами, доступны на централизованной платформе. Существует и другой способ понять, как это работает; у вас есть возможность наблюдения за каждым событием, которое происходит в рамках микрослужб.
Трассировка распределенных систем отлично помогает в том, что касается оптимизации и отладки, так как отслеживает важные данные и их поток.
По большому счету, это часть сервисной сетки, которая играет немаловажную роль в управлении микрослужбами. Это ключевая функция Jaeger, так как инструмент использует ее для того, чтобы отслеживать пути обработки запросов. Кроме того, такая концепция помогает уменьшить время отклика, проводить мониторинг распределенных транзакций и помогает в провидении анализа первопричин.
Что такое Jaeger: значение и обязанности
В принципе, это решение, предназначенное для трассировки распределенных систем, довольно часто используется для мониторинга и устранения неполадок в микрослужбах. Он визуализирует события, которые происходят в рамках микрослужб, для того, чтобы их можно было легко интерпретировать. У этой концепции есть еще одно название – Jaeger Tracing (трассировка Jaeger), так как она запускается вслед за отслеживанием путей обработки запросов и трассировками.
Это один и ключевых этапов разработки микрослужб. Мы все прекрасно знаем, что микрослужбы имеют несколько автономных приложений, у которых есть свои RESTful API, логика и база данных, и для того, чтобы взаимодействовать друг с другом, они отправляют запросы и отвечают на них.
Jaeger сортирует все по трассировкам и журналам. Вот основные обязанности Jaeger:
- Поддержка перемещения данных внутри и за пределами экосистемы микрослужб
- Выявление проблем, которые снижают производительность
- Выяснение первопричины
- Отслеживание всех компонентов, от которых зависят микрослужбы
- Поддержка передачи распределенного содержимого, чтобы приложение, о котором идет речь, могло передавать содержательную информацию с соответствующими данными.
Компоненты Jaeger
- Инструментарий
Этот компонент предназначен для формирования телеметрических данных. В данном случае это данные трассировки, данные журналов и метрики. Для формирования телеметрических данных используется код приложения. С помощью инструментария вы можете получить телеметрические данные, которые потом помогут вам в изучении ошибок.
В большинстве случаев инструментарий включает в себя такие инструменты, как SDK, агенты и клиентские библиотеки. Если мы говорим о Jaeger, то здесь также есть библиотеки на основе API OpenTracing.
Компоненты Jaeger
Раньше OpenTracing работал сам по себе, а позже он объединился с OpenTelemetry. У Jaeger есть несколько клиентских библиотек, в основе которых лежат такие языки, как Java, Go, C++, Node.js и C#. Не забывайте о том, что служба начинает генерировать отрезки входящих транзакций сразу после инструментрирования.
- Веб-интерфейс пользователя/визуализация
Стандартный пользовательский интерфейс Jaeger становится универсальным, как только он становится частью трассировки распределенных систем.
- Конвейер данных
Конвейер данных – еще один компонент Jaeger, который помогает принимать данные различных форматов. Когда службе удается собрать данные трассировки, она направляет их непосредственно во внутреннее хранилище для того, чтобы их можно было визуализировать. Если вы оставите данные на этом этапе без контроля, то могу произойти некоторые сбои.
На данном этапе Jaeger использует конвейер данных. Он отслеживает буферизацию данных и поддерживает такие вещи, как пакетная обработка, организация очереди, индексирование и манипулирование данными.
- Внутреннее хранилище
Jaeger прибегает к помощи простого внутреннего хранилища для того, чтобы данные можно было использовать для тестирования. Есть два самых известных хранилища данных трассировки, которые использует Jaeger: Cassandra и ElasticSearch.
Выборка
Процесс выборки – это неотъемлемая часть Jaeger и его библиотек. Клиенты Jaeger могут выбить стратегии выборки и менять частоту выборки с помощью таких стратегий, как const sampler (постоянная выборка), probabilistic sampler (вероятностная выборка), opentracing.jaeger.const-sampler.decision = true | false, rate-limiting sampler (выборка с ограничением скорости) и т.д.
В то время как кто-то пытается разобраться, что же такое выборка Jaeger, важно усвоить тот факт, что это довольно сложная концепция и она используется в двух местах.
Давайте рассмотрим более подробно.
Выборка на уровне дистрибутива (SDK)
У выборки, которая происходит на уровне клиентского кода или SDK, есть еще одно название – головная выборка. У нее есть четыре режима.
Удаленный сэмплер (1-й режим – по умолчанию): с помощью этого режима клиенты Jaeger могут убедиться в том, что выборка была перемещена из внутреннего хранилища Jaeger, а, значит, с ней можно работать дальше.
Постоянный сэмплер: дает указание клиенту либо принять все трассировки, либо ни одной. Другого варианта нет. Если выбраны все трассировки, то отображается 1, в противном случае, в качестве результата отображается 0.
Сэмплер с ограничением скорости: здесь клиент может определить количество отбираемых трассировок в секунду.
Вероятностный сэмплер: здесь клиент может выбрать наиболее оптимальный процент отбора трассировок.
Выборка на уровне сборщика
Здесь есть два режима. Другое название такой выборки – хвостовая выборка.
Первый режим – файловая выборка. Здесь речь идет об указании сборщику пути к файлу конфигурации. Файл, о котором идет речь, как правило, содержит данные конфигурации выборки для каждой операции и для каждой службы.
Еще один режим – адаптивная выборка, в основе которой лежит адаптивный сэмплер. Так, а что это такое? Это комбинированный сэмплер, который объединяет в себе две ключевые функции процесса выборки.
Процесс выборки на этом уровне происходит в сборщике Jaeger.
Например, это очень помогает при принятии решений о выборке на основе концепции каждой операции. Как правило, этот метод применяется в тех случаях, когда используются API с несколькими оконечными точками.
Кроме того, он отлично помогает при определении предельного значения частоты выборки. В таком случае каждое действие базируется на параметрах каждой отдельной службы, которые можно с легкостью настроить статически. Также этот параметр можно извлечь из внутреннего хранилища Jaeger с помощью удаленного сэмплера.
Сборщик создает экземпляр трассировки, используя стратегии статической выборки. В данном случае используется параметр --sampling и файл выбора стратегий.
Прощание с клиентом Jaeger в пользу дистрибутива OpenTelemetry
Недавно появилась новость о появлении OpenTelemetry, которая всколыхнула сообщество Jaeger, так как он поддержал объединение OpenCensus и OpenTracing. И даже после этого объединения Jaeger развертывает OpenTracing. Что же это значит?
Для начала нужно понимать, что трассировка Jaeger тесно связана со спецификацией OpenTracing. Популярность Jaeger резко снижается вследствие определенных трудностей. Уже имеющиеся клиенты Jaeger не отдали свое предпочтение SDK OpenTelemetry, так как он позволяет использовать совместимый язык. Кроме того, экспортер Jaeger может использоваться неправильно.
Экспортер Jaeger создает отрезки при трассировке распределенных систем и преобразует их в удобный формат. Такие отрезки можно легко перемещать между хранилищем и сборщиком Jaeger.
Сейчас еще рано делать какие-то выводы о том, стал ли OpenTelemetry полной заменой сборщика трассировок Jaeger. Но он вполне может стать таковым в будущем, так как Jaeger растерял свою популярность.
OpenTelemetry без каких-либо проблем справляется со всеми нюансами Jaeger, а также предоставляет пользователям единый стандарт с богатыми функциональными возможностями. Сообщество разработчиков полюбило этот дистрибутив за его уникальные функции, например, полную совместимость с предыдущими версиями OpenTracing и OpenCensus, а также за то, что в нем нет всяких ненужных функций. Он работает как цельная платформа наблюдения и упрощает вашу работу, что нельзя сказать о нативном облачном инструменте Jaeger.
Ограничения при использовании Jaeger в качестве инструмента трассировки распределенных систем
Существует довольно много вариантов, как можно использовать Jaeger, но у него есть определенные ограничения, так как полное устранение неполадок требует доступа к нескольким метрикам, а также к трассировкам. Сюда относятся метрика времени отклика, метрика загрузки ЦП, метрика частоты возникновения ошибок и т.д. Эти показатели помогают лучше понимать общее состояние приложения.
Jaeger не может отслеживать эти метрики, соответственно, у него есть несколько недостатков. Например,
Он будет только отслеживать данные, а пользователям придется прибегнуть к помощи специальных инструментов для отслеживания показателей и управления журналами. Если вы будете использовать для одной и той же задачи больше, чем один инструмент, то ваша работа будет выглядеть довольно коряво.
- Обслуживание баз данных, которые использует Jaeger, должно быть на высшем уровне.
- На вид этот инструмент не очень привлекательный, так как у него довольно простой веб-интерфейс.
- С его помощью нельзя получить идеальное и быстрое понимание ключевых данных.
Альтернативы трассировки Jaeger
Чтобы обойти недостатки Jaeger, пользователи могут рассмотреть несколько альтернативных вариантов, которые вполне заслуживают внимания, например,
- Aspecto – это платформа трассировки распределенных систем, которая имеет высокую степень совместимости с OpenTelemetry. Эта платформа способна сразу устранять неполадки и отслеживать производительность. Таким образом, вы можете отслеживать жизненный цикл ошибки, продолжая при этом вести журналы и выполнять трассировку.
- Lightstep выбирают те, кому нужен централизованный инструмент для наблюдений и реагирования на инциденты. С его помощью IT-команды могут разрешать инциденты, не прерывая отслеживание данных и сбор метрик. Таким образом обеспечивается отличная наблюдаемость системы. А такие функциональные возможности, как аналитика изменений и Блокнот (Notepad), во многом упрощают работу.
- Logz.io чем-то похож на Lightstep. Он предоставляет несколько доволнительных возможностей для тех, кто лояльно относится к Jaeger и ищет более управляемую поддержку. У него есть информационная панель для оповещений и мониторинга служб в режиме реального времени.
Заключение
Разумнее всего будет использовать Jaeger для разработки микрослужб и распределенных систем, так как с его помощью можно отслеживать данные и события. Но это не самое идеальное решение, так как, устраняя неполадки и управляя службами, он не может отслеживать метрики.
Но всегда есть альтернативные варианты. Сфокусируйте свое внимание на целях вашей разработки и подготовьте эффективную систему отслеживания данных, журналов и метрик для более надежного взаимодействия.