Існує кілька ключових факторів, які визначають пропускну здатність від EC2 до S3:
- Розмір файлу - менші файли потребують більшої кількості запитів, а також більше накладних витрат і повільніше передавання. Коефіцієнт посилення розміру файлів (при походженні з EC2) незначний для файлів більше 256 КБ. (В той час, як передача з віддаленого місця з більш високою затримкою, як правило, продовжує демонструвати помітні поліпшення, поки між 1MiB та 2MiB).
- Кількість паралельних потоків - одна нитка завантаження зазвичай має досить низький рівень - часто нижче 5 Мбіт / с. Пропускна здатність збільшується із кількістю одночасних ниток і має максимум між 64 і 128 потоками. Слід зазначити, що більші екземпляри здатні обробляти більшу кількість одночасних потоків.
- Розмір екземпляра - Відповідно до специфікацій екземпляра , більші екземпляри мають більше виділених ресурсів, включаючи більший (і менш змінний) розподіл пропускної здатності мережі (і введення / виведення в цілому - включаючи зчитування з ефемерних / EBS-дисків - які приєднані до мережі. Типово Значення чисел для кожної категорії:
- Дуже високий: теоретичний: 10Gbps = 1250MB / s; Реалістичний: 8,8 Гбіт / с = 1100 МБ / с
- Високий: теоретичний: 1Gbps = 125MB / s; Реалістичний: 750Mbps = 95MB / s
- Помірний: Теоретичний: 250 Мбіт / с; Реалістичний: 80Mbps = 10MB / s
- Низький: теоретичний: 100 Мбіт / с; Реалістичний: 10-15Mbps = 1-2MB / s
У випадках передачі великої кількості даних може бути економічно практичним використання екземпляра обчислення кластера, оскільки ефективний коефіцієнт посилення пропускної здатності (> 10x) перевищує різницю у витратах (2-3x).
Хоча вищезазначені ідеї є досить логічними (хоча обмеження на кожну нитку може і не бути), знайти еталони, що їх резервують, досить легко. Один особливо детальний ви можете знайти тут .
Використовуючи між 64 та 128 паралельними (одночасними) завантаженнями об'єктів 1МБ, слід наситити вихідну лінію 1 Гбіт / с, що має m1.xlarge і навіть повинна наситити 10Gbps висхідної лінії зв'язку кластерного обчислення (cc1.4xlarge).
Хоча міняти розмір екземпляра досить просто, іншими двома факторами може бути важче керувати.
- Розмір файлів зазвичай фіксований - ми не можемо об'єднати файли разом на EC2 і розділити їх на S3 (тож, малих файлів ми не можемо зробити). Однак великі файли ми можемо розділити на стороні EC2 і знову зібрати на стороні S3 (використовуючи багаточастинне завантаження S3). Як правило, це вигідно для файлів розміром більше 100 МБ.
- Паралельні нитки трохи важче задовольнити. Найпростіший підхід зводиться до написання обгортки для деякого існуючого сценарію завантаження, який запустить декілька копій одразу. Кращі підходи використовують API безпосередньо для досягнення чогось подібного. Маючи на увазі, що ключ - це паралельні запити, не важко знайти декілька потенційних сценаріїв, наприклад:
- s3cmd-модифікація - вилка ранньої версії s3cmd, яка додала цю функціональність, але не оновлювалася протягом декількох років.
- s3-paralle-put - досить недавній сценарій python, який добре працює