S3P обеспечивает радикально более быстрый способ копирования, составления списка, синхронизации и выполнения других массовых операций над большими сегментами AWS S3.
Вы можете использовать его как инструмент командной строки для общих операций или как библиотеку практически для всего, что вы можете себе представить.
API S3 построен на последовательном перечислении элементов: запросите 1000 элементов, подождите, затем запросите следующие 1000. Так работают почти все инструменты S3. Однако S3P может перечислять элементы параллельно. Он использует способность S3 запрашивать первые 1000 элементов, равных или следующих за заданным ключом. Затем, с помощью алгоритмического деления пополам и некоторых интеллектуальных эвристик, S3P может сканировать содержимое корзины с произвольной степенью парализма. На практике S3P может отображать сегменты до 20 раз быстрее, чем традиционные методы.
S3P на самом деле просто модный и очень быстрый инструмент для листинга S3. Суммирование, копирование и синхронизация усиливаются благодаря основной способности S3P значительно быстрее составлять списки объектов.
Мы добились скорости копирования до 8 гигабайт в секунду между двумя сегментами в одном регионе, используя один экземпляр EC2 для запуска S3P.
Узнайте больше о S3P на Medium.
NodeJS
AWS-CLI
aws-cli
необходим для копирования больших файлов. По умолчанию файлы размером более 100 мегабайт копируются с помощью aws-cli
. Это хороший компромисс для производительности. Однако вы можете изменить этот порог на 5 гигабайт с помощью опции --large-copy-threshold
.
Почему?
aws-sdk
не поддерживает копирование файлов размером более 5 гигабайт без гораздо более сложного решения.
Имена ключей должны использовать ограниченный набор символов:
<space>
!"#$%&'()*+,-./
0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
abcdefghijklmnopqrstuvwxyz{|}~
Почему? Поскольку Aws-S3 не поддерживает перечисление ключей в порядке убывания, S3P использует алгоритм «разделяй и властвуй» на основе диапазона символов.
s3p использует те же учетные данные, что и aws-cli, поэтому см. их документацию: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html.
Нет необходимости устанавливать s3p напрямую. Если у вас установлен NodeJS, вы можете запускать s3p напрямую с помощью npx
.
Встроенная справка подробно описывает все команды, параметры и содержит множество примеров:
# list commands and get overall help
npx s3p help
Используйте опцию --help
для получения подробной справки и примеров для каждой команды:
# get specific command help and example uses
npx s3p cp --help
Вы также можете установить s3p локально, что позволит ему работать быстрее.
# install s3p on your current machine
npm install s3p -g
# now it runs from the local install:
npx s3p help
Помимо производительности, S3P предоставляет гибкие возможности настройки списка, копирования и сравнения:
Удивительно, но вам даже не нужно запускать S3P в облаке, чтобы увидеть большую часть его преимуществ. Вы можете запустить его на своем локальном компьютере, и, поскольку копирование S3 никогда не происходит напрямую через S3P, оно не использует пропускную способность AWS.
Производительность при составлении списков сегментов S3 может достичь почти 20 000 50 000 элементов в секунду (на момент S3Pv3.5).
Производительность копирования S3-ведра может превышать 8 гигабайт в секунду.
Да, я видел устойчивые 9 гигабайт в секунду! Это было в корзине со средним размером файла чуть больше 100 мегабайт. S3P работал на одном экземпляре c5.2xlarge. Для сравнения: я никогда не видел, чтобы aws-s3-cp получал скорость более 150 МБ/с. Это более чем в 53 раза быстрее.
Средний размер файла оказывает большое влияние на общую скорость s3p в байтах в секунду:
расположение | команда | aws-cli | s3p | ускорение | средний размер |
---|---|---|---|---|---|
местный | лс | 2500 шт./с | 50000 шт./с | 20x | н/д |
местный | КП | 30 МБ/с | 150 МБ/с | 5x | 512 КБ |
EC2 | КП | 150 МБ/с | 8 ГБ/с | 54x | 100 МБ |
S3P был разработан для работы с сегментами с миллионами элементов и сотнями терабайт. В настоящее время S3P по-прежнему представляет собой одноядерное приложение NodeJS. Существуют возможности для еще более массового параллельного выполнения операций S3 за счет разделения рабочих процессов или даже распределения работы между экземплярами с помощью чего-то вроде Elastic-Queue. Если кому-то нужны решения, которые в 100-1000 раз быстрее, чем aws-cli, дайте нам знать. Мы хотели бы работать с вами.
- [email protected]
Вся документация встроена в страницы справки CLI. Использовать:
# get a list of commands
npx s3p help
# get a list of options for a command
# example:
npx s3p cp --help
Все возможности CLI также доступны в виде API. Чтобы изучить API, сначала изучите параметры CLI, а затем, чтобы узнать вызов API для конкретной команды CLI, запустите эту команду в командной строке с параметром --api-example
. Это выведет пример кода JavaScript для программного вызова этой команды.
ПРИМЕЧАНИЕ. Когда вы используете
--api-example
в командной строке, ваша команда фактически не запускается. S3P выведет на консоль только JavaScript-эквивалент команды CLI, а затем завершит работу.
Бегать:
> npx s3p ls --bucket foo --quiet --api-example
Выход:
require ( "s3p" ) . ls ( {
bucket : "foo" ,
quiet : true ,
} ) ;
// > Promise
Тестовый запуск:
> node
Вставить:
require ( "s3p" )
. ls ( {
bucket : "foo" ,
quiet : true ,
} )
. then ( out => console . log ( out ) ) ;
Выход:
[
'item1' ,
'item2' ,
'item3' ,
... 8463 more items
}
S3P был первоначально разработан GenUI.com совместно с Solution Bioscience, Inc.
GenUI — консалтинговая компания по программному обеспечению для коммерциализации технологий, базирующаяся в Сиэтле. Мы ускоряем разработку программного обеспечения. Пожалуйста, свяжитесь с GenUI и расскажите нам о своем проекте. Мы хотели бы услышать ваше мнение.