Почему мы видим неправильные тайминги в Datadog APM tracing для простых действий, таких как Redis GET?
У нас есть приложение Django на Python, развернутое в AWS EKS на экземплярах EC2. Мы используем Gunicorn в качестве нашего веб-сервера, хотя недавно мы запустили Apache + wsgi и столкнулись с теми же проблемами. Экземпляры EC2 имеют размер m6a.xl, сами контейнеры имеют 1500 мб процессора и 2048 МБ памяти.
Мы используем трассировку Datadog APM и отслеживаем вызовы Redis. Иногда мы видим медленный запрос, а если присмотреться, то увидим, что простой запрос Redis GET занимает 2,8 секунды!
Я пользуюсь Redis уже много лет, и у меня никогда не возникало с этим проблем. Он работает быстро. И наша платформа обеспечивает очень низкую нагрузку (около 2% на процессор в небольшом экземпляре). Я включил медленный вход в ElastiCache, но мы не видим результатов, поэтому я знаю, что это не сам экземпляр Redis.
Что может быть причиной этого?
Я знаю, что тайминги в APM основаны на собственных таймингах ddtrace в Python, так что, возможно, наши процессы на Python каким-то образом тормозятся? Загрузка процессора в экземплярах EC2 в целом очень низкая, максимум 10%. Объем используемой памяти также невелик. Я в недоумении. У нас нет избыточного распределения, так что я не думаю, что дело в этом.