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. Распределённый
    трэйсинг Go
    приложения
    Андреенко Артём
    CIO Prisma Labs

    View Slide

  2. План доклада
    - О компании
    - О себе
    - Описание проблемы
    - Теория
    - Инструменты
    - Примеры кода

    View Slide

  3. Prisma Labs
    https://prisma-ai.com
    - iPhone и Android приложение
    - Искусственный интеллект,
    который перерисовывает фото
    в другом стиле
    - Создано в 2016 году
    - 150M скачиваний

    View Slide

  4. View Slide

  5. View Slide

  6. О себе
    - Занимаюсь бэкендом и инфраструктурой в Prisma
    Labs
    - Ведущий подкаста GolangShow
    https://golangshow.com
    - Продвигаю язык Go в русскоязычном сообществе
    http://slack.golang-ru.com

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. Решение
    В приложение вносятся такие дополнения:

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. Dapper
    a Large-Scale Distributed Systems Tracing Infrastructure
    https://ai.google/research/pubs/pub36356
    Google, 2010
    Опубликован через 6 лет после начала работы

    View Slide

  16. View Slide

  17. 3 принципа Dapper
    ● Низкий оверхед

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. Дополнительно о Dapper
    ● Обновления о новых событиях должны быть
    доступны как можно раньше для исследований
    ● Задержка обновления не должна превышать 1
    минуты
    ● Необходима поддержка сэмплирования (сбор
    только 1 трассировки из N)
    ○ Для обеспечения низкого вмешательства в
    производительность приложения

    View Slide

  26. Пример следования пользовательского запроса через компоненты проекта

    View Slide

  27. Схема одной трассировки из 5 спэнов

    View Slide

  28. Пример отображения одного спэна

    View Slide

  29. Схема хранения трассировок в хранилище

    View Slide

  30. Нагрузка на CPU в зависимости от кол-ва процессов и потока событий

    View Slide

  31. Нагрузка на CPU при разных порогах сэмплирования

    View Slide

  32. Пример исследования приложения в Google Dapper

    View Slide

  33. Инструменты
    Opensource
    ● Jaeger
    ● Zipkin
    SaaS сервисы
    ● NewRelic
    ● LightStep
    ● DataDog

    View Slide

  34. Zipkin
    - Создан в Twitter
    - Опубликован через 4 года после публикации
    Google Dapper White paper
    - Написан на Java
    - Управляет сбором и поиском данных через
    сервисы Collector и Query

    View Slide

  35. Zipkin

    View Slide

  36. Zipkin

    View Slide

  37. Zipkin UI

    View Slide

  38. Zipkin и Go
    https://github.com/openzipkin/zipkin-go

    View Slide

  39. Zipkin и Go

    View Slide

  40. Jaeger
    ● Создан в Uber
    ● Написан на Go
    ● Участник CNCF
    ● Учитывались лучшие вещи из Google Dapper и Zipkin
    ● Включает в себя:
    ○ Распределенной распространение контекста
    ○ Распределенный мониторинг транзакций
    ○ Анализ корней проблем
    ○ Анализ зависимостей компонентов приложения
    ○ Оптимизация производительности и времени выполнения
    запросов приложения

    View Slide

  41. Jaeger

    View Slide

  42. Jaeger UI

    View Slide

  43. Jaeger UI: анализ зависимостей

    View Slide

  44. OpenTracing
    ● Инициатива унифицировать API
    ● Участник CNCF
    ● Поддерживается в Zipkin
    ● Поддерживается в Jaeger

    View Slide

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

    View Slide

  46. Cпасибо за внимание!
    Вопросы?

    View Slide