Есть ли способ передавать очень большие объемы загружаемых данных непосредственно из / dev / urandom в AWS S3? - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь запустить несколько тестов скорости загрузки на AWS S3 для очень больших файлов (500 ГБ-5 ТБ).В настоящее время я использую boto3, AWS SDK для Python.Вместо того, чтобы создавать и хранить массивные файлы на своем жестком диске, я бы предпочел потоковую передачу прямо с /dev/urandom (или, по крайней мере, /dev/zero).boto3 s put_object () может загружать данные из потока, но, похоже, его жесткий предел составляет 5 ГБ, что гораздо меньше, чем мне нужно для тестирования.

Я попробовал boto3 upload_fileobj () , который обрабатывает более крупные объекты с помощью многоэтапной загрузки автоматически.Он отлично работает с реальными файлами, но я не могу найти способ заставить его загружать данные прямо из потока.Я также рассмотрел использование интерфейса командной строки (CLI) AWS S3 вместо boto3 SDK, но опять-таки не смог найти способ выгрузки данных непосредственно из потока.

Есть сравнительно легко?способ загрузки большого количества данных в AWS S3 напрямую с /dev/urandom?

1 Ответ

0 голосов
/ 15 марта 2019

Вы не хотите осуществлять потоковую передачу напрямую с /dev/urandom, потому что это на самом деле ограничено ЦП, а не ограничено вводом-выводом (это можно увидеть, запустив top при использовании dd для потоковой передачи случайных данных в файл или путем сравнения времени для копирования существующего файла объемом 1 ГБ, которого еще нет в кеше диска).

Используя Boto3, вы хотите: create_multipart_upload , чтобы начать загрузку, upload_part , чтобы отправить каждую часть, и complete_multipart_upload , чтобы завершить загрузку. Вы можете либо передать файл или байтовый массив в upload_part, так что вы можете либо сгенерировать байтовый массив, используя встроенный генератор случайных чисел (который будет достаточно случайным, чтобы избежать сжатия GZip), либо повторно прочитать тот же файл ( в аналогичных тестах я использую файл объемом 1 ГБ, содержащий данные из urandom - Gzip не даст вам никакого сжатия в таком большом пространстве ввода).

Однако все упражнение бессмысленно. Если у вас нет гигабитного канала непосредственно в магистрали Интернета, AWS будет работать быстрее вашей сети. Таким образом, все, что вы на самом деле тестируете, это то, как быстро ваша сеть может проталкивать байты в Интернет, и есть множество сайтов «скоростного тестирования», которые сообщают вам эту пропускную способность. Кроме того, вы не узнаете намного больше, отправляя 1 ТБ, чем отправку 1 ГБ: весь смысл S3 в том, что он может обрабатывать что угодно .

...