Косяки с http
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 10.04.14 17:38
Оценка:
Есть скрипт, который тащит ~200 текстовых файлов с одного сервера
Работал нормально полгода в продакше и начал отваливаться — половина файлов не скачивается. Если повторять скачивание, то со временем приходят все файлы.

Фидлер сообщает, что запросы заканчиваются по таймауту. Если перезапустить запрос прямо в фидлере, файл приходит. Если тоже самое сделать в браузере — тоже приходит.
Каждый файл тащится по простому, через GET с connection : close.
Файлы скачиваются все хором. Если изменить это скажем, на 2 файла одновременно, то все работает хорошо.

Еще наблюдение — если эти же файлы качнуть через браузер, т.е. сгенерировав простыню из тегов, то снова все скачивается без единой ошибки. При чем браузер тащит также по 2 файла за раз, с той разницей что connection : keep-alive

Вопрос — что отломалось на сервере или где то в сети ?
Re: Косяки с http
От: Хреннос  
Дата: 11.04.14 06:20
Оценка: 1 (1) +2
Здравствуйте, Ikemefula, Вы писали:

I>Файлы скачиваются все хором. Если изменить это скажем, на 2 файла одновременно, то все работает хорошо.


Раньше было такое правило хорошего тона — не создавать больше 10-12 одновременных соединений к серверу. Правда, это из древних времен, когда сервера были на пару.
А вообще вариантов может быть несколько:
— Настройки сервера поменяли, и теперь он не обрабатывает больше, скажем, 100 соединений одновременно. Остальные просто ждут, пока не освободится какой-нибудь, скажем, поток в пуле.
— Канал до сервера стал уже, и теперь стягивание 200 файлов занимает слишком много времени — срабатывает таймаут.
— Сервер просто перегружен.

I>Еще наблюдение — если эти же файлы качнуть через браузер, т.е. сгенерировав простыню из тегов, то снова все скачивается без единой ошибки. При чем браузер тащит также по 2 файла за раз, с той разницей что connection : keep-alive


Да, в браузерах реализована очередь запросов, поэтому нагрузочное тестирование из браузера не проведешь.
Re[2]: Косяки с http
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 11.04.14 09:38
Оценка:
Здравствуйте, Хреннос, Вы писали:

I>>Файлы скачиваются все хором. Если изменить это скажем, на 2 файла одновременно, то все работает хорошо.


Х>Раньше было такое правило хорошего тона — не создавать больше 10-12 одновременных соединений к серверу. Правда, это из древних времен, когда сервера были на пару.

Х>А вообще вариантов может быть несколько:
Х>- Настройки сервера поменяли, и теперь он не обрабатывает больше, скажем, 100 соединений одновременно. Остальные просто ждут, пока не освободится какой-нибудь, скажем, поток в пуле.
Х>- Канал до сервера стал уже, и теперь стягивание 200 файлов занимает слишком много времени — срабатывает таймаут.
Х>- Сервер просто перегружен.

Я проверил, если запросы ставить в очередь, 3 запроса уже стабильно дает сбой. При этом есть другое приложение, отлично справляется с большой кучей запросов на тот же сервер к тем же файлам.

I>>Еще наблюдение — если эти же файлы качнуть через браузер, т.е. сгенерировав простыню из тегов, то снова все скачивается без единой ошибки. При чем браузер тащит также по 2 файла за раз, с той разницей что connection : keep-alive


Х>Да, в браузерах реализована очередь запросов, поэтому нагрузочное тестирование из браузера не проведешь.


Я не провожу нагрузочное тестирование, я хочу выяснить, откуда взялись сбои, если код уже полгода никто не трогал.
Re: Косяки с http
От: Mr.Delphist  
Дата: 11.04.14 13:03
Оценка: 1 (1) +1 -1
Здравствуйте, Ikemefula, Вы писали:

I>Есть скрипт, который тащит ~200 текстовых файлов с одного сервера

I>Работал нормально полгода в продакше и начал отваливаться — половина файлов не скачивается. Если повторять скачивание, то со временем приходят все файлы.

I>Вопрос — что отломалось на сервере или где то в сети ?


Добро пожаловать в реальный мир. Любая сетевая операция должна подразумевать
1) определённый уровень толерантности к сбоям сети (перезапускать закачку в случае обрыва или таймаута, повторять N попыток коннекта в случае недоступности и т.п.)
2) минимальное уважение к текущей сетевой инфраструктуре, иначе количество сбоев сети будет черезмерным

Например: вот все ругают DLink-маршрутизаторы — дескать, глюкают, рвут связь, вафля отваливается и т.п. А не надо его нагружать грудой торрентов, да ещё на VPN-канале — и всё будет хорошо.

Так и в Вашем случае: где-то в середине вполне могла случиться замена оборудования, или просадка канала, или рост трафика или влюблая комбинация этих факторов. Результат — код работал успешно, будучи в тепличных условиях. Теперь пора бы обложить его fault tolerance.
Re[3]: Косяки с http
От: Хреннос  
Дата: 11.04.14 13:31
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Я проверил, если запросы ставить в очередь, 3 запроса уже стабильно дает сбой. При этом есть другое приложение, отлично справляется с большой кучей запросов на тот же сервер к тем же файлам.


Вывод очевиден: посмотрите, как реализовано "другое приложение", и сделайте так же.
Возможно, оно как-то по-другому ошибки обрабатывает.
Возможно, оно запросы как-то по-другому строит.
Вариантов масса.
Re: Косяки с http
От: Engler Беларусь  
Дата: 11.04.14 15:35
Оценка: +1
Здравствуйте, Ikemefula, Вы писали:

I>Есть скрипт, который тащит ~200 текстовых файлов с одного сервера

I>Работал нормально полгода в продакше и начал отваливаться — половина файлов не скачивается. Если повторять скачивание, то со временем приходят все файлы.
Скрипт, можете показать?

I>Фидлер сообщает, что запросы заканчиваются по таймауту. Если перезапустить запрос прямо в фидлере, файл приходит. Если тоже самое сделать в браузере — тоже приходит.

Лог можете показать?
Таймаут когда наступает? При попытке подключится или уже в процессе передачи файла?

I>Каждый файл тащится по простому, через GET с connection : close.

I>Файлы скачиваются все хором. Если изменить это скажем, на 2 файла одновременно, то все работает хорошо.
Правильно ли я понимаю, что скрип пытается открыть 200 соединений одновременно?

I>Еще наблюдение — если эти же файлы качнуть через браузер, т.е. сгенерировав простыню из тегов, то снова все скачивается без единой ошибки. При чем браузер тащит также по 2 файла за раз, с той разницей что connection : keep-alive

Насколько я понимаю, это может быть причиной ( keep-alive заставляет использовать один и тот же низлежащий сокет, а close каждый раз новый ).
А если в скрипте добавить keep-alive header , что получается?

I>Вопрос — что отломалось на сервере или где то в сети ?


Конечно, не видя кода и логов, и не зная, на чем работает сервер (ось и что за сервер) это пальцем в небо.

Например, если произошел update сервера, и в системе обновился параметр, который отвечает за максимальное количесвто запросов в очереди _неустановленных_ запросов для сокета.

По дороге от клиента к серверу есть какие нибудь прокси-сервера? Там могли произойти изменения в настройках явно или неявно (после обновления)....
Re[2]: Косяки с http
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.04.14 14:59
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Так и в Вашем случае: где-то в середине вполне могла случиться замена оборудования, или просадка канала, или рост трафика или влюблая комбинация этих факторов.


Скипнул капитанский бред. Есть сказать чего по делу ?
Re[3]: Косяки с http
От: Protey Россия  
Дата: 14.04.14 11:15
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Скипнул капитанский бред. Есть сказать чего по делу ?


Правь свои потоки. Рестартуй при отпадении, очевидно же.
Re[3]: Косяки с http
От: Mr.Delphist  
Дата: 15.04.14 09:28
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, Mr.Delphist, Вы писали:


MD>>Так и в Вашем случае: где-то в середине вполне могла случиться замена оборудования, или просадка канала, или рост трафика или влюблая комбинация этих факторов.


I>Скипнул капитанский бред. Есть сказать чего по делу ?


Вам же уже многие сказали (и все капитаны, как на подбор): реагируйте на ошибку, рестартуйте закачку если отпала.
Re[4]: Косяки с http
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.04.14 09:21
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

I>>Скипнул капитанский бред. Есть сказать чего по делу ?


MD>Вам же уже многие сказали (и все капитаны, как на подбор): реагируйте на ошибку, рестартуйте закачку если отпала.


Капитанили не все, а только ты. Рестарт закачки был реализован еще полгода назад, перед выходом в продакшн. Более того, приложение работает даже если закачка отваливается.

И это, преставь, не отменяет необходимости решать указаную в первом сообщении проблему.
Re[4]: Косяки с http
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.04.14 09:29
Оценка:
Здравствуйте, Protey, Вы писали:

I>>Скипнул капитанский бред. Есть сказать чего по делу ?


P>Правь свои потоки. Рестартуй при отпадении, очевидно же.


Такая страховка уже с полгода как есть. Нужно выяснить ,почему отваливаются запросы именно в этом приложении, при чем это видно через Фиддлер. В другом приложении такое же количество запросов не отваливается, отрабатывает как положено.
Re[5]: Косяки с http
От: ononim  
Дата: 16.04.14 09:45
Оценка: 21 (1) +1
P>>Правь свои потоки. Рестартуй при отпадении, очевидно же.
I>Такая страховка уже с полгода как есть. Нужно выяснить ,почему отваливаются запросы именно в этом приложении, при чем это видно через Фиддлер. В другом приложении такое же количество запросов не отваливается, отрабатывает как положено.
А если запустить _одновременно_ 200 wget'ов на эти 200 текстовых файликов — они тоже все благополучно скачают?
Ибо 200 соединений открывать одновременно ради такой задачи — моветон. Может ips по пути какой теперь считает вас ddos ботом.
Как много веселых ребят, и все делают велосипед...
Re[6]: Косяки с http
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 16.04.14 19:58
Оценка:
Здравствуйте, ononim, Вы писали:

I>>Такая страховка уже с полгода как есть. Нужно выяснить ,почему отваливаются запросы именно в этом приложении, при чем это видно через Фиддлер. В другом приложении такое же количество запросов не отваливается, отрабатывает как положено.

O>А если запустить _одновременно_ 200 wget'ов на эти 200 текстовых файликов — они тоже все благополучно скачают?

Интересная идея, надо проверить.

O>Ибо 200 соединений открывать одновременно ради такой задачи — моветон. Может ips по пути какой теперь считает вас ddos ботом.


Идейка была в том, что бы максимально ускорить скачивание и это работало ажно полгода.
Re[7]: Косяки с http
От: Хреннос  
Дата: 17.04.14 09:06
Оценка:
Здравствуйте, Ikemefula, Вы писали:

O>>Ибо 200 соединений открывать одновременно ради такой задачи — моветон. Может ips по пути какой теперь считает вас ddos ботом.


I>Идейка была в том, что бы максимально ускорить скачивание и это работало ажно полгода.


А у идейки есть какое-то экспериментальное обоснование, или она базируется исключительно на принципе "чем больше потоков, тем должно быть быстрее"?
Re[8]: Косяки с http
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 17.04.14 10:26
Оценка:
Здравствуйте, Хреннос, Вы писали:

O>>>Ибо 200 соединений открывать одновременно ради такой задачи — моветон. Может ips по пути какой теперь считает вас ddos ботом.


I>>Идейка была в том, что бы максимально ускорить скачивание и это работало ажно полгода.


Х>А у идейки есть какое-то экспериментальное обоснование, или она базируется исключительно на принципе "чем больше потоков, тем должно быть быстрее"?


Было так — первоначальный код качал файлы последовательно. Я убрал препятствие, из за которого это было необходимо, и написал простейший вариант закачки, безо всяких дополнительных приседаний — всю пачку разом и это работало.
Более того, это же работает и в другой прилаге.
Re[9]: Косяки с http
От: ononim  
Дата: 17.04.14 14:44
Оценка: 21 (1)
I>>>Идейка была в том, что бы максимально ускорить скачивание и это работало ажно полгода.
Х>>А у идейки есть какое-то экспериментальное обоснование, или она базируется исключительно на принципе "чем больше потоков, тем должно быть быстрее"?
I>Было так — первоначальный код качал файлы последовательно. Я убрал препятствие, из за которого это было необходимо, и написал простейший вариант закачки, безо всяких дополнительных приседаний — всю пачку разом и это работало.
А это точно было препятствие?


I>Более того, это же работает и в другой прилаге.

Вот так пишешь код, аккуратно обходящий все потенциальные грабли, а потом ктото приходмт и аццки рефакторит, вынося все обходные тропы, в результате executinion graph скачет по граблям а-ля горный козел по плотине гидроэлектростанции.

ЗЫ ознакомьтесь с этим
Как много веселых ребят, и все делают велосипед...
Re[10]: Косяки с http
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 17.04.14 16:29
Оценка:
Здравствуйте, ononim, Вы писали:

I>>Было так — первоначальный код качал файлы последовательно. Я убрал препятствие, из за которого это было необходимо, и написал простейший вариант закачки, безо всяких дополнительных приседаний — всю пачку разом и это работало.

O>А это точно было препятствие?

Точно, ограничение никакого отношения к сети не имело

I>>Более того, это же работает и в другой прилаге.

O>Вот так пишешь код, аккуратно обходящий все потенциальные грабли, а потом ктото приходмт и аццки рефакторит, вынося все обходные тропы, в результате executinion graph скачет по граблям а-ля горный козел по плотине гидроэлектростанции.

O>ЗЫ ознакомьтесь с этим


Да, вроде как оно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.