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

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

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

Avatar for Iskander (Alex) Sharipov

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 принципы • Стандартизация управления спэнами • Стандартизация передачи

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