Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Трэйсинг Go приложения

Трэйсинг Go приложения

Iskander (Alex) Sharipov

December 08, 2018
Tweet

More Decks by Iskander (Alex) Sharipov

Other Decks in Programming

Transcript

  1. План доклада - О компании - О себе - Описание

    проблемы - Теория - Инструменты - Примеры кода
  2. Prisma Labs https://prisma-ai.com - iPhone и Android приложение - Искусственный

    интеллект, который перерисовывает фото в другом стиле - Создано в 2016 году - 150M скачиваний
  3. О себе - Занимаюсь бэкендом и инфраструктурой в Prisma Labs

    - Ведущий подкаста GolangShow https://golangshow.com - Продвигаю язык Go в русскоязычном сообществе http://slack.golang-ru.com
  4. Проблема - Внешний мониторинг отображает только общее время работы запроса

    и их количество. Отсутствует понимание происходящих процессов внутри компонентов приложения
  5. Проблема - Внешний мониторинг отображает только общее время работы запроса

    и их количество. Отсутствует понимание происходящих процессов внутри компонентов приложения - Любой мониторинг должен вносить минимальное ухудшение производительности и времени работы запросов
  6. Проблема - Внешний мониторинг отображает только общее время работы запроса

    и их количество. Отсутствует понимание происходящих процессов внутри компонентов приложения - Любой мониторинг должен вносить минимальное ухудшение производительности и времени работы запросов - Логи событий для одного запроса различных компонентов системы разбросаны по разным лог файлам
  7. Решение В приложение вносятся такие дополнения: • Каждый внешний запрос

    помечается уникальным идентификатором • Прохождение запроса внутри компонентов приложения происходит с сохранением уникального идентификатора
  8. Решение В приложение вносятся такие дополнения: • Каждый внешний запрос

    помечается уникальным идентификатором • Прохождение запроса внутри компонентов приложения происходит с сохранением уникального идентификатора • Идентификатор включается во все лог сообщения
  9. Решение В приложение вносятся такие дополнения: • Каждый внешний запрос

    помечается уникальным идентификатором • Прохождение запроса внутри компонентов приложения происходит с сохранением уникального идентификатора • Идентификатор включается во все лог сообщения • Информация (вместе с таймстампами) сохраняется в централизованное хранилище
  10. Dapper a Large-Scale Distributed Systems Tracing Infrastructure https://ai.google/research/pubs/pub36356 Google, 2010

    Опубликован через 6 лет после начала работы
  11. 3 принципа Dapper • Низкий оверхед ◦ Система должна вносить

    в работу приложения минимальные потери в производительности и времени работы
  12. 3 принципа Dapper • Низкий оверхед ◦ Система должна вносить

    в работу приложения минимальные потери в производительности и времени работы ◦ Должна быть ручка для полного выключения трассировок
  13. 3 принципа Dapper • Низкий оверхед ◦ Система должна вносить

    в работу приложения минимальные потери в производительности и времени работы ◦ Должна быть ручка для полного выключения трассировок • Прозрачность уровня приложения
  14. 3 принципа Dapper • Низкий оверхед ◦ Система должна вносить

    в работу приложения минимальные потери в производительности и времени работы ◦ Должна быть ручка для полного выключения трассировок • Прозрачность уровня приложения ◦ Разработчики не должны беспокоиться о системе трассировки
  15. 3 принципа Dapper • Низкий оверхед ◦ Система должна вносить

    в работу приложения минимальные потери в производительности и времени работы ◦ Должна быть ручка для полного выключения трассировок • Прозрачность уровня приложения ◦ Разработчики не должны беспокоиться о системе трассировки ◦ Инфраструктура трассировки должна быть надежна, и не являться источником багов в приложении
  16. 3 принципа Dapper • Низкий оверхед ◦ Система должна вносить

    в работу приложения минимальные потери в производительности и времени работы ◦ Должна быть ручка для полного выключения трассировок • Прозрачность уровня приложения ◦ Разработчики не должны беспокоиться о системе трассировки ◦ Инфраструктура трассировки должна быть надежна, и не являться источником багов в приложении • Масштабирование
  17. 3 принципа Dapper • Низкий оверхед ◦ Система должна вносить

    в работу приложения минимальные потери в производительности и времени работы ◦ Должна быть ручка для полного выключения трассировок • Прозрачность уровня приложения ◦ Разработчики не должны беспокоиться о системе трассировки ◦ Инфраструктура трассировки должна быть надежна, и не являться источником багов в приложении • Масштабирование ◦ Инфраструктура трассировки должна уметь масштабироваться с минимальными трудозатратами
  18. Дополнительно о Dapper • Обновления о новых событиях должны быть

    доступны как можно раньше для исследований • Задержка обновления не должна превышать 1 минуты • Необходима поддержка сэмплирования (сбор только 1 трассировки из N) ◦ Для обеспечения низкого вмешательства в производительность приложения
  19. Zipkin - Создан в Twitter - Опубликован через 4 года

    после публикации Google Dapper White paper - Написан на Java - Управляет сбором и поиском данных через сервисы Collector и Query
  20. Jaeger • Создан в Uber • Написан на Go •

    Участник CNCF • Учитывались лучшие вещи из Google Dapper и Zipkin • Включает в себя: ◦ Распределенной распространение контекста ◦ Распределенный мониторинг транзакций ◦ Анализ корней проблем ◦ Анализ зависимостей компонентов приложения ◦ Оптимизация производительности и времени выполнения запросов приложения
  21. Open tracing принципы • Стандартизация управления спэнами • Стандартизация передачи

    данных контекста внутри компонентов приложения • Стандартизация доступа к активному спэну приложения • Стандартизация передачи внешнего входящего контекста • Стандартизация выгрузки данных трассировок