Как переместить файлы между двумя блоками S3 с минимальной стоимостью?

Ваш первый шаг должен быть должен видеть, может ли программное обеспечение сервера DNS обработать это исходно, возможно путем вывода файла журнала, который можно проанализировать в другом месте. Сбой этого, Вы могли использовать Dnstop, который обеспечивает подобный вершине вывод запросов DNS, сделанных путем контроля сетевого трафика. Это не только даст Вам статистику по главным запросам, главным запрашивающим сторонам и типам запроса, но это также дает количество того, сколько запросов было выполнено всего.

Альтернатива должна использовать Ntop для измерения сетевого трафика в целом. Это не даст Вам тот же подробный точный вывод как Dnstop, но это даст Вам общее представление относительно того, сколько трафика DNS Вы видите, и это будет также иметь размеры, сколько другого трафика Вы получаете, который мог бы быть полезен для другого планирования мощностей.

44
задан 13 January 2012 в 00:33
6 ответов

Миллионы - это большое число - я вернусь к этому позже.

Независимо от вашего подхода, базовый механизм должен копировать напрямую из одной корзины в другую - таким образом (поскольку ваши сегменты находятся в одном регионе) вы не платите за пропускную способность. Любой другой подход просто неэффективен (например, загрузка и повторная загрузка файлов).

Копирование между бакетами выполняется с помощью 'PUT copy' - это запрос PUT, который включает заголовок 'x-amz-copy-source' - I считают, что это классифицируется как запрос на КОПИРОВАНИЕ. Это скопирует файл и по умолчанию связанные метаданные. Вы должны включить «x-amz-acl» с правильным значением, если вы хотите установить ACL одновременно (в противном случае он будет по умолчанию закрытым). С вас будет взиматься плата за запросы КОПИРОВАНИЯ (0,01 доллара США за 1000 запросов). Вы можете удалить ненужные файлы после того, как они были скопированы (запросы DELETE не тарифицируются). (Один момент, который я не совсем понимаю, заключается в том, требует ли запрос COPY также плату за запрос GET, поскольку объект должен быть сначала извлечен из исходного сегмента - если это так, плата будет дополнительно составлять 0,01 доллара США / 10 000 запросов).

Вышеупомянутые расходы кажутся неизбежными - для миллиона объектов вы просматриваете около 10 долларов (или 11 долларов). Поскольку в конечном итоге вы должны фактически создать файлы в целевом сегменте, другие подходы (например, сжатие файлов в формате tar, импорт / экспорт Amazon и т. Д.) Не помогут обойти эту стоимость. Тем не менее, возможно, стоит обратиться к Amazon, если вам нужно передать более пары миллионов объектов.

Учитывая вышеизложенное (неизбежная цена), следующее, на что нужно обратить внимание, - это время, что будет большим фактором при копировании «миллионов файлов». Все инструменты, которые могут выполнять прямое копирование между корзинами, требуют одинаковой платы. К сожалению, вам требуется один запрос на файл (для копирования), один запрос на удаление и, возможно, один запрос на чтение данных ACL (если ваши файлы имеют разные ACL). Наилучшая скорость обеспечивается тем, что может выполнять наиболее параллельные операции.

Есть несколько подходов к командной строке, которые могут быть весьма жизнеспособными:

  • s3cmd-модификация (этот конкретный запрос на перенос) включает параллельные команды cp и mv и должен быть для вас хорошим вариантом.
  • Консоль AWS может выполнять копирование напрямую - хотя я не могу говорить о том, насколько она параллельна.
  • Тим Кей ' s Скрипт aws может копировать, но он не является параллельным - вам нужно будет его написать, чтобы запустить полную копию, которую вы хотите (вероятно, не лучший вариант в данном случае, хотя это отличный скрипт).
  • CloudBerry S3 Explorer , Bucket Explorer и CloudBuddy все должны быть в состоянии выполнить задачу, хотя я не знаю, насколько эффективна каждая из них. Однако я считаю, что многопоточные функции большинства из них требуют покупки программного обеспечения.
  • Создайте собственный сценарий с использованием одного из доступных SDK.

Существует некоторая вероятность того, что s3fs может работать - он довольно параллелен, поддерживает копии между одним и тем же сегментом - НЕ поддерживает копии между разными сегментами, но может поддерживать перемещения между разными ведрами.

I '

53
ответ дан 28 November 2019 в 19:41

Я не уверен, что это лучший подход, но в консоли управления AWS есть функция вырезания / копирования / вставки. очень проста в использовании и эффективна.

5
ответ дан 28 November 2019 в 19:41

Думаю, вы уже нашли хорошее решение, но для тех, кто столкнулся с этой проблемой (как и я недавно), я создал простую утилиту специально для зеркалирования одной корзины S3. к другому с высокой степенью параллелизма, но при этом эффективно использовать процессор и память.

Он находится на github под лицензией Apache здесь: https://github.com/cobbzilla/s3s3mirror

Если вы решите дать ему попробуйте, дайте мне знать, если у вас есть отзывы.

3
ответ дан 28 November 2019 в 19:41

В проигрышном сегменте выберите файлы, которые вы хотите скопировать в другой сегмент.

  • В разделе «Действия» выберите «Копировать».
  • Перейти к получению ведро.
  • В разделе «Действия» выберите «Вставить»
0
ответ дан 28 November 2019 в 19:41

Старая тема, но это для всех, кто исследует тот же сценарий. Наряду со временем, которое потребовалось мне, на 20000+ объектов. Работает на AWS Linux / Centos, причем каждый объект представляет собой по большей части изображения, а также некоторые видео и различные мультимедийные файлы.

Использование инструментов интерфейса командной строки AWS для копирования файлов из сегмента A в сегмент B.

A. Создайте новую корзину

$ aws s3 mb s3://new-bucket-name

B. Синхронизация старого сегмента с новым сегментом

$ aws s3 sync s3://old-bucket-name s3://new-bucket-name

Копирование 20 000+ объектов ...

Начало 17:03

Окончание 17:06

Общее время для 20 000+ объектов = примерно 3 минуты

Один раз новый ведро настроено правильно, т.е. разрешения, политика и т. д., и вы хотите удалить старую корзину.

C. Удалите / удалите старую корзину

$ aws s3 rb --force s3://old-bucket-name
7
ответ дан 28 November 2019 в 19:41

Интерфейс командной строки AWS позволяет копировать одну корзину в другую в параллельных процессах. Взято из https://stackoverflow.com/a/40270349/371699 :

Следующие команды сообщают интерфейсу командной строки AWS использовать 1000 потоков для выполнения заданий (каждый небольшой файл или одна часть составной копии) и просматривайте 100 000 заданий:

aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000

После их выполнения вы можете использовать простую команду синхронизации, как показано ниже:

aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path

На машине m4.xlarge (в AWS - 4 ядер, 16 ГБ ОЗУ), в моем случае (файлы от 3 до 50 ГБ) скорость синхронизации / копирования увеличилась с 9,5 МБ / с до 700 + МБ / с, что в 70 раз больше по сравнению с конфигурацией по умолчанию.

2
ответ дан 28 November 2019 в 19:41

Теги

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