Carrierwave + S3 Storage + Counter Cache занимает слишком много времени
У меня есть простое приложение, которое получает POST-изображения через API и отправляет их на S3 через Carrierwave. Моя таблица фотографий также имеет counter_cache.
80% времени моей транзакции ОГРОМНО, например 60 секунд или более, и более 90% этого времени тратится на загрузку изображения на S3 и обновление counter_cache.
Кто-нибудь имеет представление о том, почему это время загрузки так велико и почему запросы кэш-кеша занимают так много времени?
Просто добавил несколько фотографий на http://carrierwave-s3-upload-test.herokuapp.com/
Поведение было похоже:
Только что удалил counter_cache
из моего кода и сделал еще несколько загрузок.... снова странное поведение.
РЕДАКТИРОВАТЬ 1
Журналы с последней пакетной загрузки. EXCON_DEBUG имеет значение True: https://gist.github.com/rafaelcgo/561f516a85823e30fbad
РЕДАКТИРОВАТЬ 2
В моих журналах не было никакой информации о выходе EXCON. Я понял, что использую туман 1.3.1. Обновлен до Fog 1.19.0 (который использует более новую версию гема excon), и теперь все работает хорошо.
Советы.. Если вам нужно отладить внешние соединения, используйте более новую версию excon и установите env EXCON_DEBUG=true, чтобы увидеть некоторые подробности, например: https://gist.github.com/geemus/8097874
РЕДАКТИРОВАТЬ 3
Ребята, обновили gem fog
а теперь сладко Не знаю, почему старые версии fog и excon имеют такую странную производительность.
1 ответ
Три подсказки, но не вся история:
CarrierWave передает файл на s3 внутри вашей транзакции базы данных. Поскольку обновление counter_cache также происходит внутри транзакции, вполне возможно, что ваш контрольный код думает, что обновление выполняется вечно, тогда как на самом деле передача файлов занимает вечность.
В прошлый раз я проверил, что dyno из приложения heroku не может поддерживать связь, пока вы видите. Вы должны видеть ошибки H12 или H15 в своих журналах, если у вас есть синхронные загрузки продолжительностью около 30 секунд. Подробнее о тайм-аутах героку здесь.
Вы пытались обновить туман? 1.3.1 исполнилось полтора года, и с тех пор они, вероятно, исправили одну или две ошибки.
Помимо этого, единственное, что приходит на ум, это то, что вы загружаете файл эпического масштаба. Я был разочарован как в задержке, так и в пропускной способности, которую я смог достичь от heroku до s3, так что это тоже может быть связано.
Обязательно: вы не разрешаете пользователям загружать файлы прямо в ваш dyno ?