dd

Черная полоса вроде закончилась, началась прикольная

Написано

в

Меня недавно добавили в чат, где есть люди из разных областей компании
Разрабы, ПМы, а главное — непосредственные пользователи наших внутренних приложений (операторы)
У последних, как не трудно догадаться, — всегда все горит, ужасно тормозит, работать невозможно, клиенты массово жалуются и тд
Иногда это паника, иногда это реальность

Как раз последние пару дней я разгребал именно реальный случай, когда проду становится плохо
Заходишь в логи, а там бескрайнее море записей с уровнем emergency, в каждой из которых написано про таймаут

Какой-то из 4 сервисов наотрез отказывался укладываться в 20 секунд с ответом
Беда в том, что запросы делались асинхронно, через multicurl и при выбросе исключения не было никакой информации о том, кто именно уходит в таймаут
Спустя какое-то время все же нашел виновника и полез смотреть почему не успевает

А не успевал он по простой причине — на один апи запрос делалось 100500 запросов в базу и в среднем запрос работал около 44-48 секунд
И ладно бы это просто было простыней из вызовов к базе, но нет, все куда хуже
Там тянулась сущность из базы, а потом передавалась в экстратор
Экстрактор в нашем случае это такая шляпа, которой ты даешь список атрибутов, а он их каким-то образом тянет из сущности
И большая часть атрибутов — смежные сущности, за которыми доктрина каждый раз ходила в базу

Решение немного экстремальное, но я просто вытягивал все данные по сущности разом
Да, там много джоинов; да, там жирнющий селект
Но быстрее на стороне пхп эту кучу данных растолкать по сущностям, чем каждый раз ходить в базу

Результат в итоге с одной стороны неплохой — прирост х8 (с 48 секунд до 6 секунд)
С другой — это все равно 6 секунд 🙁
Но лучшее враг хорошего, поэтому такой результат нас устроит пока что

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *