Why does Amazon recommends reading 'all data' as soon as possible during S3 download?

While reading up official documentation on Amazon S3 Java SDK, I found an interesting note:

Your network connection remains open until you read all of the data or close the input stream. We recommend that you read the content of the stream as quickly as possible.

My question is, why does Amazon recommend reading the data ASAP as against, say, streaming it into a data pipeline where we can process the data line by line? I couldn't find the answer on Amazon's documentation website nor on their pricing pages. Nowhere is it mentioned that a long-lived HTTP connection would cost more. Therefore looking for some input from the community.

Thanks

0
задан 24 October 2018 в 21:57
1 ответ

Причина в том, что вы, по сути¹ читаете байты непосредственно из сетевого сокета. SDK не буферизует для вас весь объект в памяти или на диске.

Служба S3 -- как и любая другая веб-служба -- не допустит чрезмерных задержек/блокировок на сокетах со стороны клиента. Конкретные таймауты, налагаемые сервисом, не документированы, но идея, стоящая за этим предупреждением, заключается в том, что вы не хотите просто оставить это в покое и ожидать, что оно останется бесконечно доступным - как это было бы, если бы все было взято и спрятано где-нибудь локально.

Нет никакого финансового эффекта от того, как быстро или медленно вы читаете. Речь идет о надежности, так как TCP-соединение, оставленное без работы/установленное, в конце концов будет закрыто. S3 не мультиплексирует несколько одновременных операций над одним и тем же сокетами, поэтому никакие другие взаимодействия со службой не будут затронуты, если соединение будет неожиданно закрыто.

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


¹ по сути, но не совсем, потому что TLS.

.
2
ответ дан 4 December 2019 в 13:23

Теги

Похожие вопросы