Делаем волшебство в России: история о создании APM для «ВкусВилл»

Привет, меня зовут Алексей Кафтанов, я — руководитель команды FullStack. Мы занимаемся разработкой мобильных и web-приложений. Делаем много интересного и нужного для людей, а самое главное — строим экосистему «ВкусВилл». Но сейчас — не совсем про заказную разработку.

Делаем волшебство в России: история о создании APM для «ВкусВилл»

Коротко о статье

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

Пока не претендуем на звание «Лучший APM 2023 года», даем честное слово, что скоро его докрутим. Объективно, APM Wizard не такой крутой, как DataDog или NewRelic, но – самое главное – он доступен в России.

Если уже знаете о том, что такое APM – жмяк. Если пока нет, ниже в статье можно восполнить пробел в знаниях.

Погружение в контекст

Чтобы не прыгать с места в карьер, введу в контекст и расскажу историю. Кого-то она удивит, а других чему-то научит.

Однажды, когда наступила зима 2020 года и мы даже не догадывались, какое интересное время ждет нас впереди, начали только появляться первые признаки пандемии (помните, была такая), мобильное приложение «ВкусВилл» еще не стало лидером доставки в России, а было простым приложением с базовым набором функций: посмотреть адреса магазинов, составить список покупок, воспользоваться системой лояльности, просканировать QR-код в магазинах.

А теперь представьте, что в какой-то момент все стало невероятно падать. Коллеги точно поймут эти «веселые» ощущения [как в известном меме «This is fine»]. Помню неделю, на которой мы буквально лежали по несколько часов каждый день. В то время наша команда была еще крохой, у нас даже не было DevOps’а (честно, мы не жалуемся, просто было вот так) и мы с разработчиками проводили много времени, выгружая логи в поиске проблем производительности методов и настраивая алармы на эти проблемы.

С началом пандемии все локальные проблемы стали влиять на бизнес глобальнее. Например, для такого важного действия как сканирование QR-кода для начисления бонусов в магазине все-таки была неудобная альтернатива – покупатель должен был продиктовать номер телефона. Единственной альтернативой для доставки товаров было оформление заказа у конкурентов.

Тогда мы решили, что нам нужно усилиться и получить помощь со стороны, поэтому позвали внешних консультантов – Самата Галимова и Федора Борщева (ссылки на коллег в конце статьи). Ребята подсказали огромное количество идей для Highload, но ключевое – посмотрели на наши мониторинги, покачали головой, вздохнули и предложили выбросить это все далеко и желательно навсегда и немедленно подключить APM.

(Не?)занудный текст о том, что такое APM

Application Performance Management – это набор технологий и методик, который позволяет разработчикам отслеживать, анализировать и оптимизировать производительность своих приложений. APM предоставляет ценную информацию о различных аспектах работы приложений, таких, как время отклика, задержки, использование ресурсов и другие метрики, которые помогают выявить узкие места и проблемы производительности.

Одной из ключевых возможностей APM считается трейсинг. Трейсы представляют собой детальные записи о прохождении запросов и транзакций через систему приложения. Они позволяют отследить каждый шаг выполнения запроса, включая время выполнения каждого компонента и возможные задержки. Такой подход дает разработчикам полное представление о процессе обработки запросов и помогает идентифицировать узкие места и причины снижения производительности.

Трейсы объединяются в спаны. Спан – это набор технологий и методик, которые помогают разработчикам отслеживать и улучшать производительность приложений. Он предоставляет информацию о времени отклика, задержках и использовании ресурсов, помогая выявить проблемы и узкие места в производительности.

APM предоставляет еще один инструмент – «Карта сервисов». Карта сервисов – это визуальное представление архитектуры приложения, которое показывает связи и взаимодействия между различными компонентами и сервисами в системе. Она помогает разработчикам лучше понять сложные взаимосвязи между компонентами, отслеживать зависимости и оценивать влияние каждого компонента на производительность приложения в целом.

Зачем разработчикам использовать APM? Выделили три ключевых преимущества:

  • APM позволяет оперативно выявлять и устранять проблемы производительности, что способствует улучшению пользовательского опыта и повышению удовлетворенности пользователей;
  • APM помогает разработчикам оптимизировать код и ресурсы, сокращая время отклика приложения и повышая его эффективность;
  • APM предоставляет ценные данные и инсайты, которые помогают принимать информированные решения о доработке и развитии приложений.

Так было раньше: как мы работали с DataDog

DataDog мы подключили и настроили буквально за несколько недель: добавили продуктовые серверы, смотрели ошибки, которые приходили от агентов PHP и агентов инфраструктуры. Вместе с ошибками приходили трейсы, которые просматривали разработчики. Любое отклонение от показателя выполнения выше 300 мс. исправляли в тот же день.

По инфраструктуре команда смотрела трафик, нагрузку на всю инфраструктуру и выявляла нестабильность работы сервиса.

Мы настроили систему работу с алармами. Для работы с ключевыми [о недоступности сервисов] подключили внешние агенты DataDog через life-checkpoint.

Кроме этого, настроили алармы на все ошибки 500+ – их получали от агентов, установленных в приложении. Отдельно выделили все инфраструктурные алармы по нагрузке SQL-серверов: превышение порогов использования процессора, памяти и других метрик.

DataDog понравился наличием очень крутых агентов, но мы столкнулись с проблемой получения только тех трейсов, которые в эти агенты были «вшиты». Например, мы не могли получить проприетарные метрики по базам данных, по Redis etc.

Одна из проблем, с которой пришлось столкнуться, заключалась в получении трейсов ошибок бэкенда. Мы получали стандартные, без возможности углубиться в теме. Например, на основе эндпоинта API не могли получить название конкретной хранимой процедуры T-SQL, которая в этом эндпоинте задействована. А в случае получения кода ответа меньше 500 не было обозначения в качестве проблемы.

Как же мы сделали для «ВкусВилл» лучшее* APM в России

Нескромно, согласен. Точнее будет так: *лучшее в России, с учетом тех конкурентов, которых мы нашли но, продукт которых не попробовали, потому что он выглядел хуже нашего.

Long story short, начало типичное: было все хорошо, а потом стало плохо, и это плохо нужно было как-то исправить.

Вот так было и у нас: в какой-то момент пропала возможность оплачивать DataDog. А, как вы понимаете, DataDog задавал тон работе, как ковер в художественном фильме «Большой Лебовски».

Отдел DevOps взял на себя задачу повторить весь функционал, которым мы пользовались, причем в короткий срок.

Сейчас в системе зарегистрировано более 300 графиков. Ключевые 50 из них вынесены на отдельный дашборд: графики утилизации всей инфраструктуры, работы всех бэкендов, все графики по ошибкам, ключевые бизнес-метрики по типу количества заказов в единицу времени.

Мы не волшебники, а только учимся

APM Wizard уже почти, но все еще не DataDog. Резюмирую то, что у нас получилось сделать:

  • Система работает с приложениями, написанными на PHP, Go, Java, Java Script (Node.js), Python, Ruby.
  • OpenTelemetry для генерации span’ы из различных окружений. На балансировщике мы получаем запросы id трейса, по которому мы можем собирать все последующие SPAN из приложений, следующие дальше по цепочке. В итоге, в базу мы собираем все документы по id трейса, на котором строится Trace View.
  • Коллекторы собирают span’ы, делают сортировку, готовят bulk-запросы и передают данные в ElasticSearch. Затем мы забираем данные в Grafana и Jager UI или работаем с сырыми данными через Elastic API.
  • Через Grafana UI отрисовываем span’ы в зависимости от сервиса, который их генерирует. Например, в панели с ошибками показываем ошибки по признаку: типу ошибки, сервису, etc.

Сейчас в процессе довольно много вещей:

  • Cделать хорошую систему алармов (со сложной системой эскалации, смс и роботизированными звонками по ночам). Используем Grafana on call. Почти вывели в прод.
  • Доработать систему мониторинга трейсов. Сейчас под нагрузкой работает не так хорошо, как мы хотим.
  • Проработать с прогнозированием нагрузок: графически показывать насколько текущие значения отличаются от предполагаемых и делать алармы о том, что скоро что-то пойдет не так.

Наметили основную цель – проверить MVP, насколько у нас получилось сделать коробочное решение, которое легко можно развернуть не только на наших проектах.

Как можно принять участие в «магии»

Сейчас мы в активном поиске бизнеса или студии разработки, которые используют любой из поддерживаемых нами стеков, для проведения бета-тестирования. Если вы руководите такой компанией и готовы нам посодействовать в доработке российского АРМ – напишите на почту [email protected] или пройдите регистрацию на сайте.

Эволюционная цель

С «ВкусВилл» мы работаем давно и очень плотно. Такое сотрудничество оставляет свой след. Их подход к работе, выстраиванию бизнес-процессов и отношений внутри команд вдохновляет. Чтобы понять бизнес, нужно всегда обращаться к его ценностям и эволюционной цели. Об эволюционной цели «ВкусВилл» можно почитать здесь.

А в данной статье мы поделимся эволюционной целью, которую сформулировали для нашего продукта – APM Wizard.

Есть определенные отраслевые стандарты, которые позволяют любому разработчику наблюдать за ключевыми показателями эффективности приложения и своевременно их корректировать. В концепции эволюционной цели ее достижение может быть отделимо от самого бизнеса, поэтому созданный нами инструмент может быть проработан и другими организациями.

Верим, что в IT-сообществе важную роль играет взаимопомощь. Мы стремимся создать вдохновляющую среду, в которой каждый разработчик может свободно экспериментировать и создавать приложения, веб-сервисы без ограничений. Мы готовы поддержать условных «инди» разработчиков, обеспечивая бесплатный доступ к APM Wizard. Для низконагруженных приложений с небольшим количеством хостов мониторинг останется абсолютно бесплатным как сегодня, так и в будущем. Наша миссия заключается в том, чтобы предоставить коллегам-разработчикам возможность полностью реализовать свои творческие идеи и воплотить их в функциональные приложения, не сталкиваясь с финансовыми преградами.

Открытый бета-тест

Раз вы дочитали до этого момента, уверены на 99,99%, что тема вам интересна. Если хотите попробовать созданный нашей командой APM Wizard, пройдите регистрацию на сайте.

Не хотите передавать ваши персональные данные? Без проблем, просто ставьте «+» к этому посту, и я вышлю ссылку на приглашение в личных сообщения на vc.ru, когда сервис заработает.

Полезные ссылки

Записаться на бета-тестирование.

Как и обещал в начале статьи, делюсь контактами Феди и Самата

9
4 комментария

Вкусвилл - мое почтение. Вы реально лучшие.

2
Ответить

Спасибо!

Ответить

Быстро пробежал по статье.

Разрешите задать несколько вопросов
1 - по ссылке
https://wearefullstack.ru/apm-wizard
Один в одни Grafana.

2 - Правильно понимаю что в проектах Вкуссвилл используете MobX?

3 -
В hh есть фирма Автомакон, которая разрабатывает для Вкуссвилл.
Они с вами как-то связаны?

4 - правильно понимаю, что у Вкуссвилл нет инхаус разработки?

Ответить

Привет!
1. Да, это и есть графана. На этапе MVP у нас много open-source технологий.
2. Мы делаем очень много различных проектов для ВВ и где-то ее точно используем.
3. Компания Фулстек - часть ГК Автомакон.
4. Тут сложно ответить потому что мы долго работаем над проектами и очень глубоко погружены в процессы ВкусВилл. Но организационно получается что так.

1
Ответить